// 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; }
/// <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; }