/// <summary> /// This is used to populate a list of active questions to include in the SEO sitemap. /// </summary> /// <param name="portalID"></param> /// <param name="ps"></param> /// <param name="version"></param> /// <returns></returns> public override List<SitemapUrl> GetUrls(int portalID, PortalSettings ps, string version) { var cntQa = new AlbumController(); var colEntries = cntQa.GetSitemapQuestions(portalID); var urls = new List<SitemapUrl>(); foreach (var objQuestion in colEntries) { urls.Add(GetQuestionUrl(objQuestion, ps)); } return urls; }
public int GetLastQuestionPostId(int postId) { var dnnqa =new AlbumController(); var ps = DotNetNuke.Common.Globals.GetPortalSettings(); var answers = dnnqa.GetAnswers(postId, ps.PortalId); if (answers.Count > 0) { var firstOrDefault = (from p in answers orderby p.CreatedOnDate descending select p).FirstOrDefault(); if (firstOrDefault != null) return firstOrDefault.PostId; } return 0; }
/// <summary> /// /// </summary> /// <param name="source"></param> /// <param name="e"></param> public void OnBeginRequest(Object source, EventArgs e) { try { var app = (HttpApplication)source; var context = app.Context; PortalSettings portalSettings; PortalAliasController pac = new PortalAliasController(); PortalInfo portalInfo; //var requestedPath = app.Request.Url.AbsoluteUri; PortalAliasInfo objPortalAlias; var url = context.Request.RawUrl.Replace("?" + context.Request.QueryString, "").ToLower(); if (Utils.UseFriendlyUrls && (url.EndsWith(".aspx") || url.EndsWith("/"))) { var myAlias = DotNetNuke.Common.Globals.GetDomainName(app.Request, true); do { objPortalAlias = PortalAliasController.GetPortalAliasInfo(myAlias); if (objPortalAlias != null) { break; } var slashIndex = myAlias.LastIndexOf('/'); myAlias = slashIndex > 1 ? myAlias.Substring(0, slashIndex) : ""; } while (myAlias.Length > 0); if (objPortalAlias == null) { //portalSettings = new PortalSettings(Host.HostPortalID); //var portalAlias = app.Request.Url.Host; //objPortalAlias = PortalAliasController.GetPortalAliasInfo(portalAlias); return; //if (Host.HostPortalID > Null.NullInteger) //{ // var portalAliasInfo = new PortalAliasInfo // { // PortalID = Host.HostPortalID, // HTTPAlias = portalAlias // }; // pac.AddPortalAlias(portalAliasInfo); //objPortalAlias = PortalAliasController.GetPortalAliasInfo(portalAlias); //} } else { portalInfo = new PortalController().GetPortal(objPortalAlias.PortalID); portalSettings = new PortalSettings(portalInfo.PortalID); } if (portalSettings != null) { portalSettings.PortalAlias = objPortalAlias; Regex questionRegEx; Regex tagRegEx; questionRegEx = new Regex("/" + Utils.GetQuestionUrlName(portalSettings).ToLower() + "/([0-9]+)/(.+)(\\.aspx$|\\.aspx?.+)", RegexOptions.IgnoreCase); tagRegEx = new Regex("/" + Utils.GetTagUrlName(portalSettings).ToLower() + "/(.+)(\\.aspx$|\\.aspx?.+)", RegexOptions.IgnoreCase); if ((questionRegEx.IsMatch(url.ToLower()) && !questionRegEx.Match(url.ToLower()).Groups[1].Value.Contains("/")) || (tagRegEx.IsMatch(url.ToLower()) && !tagRegEx.Match(url.ToLower()).Groups[1].Value.Contains("/"))) { string questionTitle; string tagName; // JS 1/25/12: This check is for removing the .aspx from the question and tags. // There appears to be conflicts between IIS7.5 installations that need to be address //if (HttpRuntime.UsingIntegratedPipeline) //{ // questionRegEx = new Regex("/Question/([0-9]+)/(.+)", RegexOptions.IgnoreCase); // tagRegEx = new Regex("/Tag/(.+)", RegexOptions.IgnoreCase); //} //else //{ // questionRegEx = new Regex("/Question/([0-9]+)/(.+)\\.aspx$", RegexOptions.IgnoreCase); // tagRegEx = new Regex("/Tag/(.+)\\.aspx$", RegexOptions.IgnoreCase); //} var albumCtr = new AlbumController(); var tInfo = Utils.GetTabFromUrl(portalSettings); if (tInfo != null && Utils.IsModuleOnTab(tInfo.TabID)) { var match = questionRegEx.Match(url); String relativePath; if (match.Success) { var questionId = Int32.Parse(match.Groups[1].Value); questionTitle = match.Groups[2].Value; if (tInfo != null) { AlbumInfo qInfo = albumCtr.GetAlbum(questionId, portalSettings.PortalId); if (qInfo != null) { if (Utils.CreateFriendlySlug(qInfo.AlbumName).ToLower() == questionTitle.ToLower()) { relativePath = Links.ViewQuestion(questionId, tInfo.TabID, portalSettings).Replace("http://", "").Replace("https://", "").Replace(objPortalAlias.HTTPAlias.Contains("/") ? objPortalAlias.HTTPAlias.Substring(0, objPortalAlias.HTTPAlias.IndexOf("/")) : objPortalAlias.HTTPAlias, ""); context.RewritePath(relativePath); return; } context.Response.Status = "301 Moved Permanently"; context.Response.RedirectLocation = Links.ViewQuestion(questionId, qInfo.AlbumName, tInfo, portalSettings); } } } match = tagRegEx.Match(url); if (match.Success) { tagName = match.Groups[1].Value; tagName = tagName.Replace("-", " "); relativePath = Links.ViewTaggedQuestions(tagName, tInfo.TabID, portalSettings).Replace("http://", "").Replace("https://", "").Replace(objPortalAlias.HTTPAlias.Contains("/") ? objPortalAlias.HTTPAlias.Substring(0, objPortalAlias.HTTPAlias.IndexOf("/")) : objPortalAlias.HTTPAlias, ""); context.RewritePath(relativePath); return; } } } } } } catch (Exception ex) { DotNetNuke.Services.Exceptions.Exceptions.LogException(ex); } }