package org.nemesis.forum.webapp.admin.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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.apache.struts.action.ActionMessage;
import org.apache.struts.util.MessageResources;
import org.nemesis.forum.Forum;
import org.nemesis.forum.ForumFactory;
import org.nemesis.forum.Group;
import org.nemesis.forum.ProfileManager;
import org.nemesis.forum.User;
import org.nemesis.forum.config.Constants;
import org.nemesis.forum.exception.NotFoundException;
import org.nemesis.forum.util.SecurityTools;
import org.nemesis.forum.webapp.admin.bean.ForumPermissionsBean;
import org.nemesis.forum.webapp.admin.bean.GroupBean;
import org.nemesis.forum.webapp.admin.bean.UserBean;
import org.nemesis.forum.webapp.exception.UnauthorizedException;
public class ListForumPermissionsAction extends BaseAction {
static protected Log log = LogFactory.getLog(ListForumPermissionsAction.class);
static private final int[] perms = { Constants.READ, Constants.CREATE_THREAD, Constants.CREATE_MESSAGE, Constants.MODERATOR };
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
//check logon
checkUser(request);
MessageResources messages=getResources(request);
ActionErrors errors = new ActionErrors();
try {
ForumFactory forumFactory = ForumFactory.getInstance(getAuthToken(request));
ProfileManager manager = forumFactory.getProfileManager();
Forum forum = forumFactory.getForum(Integer.parseInt(request.getParameter("id")));
//check permission
checkPermission(request, OperationConstants.LIST_FORUM_PERMISSION, forum);
ForumPermissionsBean fb = new ForumPermissionsBean();
fb.setId(forum.getID());
fb.setName(forum.getName());
fb.setDescription(forum.getDescription());
int[] ids;
UserBean ub = null;
GroupBean gb = null;
User user = null;
Group group = null;
ids = forum.usersWithPermission(Constants.READ);
for (int i = 0; i < ids.length; i++) {
ub = new UserBean();
user = manager.getUser(ids[i]);
ub.setId(user.getID());
if( user.getID() == -1 )ub.setUserName(messages.getMessage(getLocale(request),"user.anonymous"));
else if( user.getID() == 0 )ub.setUserName(messages.getMessage(getLocale(request),"user.registered"));
else
ub.setUserName(user.getUsername());
fb.addUsersWithReadPerm(ub);
}
ids = forum.usersWithPermission(Constants.CREATE_THREAD);
for (int i = 0; i < ids.length; i++) {
ub = new UserBean();
user = manager.getUser(ids[i]);
ub.setId(user.getID());
if( user.getID() == -1 )ub.setUserName(messages.getMessage(getLocale(request),"user.anonymous"));
else if( user.getID() == 0 )ub.setUserName(messages.getMessage(getLocale(request),"user.registered"));
else
ub.setUserName(user.getUsername());
fb.addUsersWithThreadPerm(ub);
}
ids = forum.usersWithPermission(Constants.CREATE_MESSAGE);
for (int i = 0; i < ids.length; i++) {
ub = new UserBean();
user = manager.getUser(ids[i]);
ub.setId(user.getID());
if( user.getID() == -1 )ub.setUserName(messages.getMessage(getLocale(request),"user.anonymous"));
else if( user.getID() == 0 )ub.setUserName(messages.getMessage(getLocale(request),"user.registered"));
else
ub.setUserName(user.getUsername());
fb.addUsersWithMessagePerm(ub);
}
ids = forum.usersWithPermission(Constants.MODERATOR);
for (int i = 0; i < ids.length; i++) {
ub = new UserBean();
user = manager.getUser(ids[i]);
ub.setId(user.getID());
if( user.getID() == -1 )ub.setUserName(messages.getMessage(getLocale(request),"user.anonymous"));
else if( user.getID() == 0 )ub.setUserName(messages.getMessage(getLocale(request),"user.registered"));
else
ub.setUserName(user.getUsername());
fb.addUsersWithModeratorPerm(ub);
}
ids = forum.usersWithPermission(Constants.FORUM_ADMIN);
for (int i = 0; i < ids.length; i++) {
ub = new UserBean();
user = manager.getUser(ids[i]);
ub.setId(user.getID());
if( user.getID() == -1 )ub.setUserName(messages.getMessage(getLocale(request),"user.anonymous"));
else if( user.getID() == 0 )ub.setUserName(messages.getMessage(getLocale(request),"user.registered"));
else
ub.setUserName(user.getUsername());
fb.addUsersWithAdminPerm(ub);
}
ids = forum.groupsWithPermission(Constants.READ);
for (int i = 0; i < ids.length; i++) {
gb = new GroupBean();
group = manager.getGroup(ids[i]);
gb.setId(group.getID());
gb.setName(group.getName());
fb.addGroupsWithReadPerm(gb);
}
ids = forum.groupsWithPermission(Constants.CREATE_THREAD);
for (int i = 0; i < ids.length; i++) {
gb = new GroupBean();
group = manager.getGroup(ids[i]);
gb.setId(group.getID());
gb.setName(group.getName());
fb.addGroupsWithThreadPerm(gb);
}
ids = forum.groupsWithPermission(Constants.CREATE_MESSAGE);
for (int i = 0; i < ids.length; i++) {
gb = new GroupBean();
group = manager.getGroup(ids[i]);
gb.setId(group.getID());
gb.setName(group.getName());
fb.addGroupsWithMessagePerm(gb);
}
ids = forum.groupsWithPermission(Constants.MODERATOR);
for (int i = 0; i < ids.length; i++) {
gb = new GroupBean();
group = manager.getGroup(ids[i]);
gb.setId(group.getID());
gb.setName(group.getName());
fb.addGroupsWithModeratorPerm(gb);
}
ids = forum.groupsWithPermission(Constants.FORUM_ADMIN);
for (int i = 0; i < ids.length; i++) {
gb = new GroupBean();
group = manager.getGroup(ids[i]);
gb.setId(group.getID());
gb.setName(group.getName());
fb.addGroupsWithAdminPerm(gb);
}
request.setAttribute("fb",fb);
request.setAttribute("isSystemAdmin",new Boolean(SecurityTools.isSystemAdmin(getAuthToken(request))));
} catch (NotFoundException fnfe) {
log.error("",fnfe);
} catch (UnauthorizedException ue) {
errors.add("general", new ActionError("listForumPermissions.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 ActionMessage("error.general", "error id:" + eid));
}
if (!errors.isEmpty()) {
saveErrors(request, errors);
}
return mapping.findForward("view");
}
}