📄 userlistrequesthandler.java
字号:
package freecs.external;
import freecs.content.ContentContainer;
import freecs.core.Group;
import freecs.core.GroupManager;
import freecs.core.User;
import freecs.core.UserManager;
import freecs.interfaces.IUserStates;
import freecs.interfaces.IGroupState;
import freecs.interfaces.IRequest;
import freecs.util.HtmlEncoder;
public class UserlistRequestHandler extends AbstractRequestHandler {
public UserlistRequestHandler(String handlerName) {
super(handlerName);
}
/**
* class rendering who's online lists
*/
public void handle(IRequest req, ContentContainer c) throws AccessForbiddenException {
checkAccessIp(req, c);
StringBuffer sb = new StringBuffer();
String show = req.getValue("show");
String as = req.getValue("as");
boolean xml = ("xml".equalsIgnoreCase(as)) ? true : false;
if (xml) {
c.setContentType("text/xml");
sb.append (xmlHeader);
} else {
c.setContentType("text/plain");
}
if ("allusers".equalsIgnoreCase(show)) {
Group[] groups = GroupManager.mgr.currentGroupList();
for (int i=0; i<groups.length; i++) {
if (xml) {
renderGroupAsXml(sb, groups[i]);
renderGroupUsersAsXml(sb, groups[i]);
sb.append ("</room>\n");
} else {
renderGroupAsText(sb, groups[i]);
renderGroupUsersAsText(sb, groups[i]);
sb.append ("\n");
}
}
} else if ("allgroups".equalsIgnoreCase(show)) {
Group[] groups = GroupManager.mgr.currentGroupList();
for (int i=0; i<groups.length; i++) {
if (xml) {
renderGroupAsXml(sb, groups[i]);
sb.append ("</room>\n");
} else {
renderGroupAsText(sb, groups[i]);
sb.append("\n");
}
}
} else if (req.getValue("group") != null) {
Group g = GroupManager.mgr.getGroup(req.getValue("group"));
if (g != null && xml) {
renderGroupAsXml(sb, g);
renderGroupUsersAsXml(sb, g);
sb.append ("</room>");
} else if (g != null) {
renderGroupAsText(sb, g);
renderGroupUsersAsText(sb, g);
}
} else if (req.getValue("user") != null) {
User u = UserManager.mgr.getUserByName(req.getValue("user"));
if (u != null && xml) {
renderUserAsXml(sb, u);
} else if (u != null) {
renderUserAsText(sb, u);
}
} else {
int activeUsers = UserManager.mgr.getActiveUserCount();
int openGroups = GroupManager.mgr.openGroupsCount();
if (xml) {
sb.append ("<users>");
sb.append (activeUsers);
sb.append ("</users>\n");
sb.append ("<rooms>");
sb.append (openGroups);
sb.append ("</rooms>\n");
} else {
sb.append (activeUsers);
sb.append ("\n");
sb.append (openGroups);
sb.append ("\n");
}
}
if (xml) {
sb.append (xmlFooter);
}
c.wrap(sb.toString());
}
private void renderGroupAsText(StringBuffer sb, Group g) {
if (g.hasState(IGroupState.OPEN)) {
sb.append("open: ");
} else {
sb.append("closed: ");
}
sb.append (g.getRawName());
sb.append ("\n");
String theme = g.getTheme();
if (theme != null && !"".equals(theme.trim())) {
sb.append ("theme: " + theme);
sb.append ("\n");
}
}
private void renderGroupAsXml(StringBuffer sb, Group g) {
sb.append ("<room name=\"");
HtmlEncoder.encodeXml(g.getRawName(), sb);
sb.append ("\"");
sb.append (" theme=\"");
if (g.getTheme() != null) {
HtmlEncoder.encodeXml(g.getTheme(), sb);
}
sb.append ("\"");
sb.append(" open=\"");
sb.append (g.hasState(IGroupState.OPEN));
sb.append ("\">");
}
private void renderUserAsText(StringBuffer sb, User u) {
sb.append (u.getName());
if (u.hasRole(IUserStates.ROLE_VIP)) {
sb.append (" (vip) ");
} else if (u.hasRole(IUserStates.ROLE_GOD)) {
sb.append (" (admin) ");
} else if (u.getGroup().usrIsSu(u)) {
sb.append (" (su) ");
} else {
sb.append (" (user) ");
}
sb.append (u.getChattime());
sb.append (" ");
sb.append (u.getGroup().getRawName());
sb.append (" ");
if (u.isAway()) {
sb.append ("away(");
sb.append (u.getAwayMessage());
sb.append (")");
}
sb.append ("\n");
}
private void renderUserAsXml(StringBuffer sb, User u) {
sb.append ("<user name=\"");
HtmlEncoder.encodeXml(u.getName(), sb);
sb.append ("\" id=\"");
sb.append (u.getID());
sb.append ("\" roomname=\"");
HtmlEncoder.encodeXml(u.getGroup().getRawName(), sb);
sb.append ("\" lastActive=\"");
sb.append (u.lastActive());
sb.append ("\" away=\"");
sb.append (u.isAway());
if (u.isAway()) {
sb.append ("\" awaymessage=\"");
HtmlEncoder.encodeXml(u.getAwayMessage(), sb);
}
sb.append ("\" chattime=\"");
sb.append (u.getChattime());
sb.append ("\" punished=\"");
sb.append (u.isPunished());
if (u.hasRole(IUserStates.ROLE_VIP)) {
sb.append ("\" vip=\"true");
} else if (u.hasRole(IUserStates.ROLE_GOD)) {
sb.append ("\" admin=\"true");
} else if (u.getGroup().usrIsSu(u)) {
sb.append ("\" superuser=\"true");
}
if (u.getGroup() != null && u.getGroup().hasState(IGroupState.MODERATED)) {
if (u.hasRight(IUserStates.IS_GUEST)) {
sb.append ("\" guest=\"true");
}
if (u.hasRight(IUserStates.IS_MODERATOR)) {
sb.append ("\" moderator=\"true");
}
}
sb.append ("\" color=\"");
sb.append (u.getColCode());
sb.append ("\" />\n");
}
private void renderGroupUsersAsText(StringBuffer sb, Group g) {
User[] users = g.getUserArray();
for (int i=0; i<users.length; i++) {
renderUserAsText(sb, users[i]);
}
}
private void renderGroupUsersAsXml(StringBuffer sb, Group g) {
User[] users = g.getUserArray();
for (int i=0; i<users.length; i++) {
renderUserAsXml(sb, users[i]);
}
}
public static String xmlHeader = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n<lxml>\n";
public static String xmlFooter = "\n</lxml>\n\n";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -