<%-- - $Revision$ - $Date$ - - Copyright (C) 2005-2008 Jive Software. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. --%> <%@ page import="org.jivesoftware.openfire.PresenceManager, org.jivesoftware.openfire.group.Group, org.jivesoftware.openfire.group.GroupManager, org.jivesoftware.openfire.security.SecurityAuditManager, org.jivesoftware.openfire.user.User, org.jivesoftware.openfire.user.UserManager, org.jivesoftware.openfire.user.UserNotFoundException" %> <%@ page import="gnu.inet.encoding.Stringprep"%> <%@ page import="org.jivesoftware.util.LocaleUtils"%> <%@ page import="org.jivesoftware.util.Log"%> <%@ page import="org.jivesoftware.util.ParamUtils"%> <%@ page import="org.xmpp.packet.JID"%> <%@ page import="org.xmpp.packet.Presence"%> <%@ page import="java.io.UnsupportedEncodingException"%> <%@ page import="java.net.URLDecoder"%> <%@ page import="java.net.URLEncoder"%> <%@ page import="java.util.*" %> <%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%> <%@ taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt" %> <% webManager.init(pageContext); %> <% // Get parameters boolean add = request.getParameter("add") != null; boolean delete = request.getParameter("remove") != null; boolean updateMember = request.getParameter("updateMember") != null; boolean update = request.getParameter("save") != null; boolean cancel = request.getParameter("cancel") != null; String username = ParamUtils.getParameter(request, "username"); String [] adminIDs = ParamUtils.getParameters(request, "admin"); String [] deleteMembers = ParamUtils.getParameters(request, "delete"); String groupName = ParamUtils.getParameter(request, "group"); GroupManager groupManager = webManager.getGroupManager(); boolean groupInfoChanged = ParamUtils.getBooleanParameter(request, "groupChanged", false); Map errors = new HashMap(); // Get the presence manager PresenceManager presenceManager = webManager.getPresenceManager(); UserManager userManager = webManager.getUserManager(); boolean enableRosterGroups = ParamUtils.getBooleanParameter(request,"enableRosterGroups"); boolean shareAdditional = ParamUtils.getParameter(request, "shareContactList") != null; String groupDisplayName = ParamUtils.getParameter(request,"groupDisplayName"); String showGroup = ParamUtils.getParameter(request,"showGroup"); String[] groupNames = ParamUtils.getParameters(request, "groupNames"); Group group = groupManager.getGroup(groupName); boolean success; StringBuffer errorBuf = new StringBuffer(); if (cancel) { response.sendRedirect("group-summary.jsp"); return; } if (update) { if (enableRosterGroups && (groupDisplayName == null || groupDisplayName.trim().length() == 0)) { errors.put("groupDisplayName", ""); } if (errors.isEmpty()) { if (enableRosterGroups) { if (showGroup == null || !shareAdditional) { showGroup = "onlyGroup"; } if ("spefgroups".equals(showGroup)) { showGroup = "onlyGroup"; } else { groupNames = new String[] {}; } group.getProperties().put("sharedRoster.showInRoster", showGroup); if (groupDisplayName != null) { group.getProperties().put("sharedRoster.displayName", groupDisplayName); } group.getProperties().put("sharedRoster.groupList", toList(groupNames, "UTF-8")); if (!SecurityAuditManager.getSecurityAuditProvider().blockGroupEvents()) { // Log the event webManager.logEvent("enabled roster groups for "+groupName, "showinroster = "+showGroup+"\ndisplayname = "+groupDisplayName+"\ngrouplist = "+toList(groupNames, "UTF-8")); } } else { group.getProperties().put("sharedRoster.showInRoster", "nobody"); group.getProperties().put("sharedRoster.displayName", ""); group.getProperties().put("sharedRoster.groupList", ""); if (!SecurityAuditManager.getSecurityAuditProvider().blockGroupEvents()) { // Log the event webManager.logEvent("disabled roster groups for "+groupName, null); } } // Get admin list and compare it the admin posted list. response.sendRedirect("group-edit.jsp?group=" + URLEncoder.encode(groupName, "UTF-8") + "&groupChanged=true"); return; } else { // Continue editing since there are some errors updateMember = false; } } if (updateMember) { Set adminIDSet = new HashSet(); for (String adminID : adminIDs) { JID newAdmin = new JID(adminID); adminIDSet.add(newAdmin); boolean isAlreadyAdmin = group.getAdmins().contains(newAdmin); if (!isAlreadyAdmin) { // Add new admin group.getAdmins().add(newAdmin); } } Collection admins = Collections.unmodifiableCollection(group.getAdmins()); Set removeList = new HashSet(); for (JID admin : admins) { if (!adminIDSet.contains(admin)) { removeList.add(admin); } } for (JID member : removeList) { group.getMembers().add(member); } if (!SecurityAuditManager.getSecurityAuditProvider().blockGroupEvents()) { // Log the event // TODO: Should log more here later webManager.logEvent("updated group membership for "+groupName, null); } // Get admin list and compare it the admin posted list. response.sendRedirect("group-edit.jsp?group=" + URLEncoder.encode(groupName, "UTF-8") + "&updatesuccess=true"); return; } else if (add && username != null) { int count = 0; username = username.trim(); username = username.toLowerCase(); if (username.indexOf('@') != -1) { try { UserManager.getInstance().getUser(JID.escapeNode(username)); // That means that this user has an email address as their node. username = JID.escapeNode(username); } catch (UserNotFoundException e) { } } // Add to group as member by default. try { boolean added; if (username.indexOf('@') == -1) { // No @ was found so assume this is a JID of a local user username = JID.escapeNode(username); username = Stringprep.nodeprep(username); UserManager.getInstance().getUser(username); added = group.getMembers().add(webManager.getXMPPServer().createJID(username, null)); } else { // Admin entered a JID. Add the JID directly to the list of group members added = group.getMembers().add(new JID(username)); if (!SecurityAuditManager.getSecurityAuditProvider().blockGroupEvents()) { // Log the event webManager.logEvent("added group member to "+groupName, "username = "+username); } } if (added) { count++; } else { errorBuf.append("
").append( LocaleUtils.getLocalizedString("group.edit.already_user", Arrays.asList(username))); } } catch (Exception e) { Log.warn("Problem adding new user to existing group", e); errorBuf.append("
").append( LocaleUtils.getLocalizedString("group.edit.inexistent_user", Arrays.asList(username))); } if (count > 0) { response.sendRedirect("group-edit.jsp?group=" + URLEncoder.encode(groupName, "UTF-8") + "&success=true"); return; } else { success = false; add = true; } } else if(add && username == null){ add = false; } else if (delete) { for (String deleteMember : deleteMembers) { JID member = new JID(deleteMember); group.getMembers().remove(member); group.getAdmins().remove(member); } response.sendRedirect("group-edit.jsp?group=" + URLEncoder.encode(groupName, "UTF-8") + "&deletesuccess=true"); return; } success = groupInfoChanged || "true".equals(request.getParameter("success")) || "true".equals(request.getParameter("deletesuccess")) || "true".equals(request.getParameter("updatesuccess")) || "true".equals(request.getParameter("creategroupsuccess")); if (errors.size() == 0) { showGroup = group.getProperties().get("sharedRoster.showInRoster"); enableRosterGroups = !"nobody".equals(showGroup); shareAdditional = "everybody".equals(showGroup); if ("onlyGroup".equals(showGroup)) { String glist = group.getProperties().get("sharedRoster.groupList"); List l = new ArrayList(); if (glist != null) { StringTokenizer tokenizer = new StringTokenizer(glist,",\t\n\r\f"); while (tokenizer.hasMoreTokens()) { String tok = tokenizer.nextToken().trim(); l.add(tok.trim()); } if (!l.isEmpty()) { shareAdditional = true; } } groupNames = l.toArray(new String[]{}); } groupDisplayName = group.getProperties().get("sharedRoster.displayName"); } %> <fmt:message key="group.edit.title"/> "/> <% if (webManager.getGroupManager().isReadOnly() && webManager.getGroupManager().isPropertyReadOnly()) { %>
<% } %>

« Back to all groups

<% if (success) { %>
<% if (groupInfoChanged) { %> <% } else if ("true".equals(request.getParameter("success"))) { %> <% } else if ("true".equals(request.getParameter("deletesuccess"))) { %> <% } else if ("true".equals(request.getParameter("updatesuccess"))) { %> <% } else if ("true".equals(request.getParameter("creategroupsuccess"))) { %> <% } %>

<% } else if(!success && add){ %>
<% if(add) { %> <%= errorBuf %> <% } %>

<% } %>
<% // Only show edit and delete options if the groups aren't read-only. if (!webManager.getGroupManager().isReadOnly()) { %> <% } %>

<%= group.getName() %>

<%= group.getDescription() != null ? group.getDescription() : "" %>

<% if (webManager.getGroupManager().isPropertyReadOnly()) { %>

<% if (enableRosterGroups) { %> <% } else { %> <% } %>

<% } else { %>

onClick="document.getElementById('jive-roster').style.display = 'none';">
onClick="document.getElementById('jive-roster').style.display = 'block';">
;"> ">
<% if (errors.get("groupDisplayName") != null) { %>
<% } %> >
;">
>
0) ? "checked" : "" %>>
 
  ">
<% } %>
<% // Only show if the group isn't read-only. if (!webManager.getGroupManager().isReadOnly()) { %>

 ">
<% } %>
<% // Only show if the group isn't read-only. if (!webManager.getGroupManager().isReadOnly()) { %> <% } %> <% int memberCount = group.getMembers().size() + group.getAdmins().size(); boolean showUpdateButtons = memberCount > 0; boolean showRemoteJIDsWarning = false; if (memberCount == 0) { %> <% } else { // Sort the list of members. ArrayList allMembers = new ArrayList(memberCount); allMembers.addAll(group.getMembers()); Collection admins = group.getAdmins(); allMembers.addAll(admins); Collections.sort(allMembers); for (JID jid:allMembers) { boolean isLocal = webManager.getXMPPServer().isLocal(jid); User user = null; if (isLocal) { try { user = userManager.getUser(jid.getNode()); } catch (UserNotFoundException unfe) { // Ignore. } } %> <% if (user != null) { %> <% } else { %> <% } %> <% // Only show if the group isn't read-only. if (!webManager.getGroupManager().isReadOnly()) { %> <% } %> <% } } if (showUpdateButtons && !webManager.getGroupManager().isReadOnly()) { %> <% } if (showRemoteJIDsWarning) { %> <% } %>
 



<% if (user != null && presenceManager.isAvailable(user)) { Presence presence = presenceManager.getPresence(user); %> <% if (presence.getShow() == null) { %> " alt=""> <% } %> <% if (presence.getShow() == Presence.Show.chat) { %> " alt=""> <% } %> <% if (presence.getShow() == Presence.Show.away) { %> " alt=""> <% } %> <% if (presence.getShow() == Presence.Show.xa) { %> " alt=""> <% } %> <% if (presence.getShow() == Presence.Show.dnd) { %> " alt=""> <% } %> <% } else { %> " alt=""> <% } %> "><%= JID.unescapeNode(user.getUsername()) %><% if (!isLocal) { showRemoteJIDsWarning = true; %> *<%}%><%= jid %><% showRemoteJIDsWarning = true; %> * checked<% } %>>
 
*
<%! private static String toList(String[] array, String enc) { if (array == null || array.length == 0) { return ""; } StringBuffer buf = new StringBuffer(); String sep = ""; for (String anArray : array) { String item; try { item = URLDecoder.decode(anArray, enc); } catch (UnsupportedEncodingException e) { item = anArray; } buf.append(sep).append(item); sep = ","; } return buf.toString(); } private static boolean contains(String[] array, String item) { if (array == null || array.length == 0 || item == null) { return false; } for (String anArray : array) { if (item.equals(anArray)) { return true; } } return false; } %>