/* * Created on 4.3.2004 */ package is.idega.idegaweb.golf.startingtime.presentation; import is.idega.idegaweb.golf.GolfField; import is.idega.idegaweb.golf.entity.Field; import is.idega.idegaweb.golf.entity.Group; import is.idega.idegaweb.golf.entity.Member; import is.idega.idegaweb.golf.entity.MemberHome; import is.idega.idegaweb.golf.entity.Startingtime; import is.idega.idegaweb.golf.entity.StartingtimeFieldConfig; import is.idega.idegaweb.golf.entity.Union; import is.idega.idegaweb.golf.presentation.GolfBlock; import is.idega.idegaweb.golf.service.StartService; import java.io.IOException; import java.io.PrintWriter; import java.sql.SQLException; import java.util.List; import java.util.StringTokenizer; import javax.ejb.FinderException; import com.idega.data.EntityFinder; import com.idega.data.IDOLookup; import com.idega.presentation.IWContext; import com.idega.presentation.Table; import com.idega.presentation.text.Link; import com.idega.presentation.ui.BackButton; import com.idega.presentation.ui.CheckBox; import com.idega.presentation.ui.CloseButton; import com.idega.presentation.ui.DropdownMenu; import com.idega.presentation.ui.Form; import com.idega.presentation.ui.SelectionBox; import com.idega.presentation.ui.SubmitButton; import com.idega.presentation.ui.TextInput; import com.idega.util.IWCalendar; import com.idega.util.IWTimestamp; /** * @author laddi */ public class AdminRegisterTeeTime extends GolfBlock { private StartService service = new StartService(); public void main(IWContext modinfo) throws Exception { int temp = 0; getParentPage().setTitle(localize("start.register_player", "Register Player")); getParentPage().setBackgroundColor("white"); Form myForm = new Form(); String MemberId = modinfo.getSessionAttribute("member_id").toString(); String FieldID = modinfo.getSessionAttribute("field_id").toString(); String deleteCheckBox = modinfo.getParameter("check"); setGraphic(myForm); try { if (deleteCheckBox != null && modinfo.getParameter("btnUpdatePlayer") != null) { if (!updatePlayers(MemberId, modinfo)) { setErroResponse(myForm); } else { deletePlayers(MemberId, modinfo); getParentPage().setParentToReload(); getParentPage().close(); } } else if (modinfo.getParameter("btnUpdatePlayer") != null) { if (!updatePlayers(MemberId, modinfo)) { setErroResponse(myForm); } else { getParentPage().setParentToReload(); getParentPage().close(); } } else { if (isAdmin()) { adminView(MemberId, FieldID, myForm, modinfo); } else drawTable(MemberId, FieldID, myForm, modinfo); } add(myForm); } catch (SQLException E) { System.out.print("SQLException: " + E.getMessage()); System.out.print("SQLState: " + E.getSQLState()); System.out.print("VendorError: " + E.getErrorCode()); } catch (Exception E) { E.printStackTrace(); } } public TextInput insertEditBox(String name, String text) { TextInput myInput = new TextInput(name); myInput.setContent(text); return myInput; } public TextInput insertEditBox(String name, String text, int size) { TextInput myInput = new TextInput(name); myInput.setSize(size); myInput.setContent(text); return myInput; } private void insertOrderByBottons(Table myTable, PrintWriter out) { //ath! eins og er er �etta ekki takkar sem ra�ast eftir heldur bara texti, // og ra�ar ekki String txtDelUrl = "/pics/rastimask/Heiti-Graphic/Geyda.gif"; String txtNameUrl = "/pics/rastimask/Heiti-Graphic/Gnafn.gif"; String txtTimeUrl = "/pics/rastimask/Heiti-Graphic/Gtimi.gif"; String txtHandicapUrl = "/pics/rastimask/Heiti-Graphic/Gforgjof.gif"; String txtClubUrl = "/pics/rastimask/Heiti-Graphic/Gklubbur.gif"; String txtCardUrl = "/pics/rastimask/Heiti-Graphic/Gserkort.gif"; String txtCardNoUrl = "/pics/rastimask/Heiti-Graphic/Gkortnumer.gif"; String txtDateUrl = "/pics/rastimask/Heiti-Graphic/Gdags.gif"; myTable.add(getLocalizedText("start.delete","Delete"), 1, 1); myTable.add(getLocalizedText("start.name","Name"), 2, 1); myTable.add(getLocalizedText("start.club","Club"), 3, 1); myTable.add(getLocalizedText("start.handicap","Handicap"), 4, 1); myTable.add(getLocalizedText("start.vip_card","VIP card"), 5, 1); myTable.add(getLocalizedText("start.card_number","Card number"), 6, 1); myTable.add(getLocalizedText("start.date","Date"), 7, 1); myTable.add(getLocalizedText("start.time","Time"), 8, 1); } public boolean updatePlayers(String MemberId, IWContext modinfo) throws SQLException, IOException { PrintWriter out = modinfo.getResponse().getWriter(); int numPlayers = 0; boolean admin = isAdmin(Integer.parseInt(MemberId)); String FieldID = ""; Startingtime[] startArray = null; Startingtime stime = (Startingtime) IDOLookup.createLegacy(Startingtime.class); if (modinfo.getParameter("drpdFieldID") != null) { FieldID = modinfo.getParameter("drpdFieldID"); } else FieldID = "10";//modinfo.getSession().getAttribute("field_id").toString(); try { startArray = (Startingtime[]) modinfo.getSessionAttribute("StartChangeArray"); modinfo.removeSessionAttribute("StartChangeArray"); String playerName[] = modinfo.getParameterValues("name"); String playerClub[] = modinfo.getParameterValues("club"); String playerHandicap[] = modinfo.getParameterValues("handicap"); String playerCard[] = modinfo.getParameterValues("card"); String playerCardNo[] = modinfo.getParameterValues("cardNo"); System.err.println("arraylength : " + startArray.length); for (int i = 0; i < startArray.length; i++) { System.err.println(i); stime = startArray[i]; stime.setPlayerName(playerName[i]); stime.setClubName(playerClub[i]); try { stime.setHandicap(new Float(com.idega.util.text.TextSoap.findAndReplace(playerHandicap[i], ",", "."))); } catch (NumberFormatException e) { } catch (NullPointerException e) { System.err.println("handicap null"); } try { stime.update(); } catch (SQLException E) { System.err.println("error : i = " + i); } } } catch (Exception E) { out.print("Exception: " + E.getMessage()); } return true; } public int deletePlayers(String MemberId, IWContext modinfo) throws SQLException, IOException { PrintWriter out = modinfo.getResponse().getWriter(); Startingtime stime = (Startingtime) IDOLookup.instanciateEntity(Startingtime.class); try { if (modinfo.getRequest().getParameterValues("check") != null) { String[] delcheck = modinfo.getRequest().getParameterValues("check"); for (int i = 0; i < delcheck.length; i++) { stime.deleteMultiple("startingtime_id", delcheck[i]); } } } catch (SQLException E) { E.printStackTrace(); out.print("SQLException: " + E.getMessage()); out.print("SQLState: " + E.getSQLState()); } return 0; } public String formatDate(IWCalendar funcDate, String date) { int day, month, year; StringTokenizer Timetoken = new StringTokenizer(date, "-"); year = Integer.parseInt(Timetoken.nextToken()); month = Integer.parseInt(Timetoken.nextToken()); day = Integer.parseInt(Timetoken.nextToken()); String mon = funcDate.getMonthName(month); return day + ". " + mon.toLowerCase(); } public void adminView(String memberId, String FieldID, Form myForm, IWContext modinfo) throws IOException { String btnSaekjaUrl = "../gummi/pics/rastimask/Takkar/Tsaekja1.gif"; PrintWriter out = modinfo.getResponse().getWriter(); Table myTable = new Table(4, 2); myTable.add(FieldDropdown("drpField", memberId, FieldID, modinfo), 2, 1); myTable.setAlignment("center"); myForm.add(myTable); try { drawTable(memberId, FieldID, myForm, modinfo); } catch (SQLException E) { E.printStackTrace(); out.print("SQLException: " + E.getMessage()); out.print("SQLState: " + E.getSQLState()); out.print("VendorError: " + E.getErrorCode()); } } public GolfField getFieldInfo(int field, String date) throws SQLException, IOException { StartingtimeFieldConfig FieldConfig = service.getFieldConfig(field, date); GolfField field_info = new GolfField(new IWTimestamp(FieldConfig.getOpenTime()).toSQLTimeString(), new IWTimestamp(FieldConfig.getCloseTime()).toSQLTimeString(), FieldConfig.getMinutesBetweenStart(), field, date, FieldConfig.getDaysShown(), FieldConfig.publicRegistration()); return field_info; } public String getTime(int group, GolfField myGolfField) { int interval = myGolfField.get_interval(); int openHour = myGolfField.get_open_hour(); int openMin = myGolfField.get_open_min(); int Hour = openHour + ((group - 1) * interval) / 60; int Min = openMin + ((group - 1) * interval) % 60; if (Min >= 60) { Min -= 60; Hour++; } String time; if (Min < 10 && Hour < 10) time = "0" + Hour + ":0" + Min; else if (Min < 10) time = "" + Hour + ":0" + Min; else if (Hour < 10) time = "0" + Hour + ":" + Min; else time = "" + Hour + ":" + Min; return time; } public void setGraphic(Form myForm) { String picUrl_1 = "/pics/rastima_popup/breyting.gif"; String picUrl_2 = "/pics/rastima_popup/tile.gif"; Table Header = new Table(2, 1); //Header.setBorder(1); Header.setHeight("90"); Header.setWidth(1, "185"); Header.setCellpadding(0); Header.setCellspacing(0); getParentPage().setMarginWidth(0); getParentPage().setMarginHeight(0); getParentPage().setLeftMargin(0); getParentPage().setTopMargin(0); Header.setBackgroundImage(2, 1, getResourceBundle().getImage(picUrl_1)); Header.setBackgroundImage(1, 1, getResourceBundle().getImage(picUrl_2)); Header.setWidth("100%"); myForm.add(Header); } public void setErroResponse(Form myForm) { String borderPicUrl = "pics/rastimask/Rastimaskraning/BorderTiler.gif"; String btnBackUrl = "pics/rastimask/Takkar/Ttilbaka1.gif"; Table myTable = new Table(2, 3); myTable.add(getErrorText(localize("start.error1","Nau�synlegt er a� hafa nafn. Ef ߜ vilt afturkalla skr�ningu, veldu ߇ \"Ey�a\" boxi�")), 2, 1); myTable.add(getResourceBundle().getImage(borderPicUrl), 1, 1); myTable.add(getResourceBundle().getImage(borderPicUrl), 1, 2); myTable.add(getResourceBundle().getImage(borderPicUrl), 1, 3); myTable.add(new BackButton(getResourceBundle().getImage(btnBackUrl)), 2, 3); myTable.setAlignment(2, 3, "center"); myTable.setCellpadding(0); myTable.setCellspacing(0); myForm.add(myTable); } private String getOrderByClause(IWContext modinfo) { String ordyerByClause = "grup_num"; if (modinfo.getParameter("steSkraName") != null) { ordyerByClause = "player_name"; } else if (modinfo.getParameter("hCap") != null) { ordyerByClause = "handicap"; } else if (modinfo.getParameter("Time") != null) { ordyerByClause = "grup_num"; } else if (modinfo.getParameter("steName") != null) { ordyerByClause = "player_name"; } else if (modinfo.getParameter("steClub") != null) { ordyerByClause = "club_name"; } else if (modinfo.getParameter("steCardNo") != null) { ordyerByClause = "card_num"; } else if (modinfo.getParameter("steDate") != null) { ordyerByClause = "startingtime_date"; } else if (modinfo.getParameter("serkort") != null) { ordyerByClause = "card_name"; } return ordyerByClause; } public boolean drawTable(String MemberId, String FieldID, Form myForm, IWContext modinfo) throws IOException, SQLException { PrintWriter out = modinfo.getResponse().getWriter(); IWCalendar funcDate = new IWCalendar(); Table myTable = null; String orderby_clause = "startingtime_date"; GolfField myGolfField = new GolfField(); String ordyerByClause = getOrderByClause(modinfo); boolean admin = isAdmin(Integer.parseInt(MemberId)); if (modinfo.getRequest().getParameter("drpField") != null) FieldID = modinfo.getRequest().getParameter("drpField"); try { Startingtime[] startingtimemeArray = null; Startingtime stime = (Startingtime) IDOLookup.instanciateEntity(Startingtime.class); ///out.print(FieldID+" member id "+MemberId); if (admin) { startingtimemeArray = service.findAllPlayersInFieldOrdered(FieldID, ordyerByClause); } else { startingtimemeArray = service.findAllPlayersByMemberOrdered(FieldID, MemberId, ordyerByClause); } modinfo.setSessionAttribute("StartChangeArray", startingtimemeArray); int rows = startingtimemeArray.length; //out.print(rows); if (rows == 0) return false; if (admin) myTable = new Table(9, rows + 2); else myTable = new Table(8, rows + 2); myTable.setAlignment("center"); //myTable.setBorder(1); int i = 0; for (; i < startingtimemeArray.length; i++) { stime = startingtimemeArray[i]; myGolfField = getFieldInfo(Integer.parseInt(FieldID), stime.getStartingtimeDate().toString()); String group_num = getTime(stime.getGroupNum(), myGolfField); myTable.add(new CheckBox("check", new Integer(stime.getID()).toString()), 1, i + 2); myTable.add(insertEditBox("name", stime.getPlayerName()), 2, i + 2); if (stime.getClubName() == null || stime.getClubName().equals("")) myTable.add(insertUnionDropdown("club", "-", 5), 3, i + 2); else myTable.add(insertUnionDropdown("club", stime.getClubName(), 5), 3, i + 2); if (stime.getHandicap() == -1) myTable.add(insertEditBox("handicap", "-", 4), 4, i + 2); else myTable.add(insertEditBox("handicap", new Float(stime.getHandicap()).toString(), 4), 4, i + 2); if (stime.getCardName() == null || stime.getCardName().equals("")) myTable.add(insertEditBox("card", " ", 6), 5, i + 2); else myTable.add(insertEditBox("card", stime.getCardName(), 6), 5, i + 2); if (stime.getCardNum() == null || stime.getCardNum().equals("")) myTable.add(insertEditBox("cardNo", " ", 6), 6, i + 2); else myTable.add(insertEditBox("cardNo", stime.getCardNum(), 6), 6, i + 2); myTable.add(getText(formatDate(funcDate, stime.getStartingtimeDate().toString())), 7, i + 2); myTable.add(getText(group_num), 8, i + 2); if (admin) myTable.add(insertHyperlink(stime.getMember().getName(), stime.getMemberID(), AdminRegisterTeeTime.class), 9, i + 2); } String btnUpdateUrl = "/pics/rastimask/Takkar/Tuppfaera1.gif"; String btnCancelUrl = "/pics/rastimask/Takkar/Thaetta-vid1.gif"; insertOrderByBottons(myTable, out); if (admin) { //h�r er ekki settur takki � bili //String txtSkraNameUrl = // "/pics/rastimask/Heiti-Graphic/Gskraningaradili.gif"; //myTable.add(new SubmitButton(new Image(txtSkraNameUrl), // "steSkraName"), 9, 1); myTable.add(getLocalizedText("start.owner","Owner"), 9, 1); } myTable.mergeCells(5, i + 2, 7, i + 2); myTable.add(new SubmitButton(getResourceBundle().getImage(btnUpdateUrl), "btnUpdatePlayer"), 5, i + 2); myTable.add(new CloseButton(getResourceBundle().getImage(btnCancelUrl)), 5, i + 2); myTable.setAlignment(5, i + 2, "right"); myForm.add(myTable); } catch (SQLException E) { out.print("SQLException: " + E.getMessage()); out.print("SQLState: " + E.getSQLState()); out.print("VendorError: " + E.getErrorCode()); E.printStackTrace(); return false; } return true; } private Link insertHyperlink(String name, int value, String action) { Link myLink = getLink(name); myLink.setURL(action); myLink.addParameter(name, new Integer(value).toString()); return myLink; } private Link insertHyperlink(String name, int value, Class action) { Link myLink = getLink(name); myLink.setClassToInstanciate(action); myLink.addParameter(name, new Integer(value).toString()); return myLink; } /** * temp implementation (isClubAdmin() and isClubWorker()) */ public boolean isAdmin(int memberId) throws SQLException { Member member = null; try { member = ((MemberHome) IDOLookup.getHomeLegacy(Member.class)).findByPrimaryKey(memberId); } catch (FinderException e) { e.printStackTrace(); } if (member != null) { String groupName = null; Group[] access = member.getGroups(); for (int i = 0; i < access.length; i++) { groupName = access[i].getName(); if ("administrator".equals(groupName) || "club_admin".equals(groupName) || "club_worker".equals(groupName)) return true; } } return false; } public SelectionBox insertSelectionBox(String SelectionBoxName, IWContext modinfo, int height) throws IOException, SQLException { SelectionBox mySelectionBox = new SelectionBox(SelectionBoxName); mySelectionBox.setHeight(height); Field[] field = service.getStartingEntryField(); for (int i = 0; i < field.length; i++) { mySelectionBox.addElement("" + field[i].getID(), field[i].getName()); } mySelectionBox.keepStatusOnAction(); return mySelectionBox; } public DropdownMenu FieldDropdown(String dropdownName, String MemberId, String fieldId, IWContext modinfo) throws IOException { Field[] field = null; DropdownMenu myDropdown = new DropdownMenu(dropdownName); try { if (isAdmin(Integer.parseInt(MemberId), false, false)) field = service.getStartingEntryField(); else field = service.getFields((String) modinfo.getSessionAttribute("member_main_union_id")); for (int i = 0; i < field.length; i++) { myDropdown.addMenuElement(field[i].getID(), field[i].getName()); } myDropdown.keepStatusOnAction(); myDropdown.setToSubmit(); myDropdown.setSelectedElement(fieldId); } catch (SQLException E) { E.printStackTrace(); } return myDropdown; } public boolean isAdmin(int memberId, boolean clubadmin, boolean clubworker) throws SQLException { Member member = null; try { member = ((MemberHome) IDOLookup.getHomeLegacy(Member.class)).findByPrimaryKey(memberId); } catch (FinderException e) { e.printStackTrace(); } if (member != null) { String groupName = null; Group[] access = member.getGroups(); for (int i = 0; i < access.length; i++) { groupName = access[i].getName(); if ("administrator".equals(groupName)) return true; if (clubadmin && "club_admin".equals(groupName)) return true; if (clubworker && "club_worker".equals(groupName)) return true; } } return false; } public DropdownMenu insertUnionDropdown(String name, String text, int size) throws SQLException { DropdownMenu mydropdown = new DropdownMenu(name); Union union = (Union) IDOLookup.instanciateEntity(Union.class); List unions = EntityFinder.findAll(union, "Select * from " + union.getEntityName() + " order by abbrevation"); for (int i = 0; i < unions.size(); i++) { union = (Union) unions.get(i); mydropdown.addMenuElement(union.getAbbrevation(), union.getAbbrevation()); } mydropdown.setSelectedElement(text); mydropdown.keepStatusOnAction(); return mydropdown; } }