/* * File : GroupAdmin.java * Created : 14-feb-2003 15:53 * By : fbusquets * * JClic - Authoring and playing system for educational activities * * Copyright (C) 2000 - 2005 Francesc Busquets & Departament * d'Educacio de la Generalitat de Catalunya * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details (see the LICENSE file). */ package edu.xtec.jclic.report.rp; import edu.xtec.jclic.report.GroupData; import edu.xtec.jclic.report.UserData; import java.util.Iterator; import java.util.List; import java.util.ResourceBundle; /** * * @author Francesc Busquets (fbusquets@xtec.cat) * @version 13.08.09 */ public class GroupAdmin extends Basic{ public static String TITLE="group_admin_title"; public static String URL="groupAdmin"; public static final String GROUP="group", ID="id", NAME="name", ICON="icon"; public static final int MENU=0, GROUP_MENU=1, EDIT=2, EDIT_UPDATE=3, CREATE=4, CREATE_UPDATE=5, DELETE=6, DELETE_UPDATE=7, CLEAR=8, CLEAR_UPDATE=9, ERR=10; public static final String[] ACTIONS={"", "group", "edit", "editUpd", "create", "createUpd", "del", "delUpd", "clear", "clearUpd"}; protected int page; protected DateManager dm; protected List<GroupData> groups; protected List<UserData> users; protected GroupData gd; protected String returnUrl; public String getTitle(ResourceBundle bundle) { StringBuilder sb=new StringBuilder(200); sb.append(bundle.getString(TITLE)); if(gd!=null && gd.getText()!=null && gd.getText().length()>0) sb.append(": ").append(filter(gd.getText())); return sb.substring(0); } public String getUrl() { return urlParam(URL, LANG, lang); } public String getUrl(int action){ StringBuilder sb=new StringBuilder(300); sb.append(URL); urlParamSb(sb, LANG, lang, true); urlParamSb(sb, ACTION, ACTIONS[action], false); if(gd!=null) urlParamSb(sb, GROUP, gd.getId(), false); return sb.substring(0); } @Override public boolean init() throws Exception{ if(!super.init()) return false; String gId=getParamNotNull(GROUP); if(gId.length()>0) gd=bridge.getGroupData(gId); page=getAction(ACTIONS, MENU); if(page==CLEAR || page==CLEAR_UPDATE){ dm=new DateManager(this); if(!dm.init()) return false; } switch(page){ case EDIT_UPDATE: edit(); break; case CREATE_UPDATE: create(); break; case DELETE_UPDATE: delete(); break; case CLEAR_UPDATE: clear(); break; } if(page==MENU) groups=bridge.getGroups(); else if(page==GROUP_MENU && gd!=null) users=bridge.getUsers(gd.getId()); return true; } protected void edit() throws Exception{ returnUrl=getUrl(GROUP_MENU); errMsg=getMsg("db_error")+"<BR>"; String name=getParamNotNull(NAME).trim(); if(name.length()==0) errMsg=errMsg+getMsg("group_admin_invalid_name"); else{ gd.setText(name); gd.setIconUrl(getParamNotNull(ICON).trim()); try{ bridge.updateGroup(gd, false); page=GROUP_MENU; } catch(Exception ex){ errMsg=errMsg+ex.getLocalizedMessage(); } } } protected void create() throws Exception{ returnUrl=getUrl(MENU); errMsg=getMsg("db_error")+"<BR>"; String name=getParamNotNull(NAME).trim(); String id=getParamNotNull(ID).trim(); String icon=getParamNotNull(ICON).trim(); if(name.length()==0) errMsg=errMsg+getMsg("group_admin_invalid_name"); else if(id.length()==0) errMsg=errMsg+getMsg("group_admin_invalid_id"); else{ gd=bridge.getGroupData(id); if(gd!=null){ returnUrl=urlParam(urlParam(getUrl(CREATE), NAME, name), ICON, icon); errMsg=errMsg+getMsg("group_admin_id_already_exists"); } else{ try{ gd=new GroupData(id, name, icon, null); bridge.updateGroup(gd, true); page=GROUP_MENU; } catch(Exception ex){ gd=null; errMsg=errMsg+ex.getLocalizedMessage(); } } } } protected void delete() throws Exception{ returnUrl=getUrl(GROUP_MENU); try{ bridge.deleteGroup(gd.getId()); gd=null; page=MENU; } catch(Exception ex){ returnUrl=getUrl(GROUP_MENU); errMsg=getMsg("db_error")+"<BR>"+ex.getLocalizedMessage(); } } protected void clear() throws Exception{ returnUrl=getUrl(GROUP_MENU); try{ bridge.clearGroupReportData(gd.getId(), dm.dFrom, dm.dTo); page=GROUP_MENU; } catch(Exception ex){ errMsg=getMsg("db_error")+"<BR>"+ex.getLocalizedMessage(); } } @Override public void head(java.io.PrintWriter out) throws Exception{ super.head(out); if(page==CLEAR){ StringBuilder sb=new StringBuilder(200); dm.writeDateScript(sb); out.println(sb.substring(0)); } } @Override public void body(java.io.PrintWriter out) throws Exception{ super.body(out); StringBuilder sb=new StringBuilder(2000); StringBuilder sb2=new StringBuilder(500); Iterator it; boolean flag=false; // decidir titol segons pagina sb.append(linkTo(urlParam(Main.URL, LANG, lang), bundle.getString(Main.TITLE), null)); if(page!=MENU) sb.append(" | ").append(linkTo(getUrl(), getMsg(TITLE), null)); standardHeader(out, filter(getTitle(bundle)), sb.substring(0)); sb.setLength(0); if(gd==null && page!=CREATE && page!=MENU){ page=ERR; if(errMsg==null) errMsg=getMsg("bad_data"); } switch(page){ case MENU: sb.append("<table class=\"tblA\" width=400>\n"); sb.append("<tr><th>").append(getMsg("group_admin_groups")).append("</th></tr>\n"); it=groups.iterator(); while(it.hasNext()){ GroupData gdata=(GroupData)it.next(); String url=urlParam(getUrl(GROUP_MENU), GROUP, gdata.getId()); sb.append("<tr><td><a href=\"").append(url).append("\">").append(filter(gdata.getText())); sb.append("</a></td></tr>\n"); } sb.append("</table>\n"); sb.append("<br clear=\"all\">\n"); sb.append("<form>"); sb.append(buttonTo(getUrl(CREATE), getMsg("group_admin_new_button"), null)); sb.append("</form>"); break; case GROUP_MENU: sb.append("<form class=\"info\">\n"); sb.append("<p><strong>").append(getMsg("group_admin_id")).append("</strong> ").append(filter(gd.getId())).append("</p>\n"); sb.append("<p><strong>").append(getMsg("group_admin_name")).append("</strong> ").append(filter(gd.getText())).append("</p>\n"); sb.append("<p><strong>").append(getMsg("group_admin_icon")).append(" "); if(gd.getIconUrl()!=null && gd.getIconUrl().length()>0){ sb.append("<img src=\"").append(filter(gd.getIconUrl())).append("\" title=\""); sb.append(filter(gd.getIconUrl())).append("\">"); } else sb.append("---"); sb.append("</p>\n"); sb.append("<p>"); sb.append(buttonTo(getUrl(EDIT), getMsg("group_admin_edit_button"), null)); sb.append(buttonTo(getUrl(DELETE), getMsg("group_admin_delete_button"), null)); sb.append(buttonTo(getUrl(CLEAR), getMsg("group_admin_clear_button"), null)); sb.append("</p>\n"); sb.append("</form>\n<br clear=\"all\">\n"); if(users!=null && users.size()>0){ sb.append("<table class=\"tblA\" width=500>\n"); sb.append("<tr><th>").append(getMsg("group_admin_users")).append("</th></tr>\n"); it=users.iterator(); while(it.hasNext()){ UserData ud=(UserData)it.next(); sb2.setLength(0); sb2.append(UserAdmin.URL); urlParamSb(sb2, LANG, lang, true); urlParamSb(sb2, GROUP, gd.getId(), false); urlParamSb(sb2, UserAdmin.USER, ud.getId(), false); sb.append("<tr><td><a href=\"").append(sb2.substring(0)).append("\">").append(filter(ud.getText())); sb.append("</a></td></tr>\n"); } sb.append("</table>\n"); sb.append("<br clear=\"all\">"); } else{ sb.append("<p><strong>").append(getMsg("group_admin_no_users")).append("</strong></p>\n"); } sb.append("<form>"); sb2.setLength(0); sb2.append(UserAdmin.URL); urlParamSb(sb2, LANG, lang, true); urlParamSb(sb2, ACTION, UserAdmin.ACTIONS[UserAdmin.CREATE], false); urlParamSb(sb2, GROUP, gd.getId(), false); sb.append(buttonTo(sb2.substring(0), getMsg("group_admin_create_user_button"), null)); sb.append("</form>\n"); break; case EDIT: flag=true; case CREATE: String id=(gd!=null ? gd.getId() : getParamNotNull(ID).trim()); String name=(gd!=null ? gd.getText() : getParamNotNull(NAME).trim()); String icon=(gd!=null ? gd.getIconUrl() : getParamNotNull(ICON).trim()); sb.append("<form class=\"inputForm\" method=\"post\" action=\"").append(getUrl(flag ? EDIT_UPDATE : CREATE_UPDATE)).append("\">\n"); sb.append("<p><strong>").append(getMsg("group_admin_id")).append("</strong> "); sb.append("<input name=\"").append(ID).append("\" value=\"").append(filter(id)).append("\" size=40"); if(flag) sb.append(" readonly"); sb.append("></p>\n"); //if(!flag) // sb.append("<input name=\"").append(ID).append("\" value=\"").append(filter(id)).append("\" size=\"40\">"); //else // sb.append(filter(id==null ? "" : id)); //sb.append("</p>\n"); sb.append("<p><strong>").append(getMsg("group_admin_name")).append("</strong> "); sb.append("<input name=\"").append(NAME).append("\" value=\"").append(filter(name)).append("\" size=40></p>\n"); sb.append("<p><strong>").append(getMsg("group_admin_icon")).append("</strong> "); sb.append("<input name=\"").append(ICON).append("\" value=\"").append(filter(icon)).append("\" size=40></p>\n"); sb.append("<p><input type=\"submit\" value=\"").append(getMsg("submit")).append("\"> "); sb.append(buttonTo(getUrl(flag ? GROUP_MENU : MENU), getMsg("cancel"), null)); sb.append("</p>\n"); sb.append("</form>\n"); sb.append("<br clear=\"all\">\n"); break; case DELETE: sb.append("<p><strong>").append(getMsg("group_admin_delete_group")).append(" \"").append(filter(gd.getText())).append("\"</strong></p>\n"); sb.append("<p>").append(getMsg("group_admin_delete_group_explain")).append("</p>\n"); sb.append("<p>").append(getMsg("report_areyousure")).append("</p>\n"); sb.append("<form method=\"post\" action=\"").append(getUrl(DELETE_UPDATE)).append("\">\n"); sb.append("<p><input type=\"submit\" value=\"").append(getMsg("YES")).append("\" width=50>\n"); sb.append(buttonTo(getUrl(GROUP_MENU), getMsg("NOT"), " width=50")); sb.append("</p>\n"); sb.append("</form>\n"); break; case CLEAR: sb.append("<p><strong>").append(getMsg("group_admin_clear_group")).append(" \"").append(filter(gd.getText())).append("\"</strong></p>\n"); sb.append("<p>").append(getMsg("group_admin_clear_group_explain")).append("</p>\n"); sb.append("<form class=\"inputForm\" action=\"").append(getUrl(CLEAR_UPDATE)).append("\" method=\"post\" name=\"").append(MAIN_FORM).append("\">\n"); dm.writeHiddenFields(sb); sb2.setLength(0); sb2.append("document.").append(MAIN_FORM).append(".submit()"); dm.zonaData(sb, buttonAction(sb2.substring(0), getMsg("db_clear_reports_date"), null)); sb.append("</form>\n"); sb.append("<br clear=\"all\">\n"); break; default: sb.append("<p><strong>").append(getMsg("error")).append("</strong></p>\n"); if(errMsg!=null){ sb.append("<p>").append(errMsg).append("</p>\n"); } if(returnUrl!=null){ sb.append("<p><a href=\"").append(returnUrl).append("\">").append(getMsg("return")).append("</a></p>\n"); } } out.println(sb.substring(0)); }; }