// user has no permission
 public override bool HasViewPermission(SearchResult searchResult)
 {
     // This logic tests that based on ID we give permission to test recursive
     // search in SearchControllerImpl.GetSecurityTrimmedResults() method.
     //The logic here is all documents with AuthorUserId's 6-9, 16-19, 26-29, etc. have
     // permission, while the rest don't
     return (searchResult.AuthorUserId % 10) > 5;
 }
            private static string GetFriendlyTitle(DotNetNukeSearch.SearchResult result)
            {
                if (result.Keywords.ContainsKey("title") && !string.IsNullOrEmpty(result.Keywords["title"]))
                {
                    return(result.Keywords["title"]);
                }

                return(result.Title);
            }
        public override string GetDocUrl(SearchResult searchResult)
        {
            var url = Localization.Localization.GetString("SEARCH_NoLink");

            var tab = TabController.Instance.GetTab(searchResult.TabId, searchResult.PortalId, false);
            if (TabPermissionController.CanViewPage(tab))
            {
                url = TestableGlobals.Instance.NavigateURL(searchResult.TabId, string.Empty, searchResult.QueryString);
            }
            
            return url;
        }
        public override bool HasViewPermission(SearchResult searchResult)
        {
            var viewable = true;

            if (searchResult.TabId > 0)
            {
                var tab = TabController.Instance.GetTab(searchResult.TabId, searchResult.PortalId, false);
                viewable = tab != null && !tab.IsDeleted && TabPermissionController.CanViewPage(tab);
            }

            return viewable;
        }
        public override bool HasViewPermission(SearchResult searchResult)
        {
            var viewable = false;
            if (searchResult.ModuleId > 0)
            {
                //Get All related tabIds from moduleId (while minimizing DB access; using caching)
                var moduleId = searchResult.ModuleId;
                // The next call has over 30% performance enhancement over the above one
                var tabModules = TabController.Instance.GetTabsByPortal(searchResult.PortalId).Values
                    .SelectMany(tabinfo => tabinfo.ChildModules.Where(kv => kv.Key == moduleId)).Select(m => m.Value);

                foreach (ModuleInfo module in tabModules)
                {
                    var tab = TabController.Instance.GetTab(module.TabID, searchResult.PortalId, false);
                    if (!module.IsDeleted && !tab.IsDeleted && TabPermissionController.CanViewPage(tab))
                    {
                        //Check If authorised to View Module
                        if (ModulePermissionController.CanViewModule(module) && HasModuleSearchPermission(module, searchResult))
                        {
                            //Verify against search document permissions
                            if (string.IsNullOrEmpty(searchResult.Permissions) || PortalSecurity.IsInRoles(searchResult.Permissions))
                            {
                                viewable = true;
                                if (string.IsNullOrEmpty(searchResult.Url))
                                {
                                    searchResult.Url = GetModuleSearchUrl(module, searchResult);
                                    if (string.IsNullOrEmpty(searchResult.Url))
                                    {
                                        searchResult.Url = TestableGlobals.Instance.NavigateURL(module.TabID, string.Empty,
                                                                               searchResult.QueryString);
                                    }
                                }
                                break;
                            }
                        }
                    }
                }
            }
            else
            {
                viewable = true;
            }

            return viewable;
        }
        public override bool HasViewPermission(SearchResult searchResult)
        {
            var userId = GetUserId(searchResult);
            if (userId == Null.NullInteger)
            {
                return false;
            }

            var userInSearchResult = UserController.GetUserById(PortalSettings.PortalId, userId);
            if (userInSearchResult == null || userInSearchResult.IsDeleted)
            {
                return false;
            }

            if (searchResult.UniqueKey.Contains("adminonly"))
            {
                var currentUser = UserController.Instance.GetCurrentUserInfo();
                return currentUser.IsSuperUser 
                        || currentUser.IsInRole("Administrators")
                        || currentUser.UserID == userId;
            }
            
            if (searchResult.UniqueKey.Contains("friendsandgroups"))
            {
                var extendedVisibility = searchResult.UniqueKey.IndexOf("_") != searchResult.UniqueKey.LastIndexOf("_")
                                             ? searchResult.UniqueKey.Split('_')[2]
                                             : string.Empty;
                return HasSocialReplationship(userInSearchResult, UserController.Instance.GetCurrentUserInfo(), extendedVisibility);
            }

            if (searchResult.UniqueKey.Contains("membersonly"))
            {
                return UserController.Instance.GetCurrentUserInfo().UserID != Null.NullInteger;
            }

            if (searchResult.UniqueKey.Contains("allusers"))
            {
                return true;
            }

            return false;
        }
        public override bool HasViewPermission(SearchResult searchResult)
        {
            var tabController = new TabController();
            var viewable = false;

            if (searchResult.TabId > 0)
            {
                var tab = tabController.GetTab(searchResult.TabId, searchResult.PortalId, false);
                if (!tab.IsDeleted && TabPermissionController.CanViewPage(tab))
                {
                    viewable = true;
                }                    
            }
            else
            {
                viewable = true;
            }

            return viewable;
        }
        private int GetUserId(SearchResult searchResult)
        {
            var match = Regex.Match(searchResult.UniqueKey, "^(\\d+)_");
            if (!match.Success)
            {
                return Null.NullInteger;
            }

            return Convert.ToInt32(match.Groups[1].Value);
        }
        private static SearchResult GetPartialSearchResult(Document doc)
        {
            var result = new SearchResult();
            var localeField = doc.GetField(Constants.LocaleTag);

            if (localeField != null)
            {
                int id;
                result.CultureCode = int.TryParse(localeField.StringValue, out id) && id >= 0
                    ? LocaleController.Instance.GetLocale(id).Code : Null.NullString;
            }

            FillTagsValues(doc, result);
            return result;
        }
 private static void FillTagsValues(Document doc, SearchResult result)
 {
     foreach (var field in doc.GetFields())
     {
         if (field.StringValue == null) continue;
         int intField;
         switch (field.Name)
         {
             case Constants.UniqueKeyTag:
                 result.UniqueKey = field.StringValue;
                 break;
             case Constants.TitleTag:
                 var title = field.StringValue;
                 //TODO - Need better highlighting logic for Title
                 //result.Title = string.IsNullOrEmpty(titleSnippet) ? title : string.Format("...{0}...", titleSnippet);
                 result.Title = title;
                 break;
             case Constants.BodyTag:
                 result.Body = field.StringValue;
                 break;
             case Constants.DescriptionTag:
                 result.Description = field.StringValue;
                 break;
             case Constants.Tag:
                 result.Tags = result.Tags.Concat(new string[] { field.StringValue });
                 break;
             case Constants.PermissionsTag:
                 result.Permissions = field.StringValue;
                 break;
             case Constants.QueryStringTag:
                 result.QueryString = field.StringValue;
                 break;
             case Constants.UrlTag:
                 result.Url = field.StringValue;
                 break;
             case Constants.SearchTypeTag:
                 if(int.TryParse(field.StringValue, out intField)) result.SearchTypeId = intField;
                 break;
             case Constants.ModuleIdTag:
                 if (int.TryParse(field.StringValue, out intField)) result.ModuleId = intField;
                 break;
             case Constants.ModuleDefIdTag:
                 if (int.TryParse(field.StringValue, out intField)) result.ModuleDefId = intField;
                 break;
             case Constants.PortalIdTag:
                 if (int.TryParse(field.StringValue, out intField)) result.PortalId = intField;
                 break;
             case Constants.AuthorIdTag:
                 if (int.TryParse(field.StringValue, out intField)) result.AuthorUserId = intField;
                 break;
             case Constants.RoleIdTag:
                 if (int.TryParse(field.StringValue, out intField)) result.RoleId = intField;
                 break;
             case Constants.AuthorNameTag:
                 result.AuthorName = field.StringValue;
                 break;
             case Constants.TabIdTag:
                 if (int.TryParse(field.StringValue, out intField)) result.TabId = intField;
                 break;
             case Constants.ModifiedTimeTag:
                 DateTime modifiedTimeUtc;
                 DateTime.TryParseExact(field.StringValue, Constants.DateTimeFormat, null, DateTimeStyles.None, out modifiedTimeUtc);
                 result.ModifiedTimeUtc = modifiedTimeUtc;
                 break;
             default:
                 if (field.Name.StartsWith(Constants.NumericKeyPrefixTag))
                 {
                     var key = field.Name.Substring(Constants.NumericKeyPrefixTag.Length);
                     if (int.TryParse(field.StringValue, out intField))
                     {
                         if (!result.NumericKeys.ContainsKey(key))
                             result.NumericKeys.Add(key, intField);
                     }
                 }
                 else if (field.Name.StartsWith(Constants.KeywordsPrefixTag))
                 {
                     var key = field.Name.Substring(Constants.KeywordsPrefixTag.Length);
                     if (!result.Keywords.ContainsKey(key))
                         result.Keywords.Add(key, field.StringValue);
                 }
                 break;
         }
     }
 }
        public string GetDocUrl(SearchResult searchResult)
        {
            var url = string.Empty;
            var portalSettings = PortalController.Instance.GetCurrentPortalSettings();
            var journalId = Convert.ToInt32(searchResult.UniqueKey.Split('_')[1]);
            var groupId = Convert.ToInt32(searchResult.Keywords["GroupId"]);
            var tabId = Convert.ToInt32(searchResult.Keywords["TabId"]);
            var tabModuleId = Convert.ToInt32(searchResult.Keywords["TabModuleId"]);
            var profileId = Convert.ToInt32(searchResult.Keywords["ProfileId"]);

            if (groupId > 0 && tabId > 0)
            {
                url = Globals.NavigateURL(tabId, string.Empty, "GroupId=" + groupId,
                                          "jid=" + journalId);
            }
            else if (tabId == portalSettings.UserTabId)
            {
                url = Globals.NavigateURL(portalSettings.UserTabId, string.Empty, string.Format("userId={0}", profileId), "jid=" + journalId);
            }
            else
            {
                url = Globals.NavigateURL(tabId, string.Empty, "jid=" + journalId);
            }

            return url;
        }
Esempio n. 12
0
        /// <summary>
        /// Creates an RSS Item
        /// </summary>
        /// <param name="searchResult"></param>
        /// <returns></returns>
        /// <remarks></remarks>
        private GenericRssElement GetRssItem(SearchResult searchResult)
        {
            var item = new GenericRssElement();
            var url = searchResult.Url;
            if (url.Trim() == "")
            {
                url = TestableGlobals.Instance.NavigateURL(searchResult.TabId);
                if (url.ToLower().IndexOf(HttpContext.Current.Request.Url.Host.ToLower()) == -1)
                {
                    url = TestableGlobals.Instance.AddHTTP(HttpContext.Current.Request.Url.Host) + url;
                }
            }

            item["title"] = searchResult.Title;
            item["description"] = searchResult.Description;           
            item["pubDate"] = searchResult.ModifiedTimeUtc.ToUniversalTime().ToString("r");
            item["link"] = url;
            item["guid"] = url;
            //TODO:  JMB: We need to figure out how to persist the dc prefix in the XML output.  See the Render method below.
            //item("dc:creator") = SearchItem.AuthorName

            return item;
        }
 // Returns the URL to the first instance of the module the user has access to view
 public override string GetDocUrl(SearchResult searchResult)
 {
    return "http://www.google.com";
 }
 public override bool HasViewPermission(SearchResult searchResult)
 {
     return true;
 }
            internal static IEnumerable <GroupedDetailView> GetGroupedDetailViews(SearchQuery searchQuery, int userSearchTypeId, out int totalHits, out bool more)
            {
                SearchResults searchResults = SearchController.Instance.SiteSearch(searchQuery);

                totalHits = searchResults.TotalHits;
                more      = totalHits > searchQuery.PageSize * searchQuery.PageIndex;

                List <GroupedDetailView> groups = new List <GroupedDetailView>();
                Dictionary <string, IList <DotNetNukeSearch.SearchResult> > tabGroups = new Dictionary <string, IList <DotNetNukeSearch.SearchResult> >();

                foreach (DotNetNukeSearch.SearchResult result in searchResults.Results)
                {
                    //var key = result.TabId + result.Url;
                    string key = result.Url;
                    if (!tabGroups.ContainsKey(key))
                    {
                        tabGroups.Add(key, new List <DotNetNukeSearch.SearchResult> {
                            result
                        });
                    }
                    else
                    {
                        //when the result is a user search type, we should only show one result
                        // and if duplicate, we should also reduce the totalHit number.
                        if (result.SearchTypeId != userSearchTypeId ||
                            tabGroups[key].All(r => r.Url != result.Url))
                        {
                            tabGroups[key].Add(result);
                        }
                        else
                        {
                            totalHits--;
                        }
                    }
                }

                bool showFriendlyTitle = false;

                //ActiveModule == null
                //                        || !ActiveModule.ModuleSettings.ContainsKey("ShowFriendlyTitle")
                //                        || Convert.ToBoolean(ActiveModule.ModuleSettings["ShowFriendlyTitle"]);
                foreach (IList <DotNetNukeSearch.SearchResult> results in tabGroups.Values)
                {
                    GroupedDetailView group = new GroupedDetailView();

                    //first entry
                    DotNetNukeSearch.SearchResult first = results[0];
                    group.Title       = showFriendlyTitle ? GetFriendlyTitle(first) : first.Title;
                    group.DocumentUrl = first.Url;

                    //Find a different title for multiple entries with same url
                    if (results.Count > 1)
                    {
                        if (first.TabId > 0)
                        {
                            TabInfo tab = TabController.Instance.GetTab(first.TabId, first.PortalId, false);
                            if (tab != null)
                            {
                                group.Title = showFriendlyTitle && !string.IsNullOrEmpty(tab.Title) ? tab.Title : tab.TabName;
                            }
                        }
                        else if (first.ModuleId > 0)
                        {
                            string tabTitle = GetTabTitleFromModuleId(first.ModuleId);
                            if (!string.IsNullOrEmpty(tabTitle))
                            {
                                group.Title = tabTitle;
                            }
                        }
                    }
                    else if (first.ModuleDefId > 0 && first.ModuleDefId == HtmlModuleDefitionId) //special handling for Html module
                    {
                        string tabTitle = GetTabTitleFromModuleId(first.ModuleId);
                        if (!string.IsNullOrEmpty(tabTitle))
                        {
                            group.Title = tabTitle;
                            if (first.Title != "Enter Title" && first.Title != "Text/HTML")
                            {
                                group.Title += " > " + first.Title;
                            }

                            first.Title = group.Title;
                        }
                    }

                    foreach (DotNetNukeSearch.SearchResult result in results)
                    {
                        string       title  = showFriendlyTitle ? GetFriendlyTitle(result) : result.Title;
                        DetailedView detail = new DetailedView
                        {
                            Title               = title != null && title.Contains("<") ? HttpUtility.HtmlEncode(title) : title,
                            DocumentTypeName    = InternalSearchController.Instance.GetSearchDocumentTypeDisplayName(result),
                            DocumentUrl         = result.Url,
                            Snippet             = result.Snippet,
                            Description         = result.Description,
                            DisplayModifiedTime = result.DisplayModifiedTime,
                            Tags             = result.Tags.ToList(),
                            AuthorProfileUrl = result.AuthorUserId > 0 ? Globals.UserProfileURL(result.AuthorUserId) : string.Empty,
                            AuthorName       = result.AuthorName
                        };
                        group.Results.Add(detail);
                    }

                    groups.Add(group);
                }

                return(groups);
            }
 public override string GetDocUrl(SearchResult searchResult)
 {
     var url = Globals.NavigateURL(PortalSettings.UserTabId, string.Empty, "userid=" + GetUserId(searchResult));
     return url;
 }
        // Returns the URL to the first instance of the module the user has access to view
        public override string GetDocUrl(SearchResult searchResult)
        {
            if (!string.IsNullOrEmpty(searchResult.Url))
                return searchResult.Url;

            var url = Localization.Localization.GetString("SEARCH_NoLink");
            var tabController = new TabController();
            //Get All related tabIds from moduleId
            var tabModules = GetModuleTabs(searchResult.ModuleId);

            foreach (ModuleInfo module in tabModules)
            {
                var tab = tabController.GetTab(module.TabID, searchResult.PortalId, false);
                if (TabPermissionController.CanViewPage(tab) && ModulePermissionController.CanViewModule(module))
                {
	                var portalSettings = new PortalSettings(searchResult.PortalId);
	                portalSettings.PortalAlias = TestablePortalAliasController.Instance.GetPortalAlias(portalSettings.DefaultPortalAlias);
                    url = Globals.NavigateURL(module.TabID, portalSettings, string.Empty, searchResult.QueryString);
                    break;
                }
            }

            return url;
        }
 /// <summary>
 /// Does the user in the Context have View Permission on the Document
 /// </summary>
 /// <param name="searchResult">Search Result</param>
 /// <returns>True or False</returns>
 public abstract bool HasViewPermission(SearchResult searchResult);
        public bool HasViewPermission(SearchResult searchResult)
        {
            var securityKeys = searchResult.UniqueKey.Split('_')[2].Split(',');
            var userInfo = UserController.Instance.GetCurrentUserInfo();
            
            var selfKey = string.Format("U{0}", userInfo.UserID);

            if (securityKeys.Contains("E") || securityKeys.Contains(selfKey))
            {
                return true;
            }

            //do not show items in private group
            if (securityKeys.Any(s => s.StartsWith("R")))
            {
                var groupId = Convert.ToInt32(securityKeys.First(s => s.StartsWith("R")).Substring(1));
                var role = RoleController.Instance.GetRoleById(searchResult.PortalId, groupId);
                if (role != null && !role.IsPublic && !userInfo.IsInRole(role.RoleName))
                {
                    return false;
                }
            }

            if (securityKeys.Contains("C"))
            {
                return userInfo.UserID > 0;
            }

            if (securityKeys.Any(s => s.StartsWith("F")))
            {
                var targetUser = UserController.GetUserById(searchResult.PortalId, searchResult.AuthorUserId);

                return targetUser != null && targetUser.Social.Friend != null && targetUser.Social.Friend.Status == RelationshipStatus.Accepted;
            }

            return false;
        }
 /// <summary>
 /// Return a Url that can be shown in search results.
 /// </summary>
 /// <param name="searchResult">Search Result</param>
 /// <returns>Url</returns>
 /// <remarks>The Query Strings in the Document (if present) should be appended while returning the Url</remarks>
 public abstract string GetDocUrl(SearchResult searchResult);
        private SearchResult GetSearchResultFromLuceneResult(LuceneResult luceneResult)
        {
            var result = new SearchResult();
            var doc = luceneResult.Document;
            result.DisplayScore = luceneResult.DisplayScore;
            result.Score = luceneResult.Score;
            
            // set culture code of result
            result.CultureCode = string.Empty;
            var localeField = luceneResult.Document.GetField(Constants.LocaleTag);
            if (localeField != null)
            {
                int id;
                if (int.TryParse(localeField.StringValue, out id) && id >= 0)
                {
                    result.CultureCode = LocaleController.Instance.GetLocale(id).Code;
                }
                else
                {
                    result.CultureCode = Null.NullString;
                }
            }

            FillTagsValues(doc, result);
            result.Snippet = GetSnippet(result, luceneResult);
            return result;
        }
        public string GetSearchDocumentTypeDisplayName(SearchResult searchResult)
        {
            //ModuleDefId will be zero for non-module
            var key = string.Format("{0}-{1}", searchResult.SearchTypeId, searchResult.ModuleDefId);
            var keys = CBO.Instance.GetCachedObject<IDictionary<string, string>>(
                            new CacheItemArgs(key, 120, CacheItemPriority.Default), SearchDocumentTypeDisplayNameCallBack, false);

            return keys.ContainsKey(key) ? keys[key] : string.Empty;
        }
        private string GetSnippet(SearchResult searchResult, LuceneResult luceneResult)
        {
            var sb = new StringBuilder();

            if (!string.IsNullOrEmpty(luceneResult.TitleSnippet)) sb.Append(luceneResult.TitleSnippet + "...");
            if (!string.IsNullOrEmpty(luceneResult.DescriptionSnippet)) sb.Append(luceneResult.DescriptionSnippet + "...");
            if (!string.IsNullOrEmpty(luceneResult.TagSnippet)) sb.Append(luceneResult.TagSnippet + "...");
            if (!string.IsNullOrEmpty(luceneResult.BodySnippet)) sb.Append(luceneResult.BodySnippet + "...");
            if (!string.IsNullOrEmpty(luceneResult.AuthorSnippet)) sb.Append(luceneResult.AuthorSnippet + "...");
            if (!string.IsNullOrEmpty(luceneResult.ContentSnippet)) sb.Append(luceneResult.ContentSnippet + "...");

            var snippet = sb.ToString();
           if (string.IsNullOrEmpty(snippet)) snippet = searchResult.Title;

            return snippet;
        }
        private bool HasModuleSearchPermission(ModuleInfo module, SearchResult searchResult)
        {
            var canView = true;

            var moduleSearchController = GetModuleSearchController(module);
            if (moduleSearchController != null)
            {
                canView = moduleSearchController.HasViewPermission(searchResult);
            }

            return canView;
        }
        private string GetTitle(SearchResult result)
        {
            if (result.ModuleDefId > 0 && result.ModuleDefId == HtmlModuleDefitionId) //special handling for Html module
            {
                var tabTitle = GetTabTitleFromModuleId(result.ModuleId);
                if (!string.IsNullOrEmpty(tabTitle))
                {
                    return tabTitle + " > " + result.Title;
                }
            }

            return result.Title;
        }
        private string GetModuleSearchUrl(ModuleInfo module, SearchResult searchResult)
        {
            var url = string.Empty;
            var moduleSearchController = GetModuleSearchController(module);
            if (moduleSearchController != null)
            {
                url = moduleSearchController.GetDocUrl(searchResult);
            }

            return url;
        }