package org.nemesis.forum.webapp.admin.action;
import java.util.Iterator;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.nemesis.forum.Forum;
import org.nemesis.forum.ForumFactory;
import org.nemesis.forum.ProfileManager;
import org.nemesis.forum.User;
import org.nemesis.forum.config.Constants;
import org.nemesis.forum.exception.AlreadyExistsException;
import org.nemesis.forum.exception.UnauthorizedException;
import org.nemesis.forum.webapp.admin.bean.ForumBean;
/**
* @author dlaurent
*
* 20 f�vr. 2003
*/
public class AddForumAction extends BaseAction {
static protected Log log =LogFactory.getLog(AddForumAction.class);
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
//check logon
checkUser(request);
//check permission
checkPermission(request,OperationConstants.ADD_FORUM);
ActionErrors errors = new ActionErrors();
// user need cancel
if (isCancelled(request)) {
return (mapping.findForward("cancel"));
}
try {
ForumFactory forumFactory = ForumFactory.getInstance(getAuthToken(request));
ProfileManager manager = forumFactory.getProfileManager();
User user = manager.getUser(getAuthToken(request).getUserID());
try {
ForumBean fb=(ForumBean)PropertyUtils.getProperty(form, "forumBean");
ForumFactory ff =ForumFactory.getInstance(getAuthToken(request));
Forum f =ff.createForum(fb.getName(),fb.getDescription());
//ForumPermissions permissions = forumFactory.getPermissions(getAuthToken(request));
//boolean isSystemAdmin = permissions.get(ForumPermissions.SYSTEM_ADMIN);
//boolean isUserAdmin = permissions.get(ForumPermissions.FORUM_ADMIN);
//f.addUserPermission(user,Constants.FORUM_ADMIN);
f.addUserPermission(user,Constants.READ);
f.addUserPermission(user,Constants.MODERATOR);
f.addUserPermission(user,Constants.CREATE_THREAD);
f.addUserPermission(user,Constants.CREATE_MESSAGE);
f.addUserPermission(user,Constants.FORUM_ADMIN);
//if(SecurityTools.isSystemAdmin(getAuthToken(request)))
//f.addUserPermission(user,Constants.SYSTEM_ADMIN);
f.setModerationType(fb.getModerationType());
//properties
String temp=null;
for(Iterator it=fb.getProperties().keySet().iterator();it.hasNext();){
temp=(String)it.next();
f.setProperty(temp,(String)fb.getProperties().get(temp));
}
}
catch( AlreadyExistsException aee ) {
errors.add("general", new ActionError("addForum.alreadyExist"));
}
catch( UnauthorizedException aee ) {
aee.printStackTrace();
errors.add("general", new ActionError("addForum.unauthorized"));
saveErrors(request, errors);
return mapping.findForward("cancel");
}
} catch (Exception e) {
String eid=this.getClass().getName()+"_"+System.currentTimeMillis();
log.error("eid:"+eid+"\nsessionID" +request.getSession().getId(),e) ;
errors.add("general", new ActionError("error.general","erreur id:"+eid));
}
if (!errors.isEmpty()) {
saveErrors(request, errors);
return (mapping.getInputForward());
}
return mapping.findForward("success");
}
}