示例#1
0
        /// <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));
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
示例#2
0
        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));
        }
示例#6
0
        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();
        }
示例#7
0
        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);
        }
示例#8
0
        /// -----------------------------------------------------------------------------
        /// <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);
        }
示例#9
0
        /// <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));
        }
示例#10
0
        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);
        }
示例#11
0
        /// <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));
 }
示例#13
0
 private bool IsTabVisible(TabInfo tab)
 {
     return(!tab.IsDeleted && TabPermissionController.CanViewPage(tab));
 }