/*
* File : UserAdmin.java
* Created : 19-feb-2003 16:06
* 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 edu.xtec.util.StrUtils;
import java.util.ResourceBundle;
/**
*
* @author Francesc Busquets (fbusquets@xtec.cat)
* @version 13.08.09
*/
public class UserAdmin extends Basic{
public static String TITLE="user_admin_title";
public static String URL="userAdmin";
public static final String GROUP="group", ID="id", NAME="name", ICON="icon",
USER="user";
// 22-mai-06: Added password fields
public static final String PASS="pass", PASSC="passc";
// ---
public static final int USER_MENU=0,
EDIT=1, EDIT_UPDATE=2,
CREATE=3, CREATE_UPDATE=4,
DELETE=5, DELETE_UPDATE=6,
CLEAR=7, CLEAR_UPDATE=8, ERR=9;
public static final String[] ACTIONS={"",
"edit", "editUpd",
"create", "createUpd",
"del", "delUpd",
"clear", "clearUpd"};
protected int page;
protected DateManager dm;
protected GroupData gd;
protected UserData ud;
protected boolean err=true;
protected String returnUrl;
public String getTitle(ResourceBundle bundle) {
/*
StringBuilder sb=new StringBuilder(bundle.getString(TITLE));
if(ud!=null && ud.text!=null && ud.text.length()>0)
sb.append(": ").append(filter(ud.text));
return sb.toString();
*/
return bundle.getString(TITLE);
}
public String getUrl() {
return urlParam(URL, LANG, lang);
}
public String getUrl(int action){
StringBuilder sb=new StringBuilder(200);
sb.append(URL);
urlParamSb(sb, LANG, lang, true);
urlParamSb(sb, ACTION, ACTIONS[action], false);
if(ud!=null)
urlParamSb(sb, USER, ud.getId(), false);
else 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 uId=getParamNotNull(USER);
if(uId.length()>0)
ud=bridge.getUserData(uId);
String gId=getParamNotNull(GROUP);
if(ud!=null)
gId=ud.groupId;
if(gId.length()>0)
gd=bridge.getGroupData(gId);
page=getAction(ACTIONS, USER_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;
}
return true;
}
protected void edit() throws Exception{
returnUrl=getUrl(USER_MENU);
errMsg=getMsg("db_error")+"<BR>";
String name=getParamNotNull(NAME).trim();
// 22-mai-06: Added password fields
String pass=StrUtils.nullableString(getParam(PASS));
String passc=StrUtils.nullableString(getParam(PASSC));
// ---
if(name.length()==0)
errMsg=errMsg+getMsg("user_admin_invalid_name");
// 22-mai-06: Added password fields
else if(!StrUtils.compareObjects(pass, passc))
errMsg=errMsg+getMsg("user_admin_err_bad_pw");
// ---
else{
ud.setText(name);
// 22-mai-06: Added password fields
ud.pwd=(pass==null ? null : edu.xtec.util.Encryption.Encrypt(pass));
// ---
ud.setIconUrl(getParamNotNull(ICON).trim());
try{
bridge.updateUser(ud, false);
page=USER_MENU;
} catch(Exception ex){
errMsg=errMsg+ex.getLocalizedMessage();
}
}
}
protected String getGroupUrl(){
StringBuilder sb=new StringBuilder(300);
sb.append(GroupAdmin.URL);
urlParamSb(sb, LANG, lang, true);
urlParamSb(sb, ACTION, GroupAdmin.ACTIONS[GroupAdmin.GROUP_MENU], false);
urlParamSb(sb, GroupAdmin.GROUP, gd.getId(), false);
return sb.substring(0);
}
protected void create() throws Exception{
returnUrl=getGroupUrl();
errMsg=getMsg("db_error")+"<BR>";
String name=getParamNotNull(NAME).trim();
String id=getParamNotNull(ID).trim();
String icon=getParamNotNull(ICON).trim();
// 22-mai-06: Added password fields
String pass=StrUtils.nullableString(getParam(PASS));
String passc=StrUtils.nullableString(getParam(PASSC));
// ---
if(name.length()==0)
errMsg=errMsg+getMsg("user_admin_invalid_name");
else if(id.length()==0)
errMsg=errMsg+getMsg("user_admin_invalid_id");
// 22-mai-06: Added password fields
else if(!StrUtils.compareObjects(pass, passc))
errMsg=errMsg+getMsg("user_admin_err_bad_pw");
// ---
else{
ud=bridge.getUserData(id);
if(ud!=null){
returnUrl=urlParam(urlParam(getUrl(CREATE), NAME, name), ICON, icon);
errMsg=errMsg+getMsg("user_admin_id_already_exists");
}
else{
try{
ud=new UserData(id, name, icon, null, gd.getId());
// 22-mai-06: Added password fields
ud.pwd=(pass==null ? null : edu.xtec.util.Encryption.Encrypt(pass));
// ---
bridge.updateUser(ud, true);
page=USER_MENU;
} catch(Exception ex){
ud=null;
errMsg=errMsg+ex.getLocalizedMessage();
}
}
}
}
protected void delete() throws Exception{
returnUrl=getUrl(USER_MENU);
try{
bridge.deleteUser(ud.getId());
ud=null;
errMsg=getMsg("user_admin_user_deleted");
err=false;
returnUrl=getGroupUrl();
} catch(Exception ex){
returnUrl=getUrl(USER_MENU);
errMsg=getMsg("db_error")+"<BR>"+ex.getLocalizedMessage();
}
}
protected void clear() throws Exception{
returnUrl=getUrl(USER_MENU);
try{
bridge.clearUserReportData(ud.getId(), dm.dFrom, dm.dTo);
page=USER_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(300);
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(3000);
StringBuilder sb2=new StringBuilder(500);
boolean flag=false;
sb.append(linkTo(urlParam(Main.URL, LANG, lang), bundle.getString(Main.TITLE), null));
sb.append(" | ");
sb.append(linkTo(urlParam(GroupAdmin.URL, LANG, lang), bundle.getString(GroupAdmin.TITLE), null));
if(gd!=null){
sb.append(" | ");
sb.append(linkTo(getGroupUrl(), gd.getText(), null));
}
if(page!=USER_MENU && ud!=null)
sb.append(" | ").append(linkTo(getUrl(USER_MENU), ud.getText(), null));
standardHeader(out, filter(getTitle(bundle)), sb.substring(0));
sb.setLength(0);
if(ud==null && page!=CREATE && page!=DELETE_UPDATE){
page=ERR;
if(errMsg==null)
errMsg=getMsg("bad_data");
err=true;
}
switch(page){
case USER_MENU:
sb.append("<form class=\"info\">\n");
sb.append("<p><strong>").append(getMsg("user_admin_id")).append("</strong> ").append(filter(ud.getId())).append("</p>\n");
sb.append("<p><strong>").append(getMsg("user_admin_name")).append("</strong> ").append(filter(ud.getText())).append("</p>\n");
// 22-mai-06: Added password fields
sb.append("<p><strong>").append(getMsg("user_admin_pw_prompt")).append("</strong> ").append(ud.pwd==null ? "" : "***").append("</p>\n");
// ---
sb.append("<p><strong>").append(getMsg("user_admin_icon")).append("</strong> ");
if(ud.getIconUrl()!=null && ud.getIconUrl().length()>0){
sb.append("<img src=\"").append(filter(ud.getIconUrl())).append("\"");
sb.append(" title=\"").append(filter(ud.getIconUrl())).append("\">");
}
else
sb.append("---\n");
sb.append("</p>\n");
sb.append("<p>");
sb.append(buttonTo(getUrl(EDIT), getMsg("user_admin_edit_button"), null));
sb.append(buttonTo(getUrl(DELETE), getMsg("user_admin_delete_button"), null));
sb.append(buttonTo(getUrl(CLEAR), getMsg("user_admin_clear_button"), null));
sb.append("</p>\n");
sb.append("</form>\n");
sb.append("<br clear=\"all\">\n");
break;
case EDIT:
flag=true;
case CREATE:
String id=(ud!=null ? ud.getId() : getParamNotNull(ID).trim());
String name=(ud!=null ? ud.getText() : getParamNotNull(NAME).trim());
String icon=(ud!=null ? ud.getIconUrl() : getParamNotNull(ICON).trim());
// 22-mai-06: Added password fields
String pass=(ud!=null ? edu.xtec.util.Encryption.Decrypt(ud.pwd) : getParam(PASS));
// ---
sb.append("<form class=\"inputForm\" method=\"post\" action=\"").append(getUrl(flag ? EDIT_UPDATE : CREATE_UPDATE)).append("\">\n");
sb.append("<p><strong>").append(getMsg("user_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(">\n");
sb.append("<p><strong>").append(getMsg("user_admin_name")).append("</strong> ");
sb.append("<input name=\"").append(NAME).append("\" value=\"").append(filter(name)).append("\" size=40></p>\n");
// 22-mai-06: Added password fields
sb.append("<p><strong>").append(getMsg("user_admin_pw_prompt")).append("</strong> ");
sb.append("<input name=\"").append(PASS).append("\" type=\"password\" value=\"").append(pass==null ? "" : filter(pass)).append("\" size=20><br>\n");
sb.append("<strong>").append(getMsg("user_admin_pw_prompt_confirm")).append("</strong> ");
sb.append("<input name=\"").append(PASSC).append("\" type=\"password\" value=\"").append(pass==null ? "" : filter(pass)).append("\" size=20></p>\n");
// ---
sb.append("<p><strong>").append(getMsg("user_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(flag ? getUrl(USER_MENU) : getGroupUrl(), getMsg("cancel"), null)).append("</p>\n");
sb.append("</form>\n");
sb.append("<br clear=\"all\">\n");
break;
case DELETE:
sb.append("<p><strong>").append(getMsg("user_admin_delete_user")).append(" \"").append(filter(ud.getText())).append("\"</strong></p>\n");
sb.append("<p>").append(getMsg("user_admin_delete_user_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> ");
sb.append(buttonTo(getUrl(USER_MENU), getMsg("NOT"), "width=50"));
sb.append("</p>\n");
sb.append("</form>\n");
break;
case CLEAR:
sb.append("<p><strong>").append(getMsg("user_admin_clear_user")).append(" \"").append(filter(ud.getText())).append("\"</strong></p>\n");
sb.append("<p>").append(getMsg("user_admin_clear_user_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(err ? "error" : "success")).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));
};
}