Exemple #1
0
        public object Get(CommunitySearchRequestTep request)
        {
            var context = TepWebContext.GetWebContext(PagePrivileges.EverybodyView);

            context.Open();
            context.LogInfo(this, string.Format("/community/search GET"));

            CommunityCollection domains = new CommunityCollection(context);

            domains.UserStatus = Request.QueryString != null ? Request.QueryString["status"] : null;
            domains.SetFilter("Kind", (int)DomainKind.Public + "," + (int)DomainKind.Private + "," + (int)DomainKind.Hidden);

            // Load the complete request
            HttpRequest      httpRequest  = HttpContext.Current.Request;
            OpenSearchEngine ose          = MasterCatalogue.OpenSearchEngine;
            Type             responseType = OpenSearchFactory.ResolveTypeFromRequest(httpRequest.QueryString, httpRequest.Headers, ose);

            // the opensearch cache system uses the query parameters
            // we add to the parameters the filters added to the load in order to avoir wrong cache
            // we use 't2-' in order to not interfer with possibly used query parameters
            var qs = new NameValueCollection(Request.QueryString);

            foreach (var filter in domains.FilterValues)
            {
                qs.Add("t2-" + filter.Key.FieldName, filter.Value.ToString());
            }

            IOpenSearchResultCollection osr = ose.Query(domains, httpRequest.QueryString, responseType);

            OpenSearchFactory.ReplaceOpenSearchDescriptionLinks(domains, osr);

            context.Close();
            return(new HttpResult(osr.SerializeToString(), osr.ContentType));
        }
Exemple #2
0
        public void SearchAllCommunities()
        {
            var ose        = MasterCatalogue.OpenSearchEngine;
            var parameters = new NameValueCollection();

            context.AccessLevel = EntityAccessLevel.Privilege;
            var usr1 = User.FromUsername(context, "testusr1");
            var usr2 = User.FromUsername(context, "testusr2");
            var usr3 = User.FromUsername(context, "testusr3");

            try {
                context.StartImpersonation(usr1.Id);

                var communities = new CommunityCollection(context);
                communities.Identifier       = "community";
                communities.OpenSearchEngine = ose;
                //communities.UserId = usr1.Id;
                var osr = ose.Query(communities, parameters);
                Assert.AreEqual(NBCOMMUNITY_PUBLIC, osr.TotalResults);

                parameters.Set("q", "public");
                osr = ose.Query(communities, parameters);
                Assert.AreEqual(NBCOMMUNITY_PUBLIC, osr.TotalResults);

                parameters.Set("q", "public*");
                osr = ose.Query(communities, parameters);
                Assert.AreEqual(NBCOMMUNITY_PUBLIC, osr.TotalResults);

                parameters.Set("q", "*");
                osr = ose.Query(communities, parameters);
                Assert.AreEqual(NBCOMMUNITY_PUBLIC, osr.TotalResults);

                parameters.Remove("q");
                parameters.Set("status", "joined");
                communities.UserStatus = ThematicCommunity.USERSTATUS_JOINED;
                osr = ose.Query(communities, parameters);
                Assert.AreEqual(0, osr.TotalResults);

                context.EndImpersonation();

                context.StartImpersonation(usr2.Id);
                communities.UserId = usr2.Id;
                osr = ose.Query(communities, parameters);
                Assert.AreEqual(4, osr.TotalResults);
                context.EndImpersonation();

                context.StartImpersonation(usr3.Id);
                ThematicCommunity community = ThematicCommunity.FromIdentifier(context, "community-public-1");
                community.TryJoinCurrentUser();
                var roles = Role.GetUserRolesForDomain(context, usr3.Id, community.Id);

                //user part of community
                Assert.AreEqual(1, roles.Length);
                Assert.AreEqual(RoleTep.MEMBER, roles[0].Name);

                communities.UserId = usr3.Id;
                osr = ose.Query(communities, parameters);
                Assert.AreEqual(1, osr.TotalResults);

                context.EndImpersonation();
                communities.UserId = usr3.Id;
                osr = ose.Query(communities, parameters);
                Assert.AreEqual(1, osr.TotalResults);
            } catch (Exception e) {
                context.EndImpersonation();
                Assert.Fail(e.Message);
            }
        }
Exemple #3
0
        public void JoinPrivateCommunity()
        {
            context.AccessLevel = EntityAccessLevel.Privilege;
            var usr1       = User.FromUsername(context, "testusr1");
            var usr2       = User.FromUsername(context, "testusr2");
            var ose        = MasterCatalogue.OpenSearchEngine;
            var parameters = new NameValueCollection();

            try {
                context.StartImpersonation(usr1.Id);

                ThematicCommunity community = ThematicCommunity.FromIdentifier(context, "community-private-1");
                Role role = Role.FromIdentifier(context, RoleTep.MEMBER);

                //check how many communities user can see
                var communities = new CommunityCollection(context);
                communities.Identifier       = "community";
                communities.OpenSearchEngine = ose;
                IOpenSearchResultCollection osr = ose.Query(communities, parameters);
                Assert.AreEqual(NBCOMMUNITY_PUBLIC, osr.TotalResults);

                context.EndImpersonation();
                context.StartImpersonation(usr2.Id);

                //add user in community
                community.SetUserAsTemporaryMember(usr1);
                Assert.True(community.IsUserPending(usr1.Id));

                context.EndImpersonation();
                context.StartImpersonation(usr1.Id);

                //check how many communities user can see
                communities                  = new CommunityCollection(context);
                communities.Identifier       = "community";
                communities.OpenSearchEngine = ose;
                osr = ose.Query(communities, parameters);
                Assert.AreEqual(NBCOMMUNITY_PUBLIC + 1, osr.TotalResults);

                //check visibility is private + pending
                var  items = osr.Items;
                bool isprivate = false, isVisibilityPending = false, ispublic = false;
                foreach (var item in items)
                {
                    if (item.Title.Text == "community-private-1")
                    {
                        foreach (var cat in item.Categories)
                        {
                            if (cat.Name == "visibility")
                            {
                                if (cat.Label == "hidden")
                                {
                                    isprivate = true;
                                }
                                else if (cat.Label == "public")
                                {
                                    ispublic = true;
                                }
                            }
                            else if (cat.Name == "status" && cat.Label == "pending")
                            {
                                isVisibilityPending = true;
                            }
                        }
                    }
                }
                Assert.True(isprivate);
                Assert.True(isVisibilityPending);
                Assert.False(ispublic);

                //usr1 validates
                community.TryJoinCurrentUser();
                Assert.True(community.IsUserPending(usr1.Id));

                //check how many communities user can see
                communities                  = new CommunityCollection(context);
                communities.Identifier       = "community";
                communities.OpenSearchEngine = ose;
                osr = ose.Query(communities, parameters);
                Assert.AreEqual(NBCOMMUNITY_PUBLIC + 1, osr.TotalResults);

                //remove from community
                community.RemoveUser(usr1);

                //check how many communities user can see
                communities                  = new CommunityCollection(context);
                communities.Identifier       = "community";
                communities.OpenSearchEngine = ose;
                osr = ose.Query(communities, parameters);
                Assert.AreEqual(NBCOMMUNITY_PUBLIC, osr.TotalResults);
            } catch (Exception e) {
                Assert.Fail(e.Message);
            } finally {
                context.EndImpersonation();
            }
        }