`

openfire修改程序,使得在同一个分组里的用户,自动和该组admin互为好友

 
阅读更多

openfire修改程序,使得在同一个分组里的用户,自动和该组admin互为好友,另外当把用户从组里删除时,自动删除和admin之间的好友列表

在group-edit.jsp中,修改程序,标记为黑体为新添加的,

注意在create和update之间需要sleep一段实践,不然可能会造成客户端(spark)处理会有问题,因为spark是并发处理消息的,

<%  // 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<String,String> errors = new HashMap<String,String>();


    // 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<JID> adminIDSet = new HashSet<JID>();
        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<JID> members = group.getMembers();
                for(JID member:members){
                Roster roster = webManager.getRosterManager().getRoster(member.getNode());
                List<String> groups = new ArrayList<String>();
                groups.add("\u6211\u7684\u597d\u53cb");
                String nickName = UserManager.getInstance().getUser(newAdmin.getNode()).getName();
                    roster.createRosterItem(newAdmin, nickName, groups, true, true);
                    
                    Roster roster1 = webManager.getRosterManager().getRoster(newAdmin.getNode());
                    String nickName1 = UserManager.getInstance().getUser(member.getNode()).getName();
                    roster1.createRosterItem(member, nickName1, groups, true, true);
                    
                    try{
                    Thread.sleep(1000);
                    }catch(Exception e){
                    
                    }
                    RosterItem item = roster.getRosterItem(newAdmin);
                    item.setNickname(nickName);
                    item.setSubStatus(RosterItem.SUB_BOTH);
                    roster.updateRosterItem(item);
                    
                    RosterItem item1 = roster1.getRosterItem(member);
                    item1.setNickname(nickName1);
                    item1.setSubStatus(RosterItem.SUB_BOTH);
                    roster1.updateRosterItem(item1);
                }
            }
        }
        Collection<JID> admins = Collections.unmodifiableCollection(group.getAdmins());
        Set<JID> removeList = new HashSet<JID>();
        for (JID admin : admins) {
            if (!adminIDSet.contains(admin)) {
                removeList.add(admin);
            }
        }
        Collection<JID> members = group.getMembers();//JUSTIN added
        for (JID member : removeList) {
            group.getMembers().add(member);                  
            for(JID jid:members){
            Roster roster = webManager.getRosterManager().getRoster(jid.getNode());
                roster.deleteRosterItem(member,false);                
                
                Roster roster1 = webManager.getRosterManager().getRoster(member.getNode());
                roster1.deleteRosterItem(jid,false);                 
            }
        }
        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);
                User user = UserManager.getInstance().getUser(username);
                JID newUser = webManager.getXMPPServer().createJID(username, null);
                added = group.getMembers().add(newUser);                
                Collection<JID> admins = group.getAdmins();
                for(JID admin:admins){
                Roster roster = webManager.getRosterManager().getRoster(admin.getNode());
                List<String> groups = new ArrayList<String>();
                groups.add("\u6211\u7684\u597d\u53cb");
                    roster.createRosterItem(newUser, user.getName(), groups, true, true);
                    
                    Roster roster1 = webManager.getRosterManager().getRoster(newUser.getNode());
                    String nickName1 = UserManager.getInstance().getUser(admin.getNode()).getName();
                    roster1.createRosterItem(admin, nickName1, groups, true, true);
                    
                    try{
                    Thread.sleep(1000);
                    }catch(Exception e){
                    
                    }
                    
                    RosterItem item = roster.getRosterItem(newUser);
                    item.setNickname(user.getName());
                    item.setSubStatus(RosterItem.SUB_BOTH);
                    roster.updateRosterItem(item);
                    
                    RosterItem item1 = roster1.getRosterItem(admin);
                    item1.setNickname(nickName1);
                    item1.setSubStatus(RosterItem.SUB_BOTH);
                    roster1.updateRosterItem(item1);
                }
            }
            else {
                // Admin entered a JID. Add the JID directly to the list of group members
                JID newUser = new JID(username);
                added = group.getMembers().add(newUser);               
                Collection<JID> admins = group.getAdmins();
                for(JID admin:admins){
                Roster roster = webManager.getRosterManager().getRoster(admin.getNode());
                List<String> groups = new ArrayList<String>();
                groups.add("\u6211\u7684\u597d\u53cb");
                String nickName = UserManager.getInstance().getUser(username).getName();
                    roster.createRosterItem(newUser, nickName, groups, true, true);
                    
                    Roster roster1 = webManager.getRosterManager().getRoster(newUser.getNode());
                    String nickName1 = UserManager.getInstance().getUser(admin.getNode()).getName();
                    roster1.createRosterItem(admin, nickName1, groups, true, true);
                    
                    try{
                    Thread.sleep(1000);
                    }catch(Exception e){
                    
                    }
                    
                    RosterItem item = roster.getRosterItem(newUser);
                    item.setNickname(nickName);
                    item.setSubStatus(RosterItem.SUB_BOTH);
                    roster.updateRosterItem(item);
                    
                    RosterItem item1 = roster1.getRosterItem(admin);
                    item1.setNickname(nickName1);
                    item1.setSubStatus(RosterItem.SUB_BOTH);
                    roster1.updateRosterItem(item1);
                }
                if (!SecurityAuditManager.getSecurityAuditProvider().blockGroupEvents()) {
                    // Log the event
                    webManager.logEvent("added group member to "+groupName, "username = "+username);
                }
            }


            if (added) {
                count++;
            }
            else {
                errorBuf.append("<br>").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("<br>").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);           
            if(group.getAdmins().contains(member)){
            for(JID jid:group.getMembers()){
                Roster roster = webManager.getRosterManager().getRoster(jid.getNode());
                    roster.deleteRosterItem(member,false);                
                    
                    Roster roster1 = webManager.getRosterManager().getRoster(member.getNode());
                    roster1.deleteRosterItem(jid,false);                 
                }
            }else{
            for(JID jid:group.getAdmins()){
                Roster roster = webManager.getRosterManager().getRoster(jid.getNode());
                    roster.deleteRosterItem(member,false);                
                    
                    Roster roster1 = webManager.getRosterManager().getRoster(member.getNode());
                    roster1.deleteRosterItem(jid,false);                 
                }
            }
            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<String> l = new ArrayList<String>();
            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"); 
    }
%>

 

分享到:
评论

相关推荐

    android Openfire的测试客户端程序

    android Openfire的测试客户端程序,只是个测试程序

    openfire好友关系解析

    openfire好友关系解析,包括数据包及数据库状态。

    [经典]Openfire整合现有用户

    [经典] Openfire SPARK 整合 扩展用户 用户组

    openfire 集成用户数据库

    实现openfire与用户数据库集成 实现用户认证、用户查询

    Xmpp和OpenFire实例

    先说一下为什么要写这篇博客,是因为本人在周末在研究XMPP和OpenFire,从网上下载了个Demo,但跑不起来,花了很长时间,经改造后,跑起来了,写个篇博文也是希望后边学习XMPP和OpenFire的同学下载后直接运行,少走...

    openfire获取所有在线用户插件

    自己写的获取所有在线用户的openfire插件,直接上传到openfire服务器即可使用,访问路径为host:port/plugins/onlines/listall

    推送openfire离线好友请求

    openfire添加好友离线请求推送

    openfire添加好友

    openfire添加好友流程梳理:unavailable, 下线;subscribe, 订阅;subscribed, 同意订阅;unsubscribe, 取消订阅;unsubscribed, 拒绝订阅;probe,探测;error;错误

    Openfire_spark_安装手册

    即时通信客户端可使用spark2.5.8,这个版本是目前最新的release版本,经过测试发现上一版本在视频支持,msn网关支持上可能有问题,所以选择openfire3.6.4+spark2.5.8是最合适的选择。 Smack是即时通信客户端编程库,...

    OpenFire所有在线用户

    代码里做了逻辑处理,会随机只返回3个,改下就可以了 访问路径 127.0.0.1:8080/plugins/onlineuser/getallusers

    openfire在线用户插件

    对Openfire进行扩展,支持在线指定聊天室和全部在线人员的查看。

    openfire介绍

    Openfire 是基于XMPP 协议的IM 的服务器端的一个实现,虽然当两个用户连接后,可以通过点对点的方式来发送消息,但是用户还是需要连接到服务器来获取一些连接信息和通信信息的,所以服务器端是必须要实现的。...

    Openfire3.7.1集群配置

    Openfire3.7.1集群配置,针对需要多用户同时在线的openfire架构集群配置设置

    openfire管理平台问号解决

    openfire管理平台,有许多问号,很多...这里本本人写了一个小程序读取了两个properties文件,对比差异,然后补齐了上传的属性,管理控制台就能正常显示了,特此分享给大家!(注意openfire中国际化中文文件有好几个,都替换吧)

    strophe.js在openfire注册用户插件(带内注册)

    strophe注册插件,xmpp ,openfire服务器,带内注册

    基于openfire服务器的的IM系统源程序

    基于openfire服务器的的IM系统源程序,用基于QT的QXMPP协议库封装的

    Openfire strophejs 跨域访问

    解决Openfire strophejs网站 跨域访问问题,文件中有flXHR.js、strophe.flxhr.js跨域脚本,有个具体实例basic.html供参考

    openfire插件,用户入群加web接口

    openfire插件,用户入群加web接口,史上最全,下载即用

    使用openfire登录android

    使用openfire和mysql,在android端建立连接,登录功能的实现,至于注册用户,是在openfire里实现的

Global site tag (gtag.js) - Google Analytics