Ejemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="colSettings"></param>
        /// <param name="portalId"></param>
        /// <returns></returns>
        public static List <QaSettingInfo> GetOpThresholdCollection(List <SettingInfo> colSettings, int portalId)
        {
            // determine if operational threshold settings exist for this portal
            var colOpThreshSettings = (from t in colSettings where t.TypeId == (int)Constants.SettingTypes.OperationalThresholds select t);
            var colOpThresholds     = new List <QaSettingInfo>();

            switch (colOpThreshSettings.Count())
            {
            case 0:
                colOpThresholds.Add(BuildOpThreshold(Constants.OpThresholds.PostChangeVoteWindowMinutes.ToString(), Constants.DefaultOpPostChangeVoteWindowMinutes));
                colOpThresholds.Add(BuildOpThreshold(Constants.OpThresholds.PostFlagCompleteCount.ToString(), Constants.DefaultOpPostFlagCompleteCount));
                colOpThresholds.Add(BuildOpThreshold(Constants.OpThresholds.PostFlagWindowHours.ToString(), Constants.DefaultOpPostFlagWindowHours));
                colOpThresholds.Add(BuildOpThreshold(Constants.OpThresholds.QuestionCloseCompleteVoteCount.ToString(), Constants.DefaultOpQuestionCloseCompleteVoteCount));
                colOpThresholds.Add(BuildOpThreshold(Constants.OpThresholds.QuestionCloseWindowDays.ToString(), Constants.DefaultOpQuestionCloseWindowDays));
                colOpThresholds.Add(BuildOpThreshold(Constants.OpThresholds.QuestionFlagHomeRemoveCount.ToString(), Constants.DefaultOpQuestionFlagHomeRemoveCount));
                colOpThresholds.Add(BuildOpThreshold(Constants.OpThresholds.TagCloseWindowDays.ToString(), Constants.DefaultOpTagCloseWindowDays));
                colOpThresholds.Add(BuildOpThreshold(Constants.OpThresholds.TagFlagCompleteCount.ToString(), Constants.DefaultOpTagFlagCompleteCount));
                colOpThresholds.Add(BuildOpThreshold(Constants.OpThresholds.TagFlagWindowHours.ToString(), Constants.DefaultOpTagFlagWindowHours));
                colOpThresholds.Add(BuildOpThreshold(Constants.OpThresholds.TermSynonymApproveCount.ToString(), Constants.DefaultOpTermSynonymApproveCount));
                colOpThresholds.Add(BuildOpThreshold(Constants.OpThresholds.TermSynonymRejectCount.ToString(), Constants.DefaultOpTermSynonymRejectCount));
                colOpThresholds.Add(BuildOpThreshold(Constants.OpThresholds.TermSynonymMaxCount.ToString(), Constants.DefaultOpTermSynonymMaxCount));
                colOpThresholds.Add(BuildOpThreshold(Constants.OpThresholds.UserCloseVoteCount.ToString(), Constants.DefaultOpUserCloseVoteCount));
                colOpThresholds.Add(BuildOpThreshold(Constants.OpThresholds.UserFlagPostModerateCount.ToString(), Constants.DefaultOpUserFlagPostModerateCount));
                colOpThresholds.Add(BuildOpThreshold(Constants.OpThresholds.UserFlagPostSpamCount.ToString(), Constants.DefaultOpUserFlagPostSpamCount));
                colOpThresholds.Add(BuildOpThreshold(Constants.OpThresholds.UserTermSynonymCreateMinAnswerCount.ToString(), Constants.DefaultOpUserTermSynonymCreateMinAnswerCount));
                colOpThresholds.Add(BuildOpThreshold(Constants.OpThresholds.UserTermSynonymVoteMinAnswerScoreCount.ToString(), Constants.DefaultOpUserTermSynonymVoteMinAnswerScoreCount));
                colOpThresholds.Add(BuildOpThreshold(Constants.OpThresholds.UserUpVoteAnswerCount.ToString(), Constants.DefaultOpUserUpVoteAnswerCount));
                colOpThresholds.Add(BuildOpThreshold(Constants.OpThresholds.UserUpVoteQuestionCount.ToString(), Constants.DefaultOpUserUpVoteQuestionCount));
                colOpThresholds.Add(BuildOpThreshold(Constants.OpThresholds.QuestionHomeMinScore.ToString(), Constants.DefaultOpHomeQuestionMinScore));
                break;

            case 19:
                var objNewSetting = new SettingInfo
                {
                    PortalId = portalId,
                    TypeId   = (int)Constants.SettingTypes.OperationalThresholds,
                    Key      = Constants.OpThresholds.QuestionHomeMinScore.ToString(),
                    Value    = Constants.DefaultOpHomeQuestionMinScore.ToString()
                };

                var cntQa = new DnnqaController();
                cntQa.UpdateQaPortalSetting(objNewSetting);

                DataCache.RemoveCache(Constants.ModuleCacheKey + Constants.QaSettingsCacheKey + portalId);

                colOpThreshSettings = (from t in colSettings where t.TypeId == (int)Constants.SettingTypes.OperationalThresholds select t);
                colOpThresholds.AddRange(colOpThreshSettings.Select(objSetting => BuildOpThreshold(objSetting.Key, Convert.ToInt32(objSetting.Value))));
                break;

            default:
                colOpThresholds.AddRange(colOpThreshSettings.Select(objSetting => BuildOpThreshold(objSetting.Key, Convert.ToInt32(objSetting.Value))));
                break;
            }

            return(colOpThresholds);
        }
Ejemplo n.º 2
0
        private static IDnnqaController GetQaController(IDataProvider repository)
        {
            var ctl = ComponentFactory.GetComponent <IDnnqaController>();

            if (ctl == null)
            {
                ctl = new DnnqaController(repository);
                ComponentFactory.RegisterComponentInstance <IDnnqaController>(ctl);
            }
            return(ctl);
        }
Ejemplo n.º 3
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 DnnqaController();
            var colEntries = cntQa.GetSitemapQuestions(portalID);
            var urls       = new List <SitemapUrl>();

            foreach (var objQuestion in colEntries)
            {
                urls.Add(GetQuestionUrl(objQuestion, ps));
            }

            return(urls);
        }
Ejemplo n.º 4
0
        /// <summary>
        ///
        /// </summary>
        private void BuildQaPortalSettings()
        {
            var cntQa           = new DnnqaController();
            var colOpThresholds = QaSettings.GetOpThresholdCollection(cntQa.GetQaPortalSettings(ModuleContext.PortalId), ModuleContext.PortalId);

            dntbQCCVC.Text    = colOpThresholds.Single(s => s.Key == Constants.OpThresholds.QuestionCloseCompleteVoteCount.ToString()).Value.ToString();
            dntbQCWD.Text     = colOpThresholds.Single(s => s.Key == Constants.OpThresholds.QuestionCloseWindowDays.ToString()).Value.ToString();
            dntbQFHRC.Text    = colOpThresholds.Single(s => s.Key == Constants.OpThresholds.QuestionFlagHomeRemoveCount.ToString()).Value.ToString();
            dntbPCVWM.Text    = colOpThresholds.Single(s => s.Key == Constants.OpThresholds.PostChangeVoteWindowMinutes.ToString()).Value.ToString();
            dntbPFCC.Text     = colOpThresholds.Single(s => s.Key == Constants.OpThresholds.PostFlagCompleteCount.ToString()).Value.ToString();
            dntbPFWH.Text     = colOpThresholds.Single(s => s.Key == Constants.OpThresholds.PostFlagWindowHours.ToString()).Value.ToString();
            dntbTCWD.Text     = colOpThresholds.Single(s => s.Key == Constants.OpThresholds.TagCloseWindowDays.ToString()).Value.ToString();
            dntbTFWH.Text     = colOpThresholds.Single(s => s.Key == Constants.OpThresholds.TagFlagWindowHours.ToString()).Value.ToString();
            dntbTFCC.Text     = colOpThresholds.Single(s => s.Key == Constants.OpThresholds.TagFlagCompleteCount.ToString()).Value.ToString();
            dntbTSAC.Text     = colOpThresholds.Single(s => s.Key == Constants.OpThresholds.TermSynonymApproveCount.ToString()).Value.ToString();
            dntbTSRC.Text     = colOpThresholds.Single(s => s.Key == Constants.OpThresholds.TermSynonymRejectCount.ToString()).Value.ToString();
            dntbTSMC.Text     = colOpThresholds.Single(s => s.Key == Constants.OpThresholds.TermSynonymMaxCount.ToString()).Value.ToString();
            dntbUCVC.Text     = colOpThresholds.Single(s => s.Key == Constants.OpThresholds.UserCloseVoteCount.ToString()).Value.ToString();
            dntbUFPMC.Text    = colOpThresholds.Single(s => s.Key == Constants.OpThresholds.UserFlagPostModerateCount.ToString()).Value.ToString();
            dntbFPSC.Text     = colOpThresholds.Single(s => s.Key == Constants.OpThresholds.UserFlagPostSpamCount.ToString()).Value.ToString();
            dntbUTSCMAC.Text  = colOpThresholds.Single(s => s.Key == Constants.OpThresholds.UserTermSynonymCreateMinAnswerCount.ToString()).Value.ToString();
            dntbUTSVMASC.Text = colOpThresholds.Single(s => s.Key == Constants.OpThresholds.UserTermSynonymVoteMinAnswerScoreCount.ToString()).Value.ToString();
            dntbUUVAC.Text    = colOpThresholds.Single(s => s.Key == Constants.OpThresholds.UserUpVoteAnswerCount.ToString()).Value.ToString();
            dntbUUVQC.Text    = colOpThresholds.Single(s => s.Key == Constants.OpThresholds.UserUpVoteQuestionCount.ToString()).Value.ToString();
            dntbQHMS.Text     = colOpThresholds.Single(s => s.Key == Constants.OpThresholds.QuestionHomeMinScore.ToString()).Value.ToString();

            var colEmail     = QaSettings.GetEmailCollection(cntQa.GetQaPortalSettings(ModuleContext.PortalId), ModuleContext.PortalId);
            var currentEmail = colEmail.Single(s => s.Key == Constants.EmailSettings.FromAddress.ToString()).Value;

            txtbxFromEmail.Text = currentEmail != @"*****@*****.**" ? currentEmail : ModuleContext.PortalSettings.Email;

            var commentTemplate = colEmail.Single(s => s.Key == Constants.EmailSettings.CommentTemplate.ToString()).Value;

            txtbxCommentEmailTemplate.Text = commentTemplate;

            var singleQuestion = colEmail.Single(s => s.Key == Constants.EmailSettings.SingleQuestionTemplate.ToString()).Value;

            txtbxQuestionEmailTemplate.Text = singleQuestion;

            var answerTemplate = colEmail.Single(s => s.Key == Constants.EmailSettings.AnswerTemplate.ToString()).Value;

            txtAnswerEmailTemplate.Text = answerTemplate;

            var summaryTemplate = colEmail.Single(s => s.Key == Constants.EmailSettings.SummaryTemplate.ToString()).Value;

            txtbxSummaryEmailTemplate.Text = summaryTemplate;
        }
Ejemplo n.º 5
0
        /// <summary>
        ///
        /// </summary>
        private void UpdateQaPortalSettings()
        {
            var cntQa      = new DnnqaController();
            var objSetting = new SettingInfo
            {
                PortalId = ModuleContext.PortalId,
                TypeId   = (int)Constants.SettingTypes.OperationalThresholds,
                Key      = Constants.OpThresholds.QuestionCloseCompleteVoteCount.ToString(),
                Value    = dntbQCCVC.Text
            };

            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.OpThresholds.QuestionCloseWindowDays.ToString();
            objSetting.Value = dntbQCWD.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.OpThresholds.QuestionFlagHomeRemoveCount.ToString();
            objSetting.Value = dntbQFHRC.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.OpThresholds.PostChangeVoteWindowMinutes.ToString();
            objSetting.Value = dntbPCVWM.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.OpThresholds.PostFlagCompleteCount.ToString();
            objSetting.Value = dntbPFCC.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.OpThresholds.PostFlagWindowHours.ToString();
            objSetting.Value = dntbPFWH.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.OpThresholds.TagCloseWindowDays.ToString();
            objSetting.Value = dntbTCWD.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.OpThresholds.TagFlagWindowHours.ToString();
            objSetting.Value = dntbTFWH.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.OpThresholds.TagFlagCompleteCount.ToString();
            objSetting.Value = dntbTFCC.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.OpThresholds.TermSynonymApproveCount.ToString();
            objSetting.Value = dntbTSAC.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.OpThresholds.TermSynonymRejectCount.ToString();
            objSetting.Value = dntbTSRC.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.OpThresholds.TermSynonymMaxCount.ToString();
            objSetting.Value = dntbTSMC.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.OpThresholds.UserCloseVoteCount.ToString();
            objSetting.Value = dntbUCVC.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.OpThresholds.UserFlagPostModerateCount.ToString();
            objSetting.Value = dntbUFPMC.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.OpThresholds.UserFlagPostSpamCount.ToString();
            objSetting.Value = dntbFPSC.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.OpThresholds.UserTermSynonymCreateMinAnswerCount.ToString();
            objSetting.Value = dntbUTSCMAC.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.OpThresholds.UserTermSynonymVoteMinAnswerScoreCount.ToString();
            objSetting.Value = dntbUTSVMASC.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.OpThresholds.UserUpVoteAnswerCount.ToString();
            objSetting.Value = dntbUUVAC.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.OpThresholds.UserUpVoteQuestionCount.ToString();
            objSetting.Value = dntbUUVQC.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.OpThresholds.QuestionHomeMinScore.ToString();
            objSetting.Value = dntbQHMS.Text;
            cntQa.UpdateQaPortalSetting(objSetting);


            objSetting.TypeId = (int)Constants.SettingTypes.Email;

            objSetting.Key   = Constants.EmailSettings.FromAddress.ToString();
            objSetting.Value = txtbxFromEmail.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.EmailSettings.CommentTemplate.ToString();
            objSetting.Value = txtbxCommentEmailTemplate.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.EmailSettings.SingleQuestionTemplate.ToString();
            objSetting.Value = txtbxQuestionEmailTemplate.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.EmailSettings.AnswerTemplate.ToString();
            objSetting.Value = txtAnswerEmailTemplate.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            objSetting.Key   = Constants.EmailSettings.SummaryTemplate.ToString();
            objSetting.Value = txtbxSummaryEmailTemplate.Text;
            cntQa.UpdateQaPortalSetting(objSetting);

            // handle cache clearing
            DataCache.RemoveCache(Constants.ModuleCacheKey + Constants.QaSettingsCacheKey + ModuleContext.PortalId);
            DataCache.RemoveCache(Constants.ModuleCacheKey + Constants.HomeQuestionsCacheKey + ModuleContext.ModuleId);
            DataCache.RemoveCache(Constants.ModuleCacheKey + Constants.HomeTermsCacheKey + ModuleContext.ModuleId);
        }
Ejemplo n.º 6
0
 public List<TermInfo> QaTerms(int vocabularyId)
 {
     var controller = new DnnqaController();
         return controller.GetTermsByContentItem(ContentItemId, vocabularyId);
 }
Ejemplo n.º 7
0
        public List <TermInfo> QaTerms(int vocabularyId)
        {
            var controller = new DnnqaController();

            return(controller.GetTermsByContentItem(ContentItemId, vocabularyId));
        }
Ejemplo n.º 8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="colSettings"></param>
        /// <param name="portalId"></param>
        /// <returns></returns>
        public static List <QaSettingInfo> GetUserScoringCollection(List <SettingInfo> colSettings, int portalId)
        {
            // determine if user scoring action settings exist for this portal
            var colUserScoringSettings = (from t in colSettings where t.TypeId == (int)Constants.SettingTypes.UserScoringActionValue select t);
            var x = colUserScoringSettings.Count();

            var colScoringActions = new List <QaSettingInfo>();

            switch (colUserScoringSettings.Count())
            {
            case 0:
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.AdminEntered.ToString(), Constants.DefaultScoreAdminEntered));     // static 0
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.ApprovedPostEdit.ToString(), Constants.DefaultScoreApprovedPostEdit));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.ApprovedTagEdit.ToString(), Constants.DefaultScoreApprovedTagEdit));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.AskedFlaggedQuestion.ToString(), Constants.DefaultScoreAskedFlaggedQuestion));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.AskedQuestion.ToString(), Constants.DefaultScoreAskedQuestion));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.AskedQuestionVotedDown.ToString(), Constants.DefaultScoreAskedQuestionVotedDown));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.AskedQuestionVotedUp.ToString(), Constants.DefaultScoreAskedQuestionVotedUp));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.BountyPaid.ToString(), Constants.DefaultScoreBountyPaid));         // static 0
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.BountyReceived.ToString(), Constants.DefaultScoreBountyReceived)); // static 0
                //createtag
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.CreatedTagSynonym.ToString(), Constants.DefaultScoreCreatedTagSynonym));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.Commented.ToString(), Constants.DefaultScoreCommented));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.EditedPost.ToString(), Constants.DefaultScoreEditedPost));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.EditedTag.ToString(), Constants.DefaultScoreEditedTag));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.EditedTagVotedDown.ToString(), Constants.DefaultScoreEditedTagVotedDown));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.EditedTagVotedUp.ToString(), Constants.DefaultScoreEditedTagVotedUp));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.FirstLoggedInView.ToString(), Constants.DefaultScoreFirstLoggedInView));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.ProvidedAcceptedAnswer.ToString(), Constants.DefaultScoreProvidedAcceptedAnswer));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.ProvidedAnswer.ToString(), Constants.DefaultScoreProvidedAnswer));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.ProvidedAnswerVotedDown.ToString(), Constants.DefaultScoreProvidedAnswerVotedDown));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.ProvidedAnswerVotedUp.ToString(), Constants.DefaultScoreProvidedAnswerVotedUp));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.ProvidedFlaggedAnswer.ToString(), Constants.DefaultScoreProvidedFlaggedAnswer));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.VotedDownAnswer.ToString(), Constants.DefaultScoreVotedDownAnswer));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.VotedDownQuestion.ToString(), Constants.DefaultScoreVotedDownQuestion));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.VotedSynonymDown.ToString(), Constants.DefaultScoreVotedSynonymDown));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.VotedSynonymUp.ToString(), Constants.DefaultScoreVotedSynonymUp));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.VotedTagDown.ToString(), Constants.DefaultScoreVotedTagDown));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.VotedTagUp.ToString(), Constants.DefaultScoreVotedTagUp));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.VotedUpAnswer.ToString(), Constants.DefaultScoreVotedUpAnswer));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.VotedUpQuestion.ToString(), Constants.DefaultScoreVotedUpQuestion));
                colScoringActions.Add(BuildUserScore(Constants.UserScoringActions.AcceptedQuestionAnswer.ToString(), Constants.DefaultScoreAcceptedAnswer));     // new
                break;

            case 29:
                var objNewSetting = new SettingInfo
                {
                    PortalId = portalId,
                    TypeId   = (int)Constants.SettingTypes.UserScoringActionValue,
                    Key      = Constants.UserScoringActions.AcceptedQuestionAnswer.ToString(),
                    Value    = Constants.DefaultScoreAcceptedAnswer.ToString()
                };

                var cntQa = new DnnqaController();
                cntQa.UpdateQaPortalSetting(objNewSetting);

                DataCache.RemoveCache(Constants.ModuleCacheKey + Constants.QaSettingsCacheKey + portalId);

                colUserScoringSettings = (from t in colSettings where t.TypeId == (int)Constants.SettingTypes.UserScoringActionValue select t);
                colScoringActions.AddRange(colUserScoringSettings.Select(objSetting => BuildUserScore(objSetting.Key, Convert.ToInt32(objSetting.Value))));
                break;

            default:
                colScoringActions.AddRange(colUserScoringSettings.Select(objSetting => BuildUserScore(objSetting.Key, Convert.ToInt32(objSetting.Value))));
                break;
            }

            return(colScoringActions);
        }
Ejemplo n.º 9
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 dnnqa = new DnnqaController();
                            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)
                                    {
                                        QuestionInfo qInfo = dnnqa.GetQuestion(questionId, portalSettings.PortalId);

                                        if (qInfo != null)
                                        {
                                            if (Utils.CreateFriendlySlug(qInfo.Title).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.Title, 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);
            }
        }