package hu.sch.web.kp.group; import hu.sch.domain.Group; import hu.sch.domain.Membership; import hu.sch.domain.user.User; import hu.sch.services.exceptions.MembershipAlreadyExistsException; import hu.sch.web.kp.KorokPage; import hu.sch.web.kp.group.admin.AdminMembershipsPanel; import hu.sch.web.kp.group.admin.AdminOldBoysPanel; import hu.sch.web.kp.user.ShowUser; import hu.sch.web.wicket.behaviors.ConfirmationBehavior; import hu.sch.web.wicket.components.MembershipTablePanel; import hu.sch.web.wicket.components.tables.DateIntervalPropertyColumn; import hu.sch.web.wicket.components.tables.DatePropertyColumn; import hu.sch.web.wicket.components.tables.MembershipTable; import java.util.Date; import java.util.List; import org.apache.wicket.RestartResponseException; import org.apache.wicket.extensions.markup.html.basic.SmartLinkLabel; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.basic.MultiLineLabel; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.Model; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.util.string.StringValueConversionException; /** * Az egyes körökről ezen az oldalon jelenítünk meg részletes adatokat. A * körvezetők számára lehetőség van a kör egyes feladatait kezelni. * * @author hege * @author messo */ public class ShowGroup extends KorokPage { /** * Paraméter nélküli konstruktor, hogy a nem létező paraméter is le legyen * kezelve. */ public ShowGroup() { error("Hibás paraméter!"); throw new RestartResponseException(getApplication().getHomePage()); } /** * A kör adatlapját itt állítjuk össze. * * @param parameters A megjelenítendő kör azonosítója */ public ShowGroup(PageParameters parameters) { //az oldal paraméterének dekódolása Long id = null; try { id = parameters.get("id").toLong(); } catch (StringValueConversionException e) { error("Hibás paraméter!"); throw new RestartResponseException(getApplication().getHomePage()); } final Group group = groupManager.findGroupById(id, true); final User user = getUser(); //ha a kör nem létezik if (group == null) { error("A megadott kör nem létezik!"); throw new RestartResponseException(getApplication().getHomePage()); } // TODO: elegánsabb megoldást szerkesszünk ide (rövidített név mező?) // headercímke szövegének megadása, csalni kell MAVE hosszú neve miatt.. if (group.getName().contains("Informatikus-hallgatók")) { setHeaderLabelText("MAVE adatlapja"); setTitleText("MAVE"); } else { setHeaderLabelText(group.getName()); setTitleText(group.getName()); } //A jobb oldali leugró menühöz előállítjuk a csoporttörténetes linket. add(new BookmarkablePageLink<GroupHistory>("detailView", GroupHistory.class, new PageParameters().add("id", group.getId().toString()))); //A kör admin felületéhez szükséges link jogosultságellenőrzéssel Link<EditGroupInfo> editPageLink = new BookmarkablePageLink<EditGroupInfo>("editPage", EditGroupInfo.class, new PageParameters().add("id", group.getId().toString())); if (user != null && isUserGroupLeader(group)) { editPageLink.setVisible(true); } else { editPageLink.setVisible(false); } add(editPageLink); //A kör küldöttjeinek beállításához szükséges link jogosultságellenőrzéssel Link<ChangeDelegates> editDelegates = new BookmarkablePageLink<ChangeDelegates>("editDelegates", ChangeDelegates.class, new PageParameters().add("id", group.getId().toString())); if (user != null && isUserGroupLeader(group) && group.getIsSvie()) { editDelegates.setVisible(true); } else { editDelegates.setVisible(false); } add(editDelegates); //A kör adatlapjának előállítása (kis táblázat) setDefaultModel(new CompoundPropertyModel<Group>(group)); add(new Label("name")); add(new Label("founded")); add(new Label("svieMs", (group.getIsSvie() ? "igen" : "nem"))); add(new SmartLinkLabel("webPage")); add(new SmartLinkLabel("mailingList")); add(new MultiLineLabel("introduction")); //körbe jelentkezéshez a link, JS-es kérdezéssel Link<Void> applyLink = new Link<Void>("applyToGroup") { @Override public void onClick() { try { membershipManager.joinGroup(group, user, new Date(), null, false); getSession().info("Sikeres jelentkezés"); setResponsePage(ShowUser.class); } catch (MembershipAlreadyExistsException ex) { getSession().error("Már tagja vagy a körnek!"); } } }; applyLink.add(new ConfirmationBehavior("Biztosan szeretnél jelentkezni a körbe?")); if (user == null || user.getGroups().contains(group) || !group.getUsersCanApply()) { applyLink.setVisible(false); } add(applyLink); //az egyes paneleket elő kell állítani, ez a jogosultságtól függ. List<Membership> activeMembers = group.getActiveMemberships(); List<Membership> inactiveMembers = group.getInactiveMemberships(); Panel adminOrActivePanel; Panel adminOrOldBoysPanel; if (isUserGroupLeader(group) || hasUserDelegatedPostInGroup(user, group)) { adminOrActivePanel = new AdminMembershipsPanel("adminOrActive", activeMembers); adminOrOldBoysPanel = new AdminOldBoysPanel("adminOrOldBoy", inactiveMembers); } else { adminOrActivePanel = new MembershipTablePanel("adminOrActive", new MembershipTable<Membership>("table", activeMembers, Membership.class) { @Override public void onPopulateColumns(List<IColumn<Membership, String>> columns) { columns.add(new DatePropertyColumn<Membership>(new Model<String>("Tagság kezdete"), MembershipTable.SORT_BY_MEMBERSHIP_DURATION, "start")); } }); adminOrOldBoysPanel = new MembershipTablePanel("adminOrOldBoy", new MembershipTable<Membership>("table", inactiveMembers, Membership.class) { @Override public void onPopulateColumns(List<IColumn<Membership, String>> columns) { columns.add(new DateIntervalPropertyColumn<Membership>(new Model<String>("Tagság ideje"), MembershipTable.SORT_BY_MEMBERSHIP_DURATION, "start", "end")); } }); } add(adminOrActivePanel); add(adminOrOldBoysPanel); } }