/// <summary> /// This method /// </summary> /// <param name="channelName"></param> /// <param name="userName"></param> /// <remarks></remarks> protected override void PopulateChannel(string channelName, string userName) { ModuleInfo objModule; if (Request == null || Settings == null || Settings.ActiveTab == null || ModuleId == Null.NullInteger) { return; } Channel["title"] = Settings.PortalName; Channel["link"] = Globals.AddHTTP(Globals.GetDomainName(Request)); if (!String.IsNullOrEmpty(Settings.Description)) { Channel["description"] = Settings.Description; } else { Channel["description"] = Settings.PortalName; } Channel["language"] = Settings.DefaultLanguage; Channel["copyright"] = !string.IsNullOrEmpty(Settings.FooterText) ? Settings.FooterText.Replace("[year]", DateTime.Now.Year.ToString()) : string.Empty; Channel["webMaster"] = Settings.Email; IList <SearchResult> searchResults = null; var query = new SearchQuery(); query.PortalIds = new[] { Settings.PortalId }; query.TabId = TabId; query.ModuleId = ModuleId; query.SearchTypeIds = new[] { SearchHelper.Instance.GetSearchTypeByName("module").SearchTypeId }; try { searchResults = SearchController.Instance.ModuleSearch(query).Results; } catch (Exception ex) { Exceptions.Exceptions.LogException(ex); } if (searchResults != null) { foreach (var result in searchResults) { if (!result.UniqueKey.StartsWith(Constants.ModuleMetaDataPrefixTag) && TabPermissionController.CanViewPage()) { if (Settings.ActiveTab.StartDate < DateTime.Now && Settings.ActiveTab.EndDate > DateTime.Now) { objModule = ModuleController.Instance.GetModule(result.ModuleId, query.TabId, false); if (objModule != null && objModule.DisplaySyndicate && objModule.IsDeleted == false) { if (ModulePermissionController.CanViewModule(objModule)) { if (Convert.ToDateTime(objModule.StartDate == Null.NullDate ? DateTime.MinValue : objModule.StartDate) < DateTime.Now && Convert.ToDateTime(objModule.EndDate == Null.NullDate ? DateTime.MaxValue : objModule.EndDate) > DateTime.Now) { Channel.Items.Add(GetRssItem(result)); } } } } } } } }
private bool ProcessMasterModules() { bool success = true; if (TabPermissionController.CanViewPage()) { //We need to ensure that Content Item exists since in old versions Content Items are not needed for tabs EnsureContentItemForTab(PortalSettings.ActiveTab); // Versioning checks. if (!TabController.CurrentPage.HasAVisibleVersion) { Response.Redirect(Globals.NavigateURL(PortalSettings.ErrorPage404, string.Empty, "status=404")); } int urlVersion; if (TabVersionUtils.TryGetUrlVersion(out urlVersion)) { if (!TabVersionUtils.CanSeeVersionedPages()) { AddPageMessage(this, "", Localization.GetString("TabAccess.Error"), ModuleMessage.ModuleMessageType.YellowWarning); return(true); } if (TabVersionController.Instance.GetTabVersions(TabController.CurrentPage.TabID).All(tabVersion => tabVersion.Version != urlVersion)) { Response.Redirect(Globals.NavigateURL(PortalSettings.ErrorPage404, string.Empty, "status=404")); } } //check portal expiry date if (!CheckExpired()) { if ((PortalSettings.ActiveTab.StartDate < DateAndTime.Now && PortalSettings.ActiveTab.EndDate > DateAndTime.Now) || TabPermissionController.CanAdminPage() || Globals.IsLayoutMode()) { foreach (var objModule in PortalSettingsController.Instance().GetTabModules(PortalSettings)) { success = ProcessModule(objModule); } } else { AddPageMessage(this, "", Localization.GetString("TabAccess.Error"), ModuleMessage.ModuleMessageType.YellowWarning); } } else { AddPageMessage(this, "", string.Format(Localization.GetString("ContractExpired.Error"), PortalSettings.PortalName, Globals.GetMediumDate(PortalSettings.ExpiryDate.ToString(CultureInfo.InvariantCulture)), PortalSettings.Email), ModuleMessage.ModuleMessageType.RedError); } } else { //If request localized page which haven't complete translate yet, redirect to default language version. var redirectUrl = Globals.AccessDeniedURL(Localization.GetString("TabAccess.Error")); Locale defaultLocale = LocaleController.Instance.GetDefaultLocale(PortalSettings.PortalId); if (PortalSettings.ContentLocalizationEnabled && TabController.CurrentPage.CultureCode != defaultLocale.Code) { redirectUrl = new LanguageTokenReplace { Language = defaultLocale.Code }.ReplaceEnvironmentTokens("[URL]"); } Response.Redirect(redirectUrl, true); } return(success); }
public override void LoadSettings() { try { if (Page.IsPostBack == false) { var portalTabs = TabController.GetPortalTabs(PortalId, Null.NullInteger, false, true); //Add host tabs if (UserInfo != null && UserInfo.IsSuperUser) { var hostTabs = new TabController().GetTabsByPortal(Null.NullInteger); portalTabs.AddRange(hostTabs.Values); } ParentTab.Items.Clear(); foreach (var t in portalTabs) { if ((TabPermissionController.CanViewPage(t))) { ParentTab.AddItem(t.IndentedTabName, t.TabID.ToString(CultureInfo.InvariantCulture)); //ParentTab.Items.Add(new ListItem(t.IndentedTabName, t.TabID.ToString(CultureInfo.InvariantCulture))); } } //ParentTab.Items.Insert(0, ""); ParentTab.InsertItem(0, "", ""); SelectDropDownListItem(ref ParentTab, "ParentTabID"); foreach (string val in ConsoleController.GetSizeValues()) { //DefaultSize.Items.Add(new ListItem(Localization.GetString(val, LocalResourceFile), val)); DefaultSize.AddItem(Localization.GetString(val, LocalResourceFile), val); } SelectDropDownListItem(ref DefaultSize, "DefaultSize"); SelectDropDownListItem(ref modeList, "Mode"); if (Settings.ContainsKey("AllowSizeChange")) { AllowResize.Checked = Convert.ToBoolean(Settings["AllowSizeChange"]); } foreach (var val in ConsoleController.GetViewValues()) { //DefaultView.Items.Add(new ListItem(Localization.GetString(val, LocalResourceFile), val)); DefaultView.AddItem(Localization.GetString(val, LocalResourceFile), val); } SelectDropDownListItem(ref DefaultView, "DefaultView"); if (Settings.ContainsKey("IncludeParent")) { IncludeParent.Checked = Convert.ToBoolean(Settings["IncludeParent"]); } if (Settings.ContainsKey("AllowViewChange")) { AllowViewChange.Checked = Convert.ToBoolean(Settings["AllowViewChange"]); } if (Settings.ContainsKey("ShowTooltip")) { ShowTooltip.Checked = Convert.ToBoolean(Settings["ShowTooltip"]); } if (Settings.ContainsKey("OrderTabsByHierarchy")) { OrderTabsByHierarchy.Checked = Convert.ToBoolean(Settings["OrderTabsByHierarchy"]); } if (Settings.ContainsKey("ConsoleWidth")) { ConsoleWidth.Text = Convert.ToString(Settings["ConsoleWidth"]); } SwitchMode(); } } catch (Exception exc) //Module failed to load { Exceptions.ProcessModuleLoadException(this, exc); } }
/// <inheritdoc/> 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 (this.ModuleIsAvailable(tab, module) && !tab.IsDeleted && !tab.DisableLink && TabPermissionController.CanViewPage(tab)) { // Check If authorised to View Module if (ModulePermissionController.CanViewModule(module) && this.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 = this.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); }
/// <summary> /// newUrl returns the new URL based on the new language. /// Basically it is just a call to NavigateUrl, with stripped qs parameters /// </summary> /// <param name="newLanguage"></param> private string NewUrl(string newLanguage) { var newLocale = LocaleController.Instance.GetLocale(newLanguage); //Ensure that the current ActiveTab is the culture of the new language var tabId = objPortal.ActiveTab.TabID; var islocalized = false; var localizedTab = TabController.Instance.GetTabByCulture(tabId, objPortal.PortalId, newLocale); if (localizedTab != null) { islocalized = true; if (localizedTab.IsDeleted || !TabPermissionController.CanViewPage(localizedTab)) { var localizedPortal = PortalController.Instance.GetPortal(objPortal.PortalId, newLocale.Code); tabId = localizedPortal.HomeTabId; } else { var fullurl = string.Empty; switch (localizedTab.TabType) { case TabType.Normal: //normal tab tabId = localizedTab.TabID; break; case TabType.Tab: //alternate tab url fullurl = TestableGlobals.Instance.NavigateURL(Convert.ToInt32(localizedTab.Url)); break; case TabType.File: //file url fullurl = TestableGlobals.Instance.LinkClick(localizedTab.Url, localizedTab.TabID, Null.NullInteger); break; case TabType.Url: //external url fullurl = localizedTab.Url; break; } if (!string.IsNullOrEmpty(fullurl)) { return(GetCleanUrl(fullurl)); } } } var rawQueryString = string.Empty; if (Entities.Host.Host.UseFriendlyUrls) { // Remove returnurl from query parameters to prevent that the language is changed back after the user has logged in // Example: Accessing protected page /de-de/Page1 redirects to /de-DE/Login?returnurl=%2f%2fde-de%2fPage1 and changing language to en-us on the login page // using the language links won't change the language in the returnurl parameter and the user will be redirected to the de-de version after logging in // Assumption: Loosing the returnurl information is better than confusing the user by switching the language back after the login var queryParams = HttpUtility.ParseQueryString(new Uri(string.Concat(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority), HttpContext.Current.Request.RawUrl)).Query); queryParams.Remove("returnurl"); var queryString = queryParams.ToString(); if (queryString.Length > 0) { rawQueryString = string.Concat("?", queryString); } } var controlKey = HttpContext.Current.Request.QueryString["ctl"]; var queryStrings = GetQsParams(newLocale.Code, islocalized); var isSuperTab = objPortal.ActiveTab.IsSuperTab; var url = $"{TestableGlobals.Instance.NavigateURL(tabId, isSuperTab, objPortal, controlKey, newLanguage, queryStrings)}{rawQueryString}"; return(GetCleanUrl(url)); }
public void BindAll(int tabID) { TabID = tabID; var currentTab = TabController.GetTab(tabID, PortalSettings.PortalId, false); //Unique id of default language page var uniqueId = currentTab.DefaultLanguageGuid != Null.NullGuid ? currentTab.DefaultLanguageGuid : currentTab.UniqueId; // get all non admin pages and not deleted var allPages = TabController.GetTabsByPortal(PortalSettings.PortalId).Values.Where(t => t.TabID != PortalSettings.AdminTabId && (Null.IsNull(t.ParentId) || t.ParentId != PortalSettings.AdminTabId)); allPages = allPages.Where(t => t.IsDeleted == false); // get all localized pages of current page var tabInfos = allPages as IList <TabInfo> ?? allPages.ToList(); var localizedPages = tabInfos.Where(t => t.DefaultLanguageGuid == uniqueId || t.UniqueId == uniqueId).OrderBy(t => t.DefaultLanguageGuid).ToList(); Dictionary <string, TabInfo> localizedTabs = null; // we are going to build up a list of locales // this is a bit more involved, since we want the default language to be first. // also, we do not want to add any locales the user has no access to var locales = new List <string>(); var localeController = new LocaleController(); var localeDict = localeController.GetLocales(PortalSettings.PortalId); if (localeDict.Count > 0) { if (localizedPages.Count() == 1 && localizedPages.First().CultureCode == "") { // locale neutral page locales.Add(""); } else if (localizedPages.Count() == 1 && localizedPages.First().CultureCode != PortalSettings.DefaultLanguage) { locales.Add(localizedPages.First().CultureCode); localizedTabs = new Dictionary <string, TabInfo>(); localizedTabs.Add(localizedPages.First().CultureCode, localizedPages.First()); } else { //force sort order, so first add default language locales.Add(PortalSettings.DefaultLanguage); // build up a list of localized tabs. // depending on whether or not the selected page is in the default langauge // we will add the localized tabs from the current page // or from the defaultlanguage page if (currentTab.CultureCode == PortalSettings.DefaultLanguage) { localizedTabs = currentTab.LocalizedTabs; } else { // selected page is not in default language // add localizedtabs from defaultlanguage page if (currentTab.DefaultLanguageTab != null) { localizedTabs = currentTab.DefaultLanguageTab.LocalizedTabs; } } if (localizedTabs != null) { // only add locales from tabs the user has at least view permissions to. // we will handle the edit permissions at a later stage locales.AddRange(from localizedTab in localizedTabs where TabPermissionController.CanViewPage(localizedTab.Value) select localizedTab.Value.CultureCode); } } } else { locales.Add(""); } Data = new DnnPages(locales); // filter the list of localized pages to only those that have a culture we want to see var viewableLocalizedPages = localizedPages.Where(localizedPage => locales.Find(locale => locale == localizedPage.CultureCode) != null).ToList(); if (viewableLocalizedPages.Count() > 4) { mainContainer.Attributes.Add("class", "container RadGrid RadGrid_Default overflow"); } foreach (var tabInfo in viewableLocalizedPages) { var localTabInfo = tabInfo; var dnnPage = Data.Page(localTabInfo.CultureCode); if (!TabPermissionController.CanViewPage(tabInfo)) { Data.RemoveLocale(localTabInfo.CultureCode); Data.Pages.Remove(dnnPage); break; } dnnPage.TabID = localTabInfo.TabID; dnnPage.TabName = localTabInfo.TabName; dnnPage.Title = localTabInfo.Title; dnnPage.Description = localTabInfo.Description; dnnPage.Path = localTabInfo.TabPath.Substring(0, localTabInfo.TabPath.LastIndexOf("//", StringComparison.Ordinal)).Replace("//", ""); dnnPage.HasChildren = (TabController.GetTabsByPortal(PortalSettings.PortalId).WithParentId(tabInfo.TabID).Count != 0); dnnPage.CanAdminPage = TabPermissionController.CanAdminPage(tabInfo); dnnPage.CanViewPage = TabPermissionController.CanViewPage(tabInfo); dnnPage.LocalResourceFile = LocalResourceFile; // calculate position in the form of 1.3.2... var SiblingTabs = tabInfos.Where(t => t.ParentId == localTabInfo.ParentId && t.CultureCode == localTabInfo.CultureCode || t.CultureCode == null).OrderBy(t => t.TabOrder).ToList(); dnnPage.Position = (SiblingTabs.IndexOf(localTabInfo) + 1).ToString(CultureInfo.InvariantCulture); int ParentTabId = localTabInfo.ParentId; while (ParentTabId > 0) { TabInfo ParentTab = tabInfos.Single(t => t.TabID == ParentTabId); int id = ParentTabId; SiblingTabs = tabInfos.Where(t => t.ParentId == id && t.CultureCode == localTabInfo.CultureCode || t.CultureCode == null).OrderBy(t => t.TabOrder).ToList(); dnnPage.Position = (SiblingTabs.IndexOf(localTabInfo) + 1).ToString(CultureInfo.InvariantCulture) + "." + dnnPage.Position; ParentTabId = ParentTab.ParentId; } dnnPage.DefaultLanguageGuid = localTabInfo.DefaultLanguageGuid; dnnPage.IsTranslated = localTabInfo.IsTranslated; dnnPage.IsPublished = TabController.IsTabPublished(localTabInfo); // generate modules information foreach (var moduleInfo in ModuleController.GetTabModules(localTabInfo.TabID).Values) //foreach (var moduleInfo in ModuleController.GetTabModules(localTabInfo.TabID).Values.Where(m => !m.IsDeleted)) { var guid = moduleInfo.DefaultLanguageGuid == Null.NullGuid ? moduleInfo.UniqueId : moduleInfo.DefaultLanguageGuid; var dnnModules = Data.Module(guid); // modules of each language var dnnModule = dnnModules.Module(localTabInfo.CultureCode); // detect error : 2 modules with same uniqueId on the same page dnnModule.LocalResourceFile = LocalResourceFile; if (dnnModule.TabModuleID > 0) { dnnModule.ErrorDuplicateModule = true; ErrorExists = true; continue; } dnnModule.ModuleTitle = moduleInfo.ModuleTitle; dnnModule.DefaultLanguageGuid = moduleInfo.DefaultLanguageGuid; dnnModule.TabId = localTabInfo.TabID; dnnModule.TabModuleID = moduleInfo.TabModuleID; dnnModule.ModuleID = moduleInfo.ModuleID; dnnModule.CanAdminModule = ModulePermissionController.CanAdminModule(moduleInfo); dnnModule.CanViewModule = ModulePermissionController.CanViewModule(moduleInfo); dnnModule.IsDeleted = moduleInfo.IsDeleted; if (moduleInfo.DefaultLanguageGuid != Null.NullGuid) { ModuleInfo defaultLanguageModule = ModuleController.GetModuleByUniqueID(moduleInfo.DefaultLanguageGuid); if (defaultLanguageModule != null) { dnnModule.DefaultModuleID = defaultLanguageModule.ModuleID; if (defaultLanguageModule.ParentTab.UniqueId != moduleInfo.ParentTab.DefaultLanguageGuid) { dnnModule.DefaultTabName = defaultLanguageModule.ParentTab.TabName; } } } dnnModule.IsTranslated = moduleInfo.IsTranslated; dnnModule.IsLocalized = moduleInfo.IsLocalized; dnnModule.IsShared = TabController.GetTabsByModuleID(moduleInfo.ModuleID).Values.Count(t => t.CultureCode == moduleInfo.CultureCode) > 1; // detect error : the default language module is on an other page dnnModule.ErrorDefaultOnOtherTab = moduleInfo.DefaultLanguageGuid != Null.NullGuid && moduleInfo.DefaultLanguageModule == null; // detect error : different culture on tab and module dnnModule.ErrorCultureOfModuleNotCultureOfTab = moduleInfo.CultureCode != localTabInfo.CultureCode; ErrorExists = ErrorExists || dnnModule.ErrorDefaultOnOtherTab || dnnModule.ErrorCultureOfModuleNotCultureOfTab; } } rDnnModules.DataSource = Data.Modules; rDnnModules.DataBind(); }
private bool ProcessMasterModules() { bool success = true; if (TabPermissionController.CanViewPage()) { // Versioning checks. if (!TabController.CurrentPage.HasAVisibleVersion) { Response.Redirect(Globals.NavigateURL(PortalSettings.ErrorPage404, string.Empty, "status=404")); } int urlVersion; if (TabVersionUtils.TryGetUrlVersion(out urlVersion)) { if (!TabVersionUtils.CanSeeVersionedPages()) { AddPageMessage(this, "", Localization.GetString("TabAccess.Error"), ModuleMessage.ModuleMessageType.YellowWarning); return(true); } if (TabVersionController.Instance.GetTabVersions(TabController.CurrentPage.TabID).All(tabVersion => tabVersion.Version != urlVersion)) { Response.Redirect(Globals.NavigateURL(PortalSettings.ErrorPage404, string.Empty, "status=404")); } } //check portal expiry date if (!CheckExpired()) { if ((PortalSettings.ActiveTab.StartDate < DateAndTime.Now && PortalSettings.ActiveTab.EndDate > DateAndTime.Now) || TabPermissionController.CanAdminPage() || Globals.IsLayoutMode()) { // Check for MVC async call if (Request.QueryString.AllKeys.Contains("moduleId") && Request.QueryString.AllKeys.Contains("controller") & Request.QueryString.AllKeys.Contains("action") && Request.QueryString.AllKeys.Contains("async") && Request.QueryString["async"].ToLower() == "true") { // Get module ID var moduleId = 0; success = int.TryParse(Request.QueryString["moduleId"], out moduleId); if (success) { // Get module info foreach (var objModule in PortalSettingsController.Instance().GetTabModules(PortalSettings)) { if (objModule.ModuleID == moduleId) { // process only this module success = ProcessModule(objModule); } } } } else { foreach (var objModule in PortalSettingsController.Instance().GetTabModules(PortalSettings)) { success = ProcessModule(objModule); } } } else { AddPageMessage(this, "", Localization.GetString("TabAccess.Error"), ModuleMessage.ModuleMessageType.YellowWarning); } } else { AddPageMessage(this, "", string.Format(Localization.GetString("ContractExpired.Error"), PortalSettings.PortalName, Globals.GetMediumDate(PortalSettings.ExpiryDate.ToString()), PortalSettings.Email), ModuleMessage.ModuleMessageType.RedError); } } else { //If request localized page which haven't complete translate yet, redirect to default language version. var redirectUrl = Globals.AccessDeniedURL(Localization.GetString("TabAccess.Error")); Locale defaultLocale = LocaleController.Instance.GetDefaultLocale(PortalSettings.PortalId); if (PortalSettings.ContentLocalizationEnabled && TabController.CurrentPage.CultureCode != defaultLocale.Code) { redirectUrl = new LanguageTokenReplace { Language = defaultLocale.Code }.ReplaceEnvironmentTokens("[URL]"); } Response.Redirect(redirectUrl, true); } return(success); }
/// ----------------------------------------------------------------------------- /// <summary> /// GetSearchResults gets the search results for a passed in criteria string /// </summary> /// <remarks> /// </remarks> /// <param name="portalId">A Id of the Portal</param> /// <param name="criteria">The criteria string</param> /// ----------------------------------------------------------------------------- public override SearchResultsInfoCollection GetSearchResults(int portalId, string criteria) { bool hasExcluded = Null.NullBoolean; bool hasMandatory = Null.NullBoolean; var portal = PortalController.Instance.GetPortal(portalId); //Get the Settings for this Portal var portalSettings = new PortalSettings(portal); //We will assume that the content is in the locale of the Portal Hashtable commonWords = GetCommonWords(portalSettings.DefaultLanguage); //clean criteria criteria = criteria.ToLowerInvariant(); //split search criteria into words var searchWords = new SearchCriteriaCollection(criteria); var searchResults = new Dictionary <string, SearchResultsInfoCollection>(); //dicResults is a Dictionary(Of SearchItemID, Dictionary(Of TabID, SearchResultsInfo) var dicResults = new Dictionary <int, Dictionary <int, SearchResultsInfo> >(); //iterate through search criteria words foreach (SearchCriteria criterion in searchWords) { if (commonWords.ContainsKey(criterion.Criteria) == false || portalSettings.SearchIncludeCommon) { if (!searchResults.ContainsKey(criterion.Criteria)) { searchResults.Add(criterion.Criteria, SearchDataStoreController.GetSearchResults(portalId, criterion.Criteria)); } if (searchResults.ContainsKey(criterion.Criteria)) { foreach (SearchResultsInfo result in searchResults[criterion.Criteria]) { //Add results to dicResults if (!criterion.MustExclude) { if (dicResults.ContainsKey(result.SearchItemID)) { //The Dictionary exists for this SearchItemID already so look in the TabId keyed Sub-Dictionary Dictionary <int, SearchResultsInfo> dic = dicResults[result.SearchItemID]; if (dic.ContainsKey(result.TabId)) { //The sub-Dictionary contains the item already so update the relevance SearchResultsInfo searchResult = dic[result.TabId]; searchResult.Relevance += result.Relevance; } else { //Add Entry to Sub-Dictionary dic.Add(result.TabId, result); } } else { //Create new TabId keyed Dictionary var dic = new Dictionary <int, SearchResultsInfo>(); dic.Add(result.TabId, result); //Add new Dictionary to SearchResults dicResults.Add(result.SearchItemID, dic); } } } } } } foreach (SearchCriteria criterion in searchWords) { var mandatoryResults = new Dictionary <int, bool>(); var excludedResults = new Dictionary <int, bool>(); if (searchResults.ContainsKey(criterion.Criteria)) { foreach (SearchResultsInfo result in searchResults[criterion.Criteria]) { if (criterion.MustInclude) { //Add to mandatory results lookup mandatoryResults[result.SearchItemID] = true; hasMandatory = true; } else if (criterion.MustExclude) { //Add to exclude results lookup excludedResults[result.SearchItemID] = true; hasExcluded = true; } } } foreach (KeyValuePair <int, Dictionary <int, SearchResultsInfo> > kvpResults in dicResults) { //The key of this collection is the SearchItemID, Check if the value of this collection should be processed if (hasMandatory && (!mandatoryResults.ContainsKey(kvpResults.Key))) { //1. If mandatoryResults exist then only process if in mandatoryResults Collection foreach (SearchResultsInfo result in kvpResults.Value.Values) { result.Delete = true; } } else if (hasExcluded && (excludedResults.ContainsKey(kvpResults.Key))) { //2. Do not process results in the excludedResults Collection foreach (SearchResultsInfo result in kvpResults.Value.Values) { result.Delete = true; } } } } //Process results against permissions and mandatory and excluded results var results = new SearchResultsInfoCollection(); foreach (KeyValuePair <int, Dictionary <int, SearchResultsInfo> > kvpResults in dicResults) { foreach (SearchResultsInfo result in kvpResults.Value.Values) { if (!result.Delete) { //Check If authorised to View Tab TabInfo objTab = TabController.Instance.GetTab(result.TabId, portalId, false); if (TabPermissionController.CanViewPage(objTab)) { //Check If authorised to View Module ModuleInfo objModule = ModuleController.Instance.GetModule(result.ModuleId, result.TabId, false); if (ModulePermissionController.CanViewModule(objModule)) { results.Add(result); } } } } } //Return Search Results Collection return(results); }
/// <summary> /// newUrl returns the new URL based on the new language. /// Basically it is just a call to NavigateUrl, with stripped qs parameters /// </summary> /// <param name="newLanguage"></param> /// <history> /// [erikvb] 20070814 added /// </history> private string NewUrl(string newLanguage) { var objSecurity = new PortalSecurity(); Locale newLocale = LocaleController.Instance.GetLocale(newLanguage); //Ensure that the current ActiveTab is the culture of the new language int tabId = objPortal.ActiveTab.TabID; bool islocalized = false; TabInfo localizedTab = new TabController().GetTabByCulture(tabId, objPortal.PortalId, newLocale); if (localizedTab != null) { islocalized = true; if (localizedTab.IsDeleted || !TabPermissionController.CanViewPage(localizedTab)) { PortalInfo localizedPortal = new PortalController().GetPortal(objPortal.PortalId, newLocale.Code); tabId = localizedPortal.HomeTabId; } else { string fullurl = ""; switch (localizedTab.TabType) { case TabType.Normal: //normal tab tabId = localizedTab.TabID; break; case TabType.Tab: //alternate tab url fullurl = TestableGlobals.Instance.NavigateURL(Convert.ToInt32(localizedTab.Url)); break; case TabType.File: //file url fullurl = TestableGlobals.Instance.LinkClick(localizedTab.Url, localizedTab.TabID, Null.NullInteger); break; case TabType.Url: //external url fullurl = localizedTab.Url; break; } if (!string.IsNullOrEmpty(fullurl)) { return(objSecurity.InputFilter(fullurl, PortalSecurity.FilterFlag.NoScripting)); } } } // on localised pages most of the querystring parameters have no sense and generate duplicate urls for the same content // because we are on a other tab with other modules (example : ?returntab=/en-US/about) string rawQueryString = ""; if (DotNetNuke.Entities.Host.Host.UseFriendlyUrls && !islocalized) { rawQueryString = new Uri(HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Authority + HttpContext.Current.Request.RawUrl).Query; } return (objSecurity.InputFilter( TestableGlobals.Instance.NavigateURL(tabId, objPortal.ActiveTab.IsSuperTab, objPortal, HttpContext.Current.Request.QueryString["ctl"], newLanguage, GetQsParams(newLocale.Code, islocalized)) + rawQueryString, PortalSecurity.FilterFlag.NoScripting)); }
public TabDto SearchPortalTabs(UserInfo userInfo, string searchText, int portalId, string roles = "", bool disabledNotSelectable = false, int sortOrder = 0, string validateTab = "", bool includeHostPages = false, bool includeDisabled = false) { var rootNode = new TabDto { Name = PortalSettings.PortalName, ImageUrl = IconPortal, TabId = Null.NullInteger.ToString(CultureInfo.InvariantCulture), ChildTabs = new List <TabDto>(), HasChildren = true }; Func <TabInfo, bool> searchFunc; if (string.IsNullOrEmpty(searchText)) { searchFunc = page => true; } else { searchFunc = page => page.LocalizedTabName.IndexOf(searchText, StringComparison.InvariantCultureIgnoreCase) > -1; } var tabs = new List <TabInfo>(); if (portalId > -1) { tabs = TabController.Instance.GetTabsByPortal(portalId) .Where( tab => (includeDisabled || !tab.Value.DisableLink) && (tab.Value.TabType == TabType.Normal) && searchFunc(tab.Value) && !tab.Value.IsSystem && TabPermissionController.CanViewPage(tab.Value)) .Select(tab => tab.Value).ToList(); if (userInfo.IsSuperUser && includeHostPages) { tabs.AddRange(TabController.Instance.GetTabsByPortal(-1).Where(tab => !tab.Value.DisableLink && searchFunc(tab.Value) && !tab.Value.IsSystem) .OrderBy(tab => tab.Value.TabOrder) .Select(tab => tab.Value) .ToList()); } } else { if (userInfo.IsSuperUser) { tabs = TabController.Instance.GetTabsByPortal(-1).Where(tab => !tab.Value.DisableLink && searchFunc(tab.Value) && !tab.Value.IsSystem) .OrderBy(tab => tab.Value.TabOrder) .Select(tab => tab.Value) .ToList(); } } var filterTabs = FilterTabsByRole(tabs, roles, disabledNotSelectable); rootNode.HasChildren = tabs.Any(); foreach (var tab in tabs) { string tooltip; var nodeIcon = GetNodeIcon(tab, out tooltip); var node = new TabDto { Name = tab.LocalizedTabName, TabId = tab.TabID.ToString(CultureInfo.InvariantCulture), ImageUrl = nodeIcon, ParentTabId = tab.ParentId, HasChildren = false, Selectable = filterTabs.Contains(tab.TabID) }; rootNode.ChildTabs.Add(node); } rootNode.ChildTabs = ApplySort(rootNode.ChildTabs, sortOrder).ToList(); if (!string.IsNullOrEmpty(validateTab)) { rootNode.ChildTabs = ValidateModuleInTab(rootNode.ChildTabs, validateTab).ToList(); } return(rootNode); }
/// <summary> /// newUrl returns the new URL based on the new language. /// Basically it is just a call to NavigateUrl, with stripped qs parameters /// </summary> /// <param name="newLanguage"></param> /// <history> /// [erikvb] 20070814 added /// </history> private string newUrl(string newLanguage, out bool CanViewPage) { CanViewPage = true; var objSecurity = new PortalSecurity(); Locale newLocale = LocaleController.Instance.GetLocale(newLanguage); //Ensure that the current ActiveTab is the culture of the new language int tabId = PortalSettings.Current.ActiveTab.TabID; bool islocalized = false; TabInfo localizedTab = new TabController().GetTabByCulture(tabId, PortalSettings.Current.PortalId, newLocale); if (localizedTab != null) { islocalized = true; tabId = localizedTab.TabID; if (localizedTab.IsDeleted || localizedTab.TabType != TabType.Normal || !TabPermissionController.CanViewPage(localizedTab)) { CanViewPage = false; } } else { CanViewPage = false; } /* * return * objSecurity.InputFilter( * Globals.NavigateURL(tabId, PortalSettings.Current.ActiveTab.IsSuperTab, PortalSettings.Current, HttpContext.Current.Request.QueryString["ctl"], newLanguage, getQSParams(newLocale.Code, islocalized)), * PortalSecurity.FilterFlag.NoScripting); * * for performance * */ var qs = getQSParams(newLocale.Code, islocalized); if (islocalized && qs.Length > 0 && !string.IsNullOrEmpty(qs[0])) { // url with query parameters are bad if page is not neutral (in most of the cases) CanViewPage = false; } return(Globals.NavigateURL(tabId, PortalSettings.Current.ActiveTab.IsSuperTab, PortalSettings.Current, HttpContext.Current.Request.QueryString["ctl"], newLanguage, qs)); }
private bool CanShowTab(TabInfo tab) { return((!tab.IsDeleted && (tab.StartDate < DateTime.Now || tab.StartDate == Null.NullDate)) && TabPermissionController.CanViewPage(tab)); }
private bool IsTabVisible(TabInfo tab) { return(!tab.IsDeleted && TabPermissionController.CanViewPage(tab)); }