コード例 #1
0
        /// <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;
        }
コード例 #2
0
        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;
        }
コード例 #3
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);
            }
        }