/// <summary> /// /// </summary> /// <param name="pageSize"></param> /// <param name="tagMode"></param> /// <param name="resultsCollection"></param> /// <returns></returns> internal static IEnumerable<TermInfo> GetHomeTermCollection(int pageSize, Constants.TagMode tagMode, IEnumerable<TermInfo> resultsCollection) { switch (tagMode) { case Constants.TagMode.ShowDailyUsage: return (from t in resultsCollection orderby t.DayTermUsage descending, t.Name ascending select t).Skip(0).Take(pageSize); case Constants.TagMode.ShowWeeklyUsage: return (from t in resultsCollection orderby t.WeekTermUsage descending, t.Name ascending select t).Skip(0).Take(pageSize); case Constants.TagMode.ShowMonthlyUsage: return (from t in resultsCollection orderby t.MonthTermUsage descending, t.Name ascending select t).Skip(0).Take(pageSize); default: // total return (from t in resultsCollection orderby t.TotalTermUsage descending, t.Name ascending select t).Skip(0).Take(pageSize); } }
/// <summary> /// /// </summary> /// <returns></returns> private string GenerateNotifications(DateTime lastRunDate, DateTime currentRunDate, Constants.SubscriptionType subType) { var strErrors = ""; // based on subscription type, generate list of content additions to email switch (subType) { case Constants.SubscriptionType.DailyTerm: // daily term (all questions created between dates) // This email is going to be user specific, so we need to start w/ a list of subscribers (based on type daily term); each user can have multiple terms // -- select all questions where // we retrieve a collection of questions, each question will have a contentItem associated with it (we only retrieve stuff not voted out) // we need to retrieve a collection of terms, based on content item collection from above strErrors = "Daily Term: Sent " + 0 + " emails <br />"; break; case Constants.SubscriptionType.InstantTerm: var typeController = new ContentTypeController(); var colContentTypes = (from t in typeController.GetContentTypes() where t.ContentType == Constants.ContentTypeName select t); if (colContentTypes.Count() > 0) { var contentType = colContentTypes.Single(); var colContentItems = Controller.GetContentItemsByTypeAndCreated(contentType.ContentTypeId, lastRunDate, currentRunDate); foreach (var item in colContentItems) { // we are using the question object because content item doesn't have a title association yet (for core integration) var objQuestion = Controller.GetQuestionByContentItem(item.ContentItemId); if (objQuestion != null) { // use the content item to build the email subject/body/content (sub question for content item now) var colEmail = QaSettings.GetEmailCollection(Controller.GetQaPortalSettings(objQuestion.PortalId), objQuestion.PortalId); var senderEmail = colEmail.Single(s => s.Key == Constants.EmailSettings.FromAddress.ToString()).Value; //var urlBase = colEmail.Single(s => s.Key == Constants.EmailSettings.PrimaryUrl.ToString()).Value; var questionTemplate = colEmail.Single(s => s.Key == Constants.EmailSettings.SingleQuestionTemplate.ToString()).Value; var ps = new PortalSettings(objQuestion.PortalId); var titleLink = "http://" + ps.DefaultPortalAlias + "/tabid/" + objQuestion.TabID + "/view/question/id/" + objQuestion.PostId + "/" + DotNetNuke.Common.Globals.glbDefaultPage; var subscribeLink = "http://" + ps.DefaultPortalAlias + "/tabid/" + objQuestion.TabID + "/view/subscriptions/" + DotNetNuke.Common.Globals.glbDefaultPage; var terms = ""; var i = 0; foreach (var t in objQuestion.Terms) { terms += t.Name; i += 1; if (objQuestion.Terms.Count != i) { terms += ", "; } } questionTemplate = questionTemplate.Replace("[AUTHOR]", objQuestion.CreatedByDisplayName); questionTemplate = questionTemplate.Replace("[TERMS]", terms); questionTemplate = questionTemplate.Replace("[TITLELINK]", titleLink); questionTemplate = questionTemplate.Replace("[TITLE]", objQuestion.Title); questionTemplate = questionTemplate.Replace("[BODY]", Utils.ProcessDisplayPostBody(objQuestion.Body)); questionTemplate = questionTemplate.Replace("[SUBSCRIBELINK]", subscribeLink); var colSubscribers = Controller.GetSubscribersByContentItem(item.ContentItemId, (int)Constants.SubscriptionType.InstantTerm, objQuestion.PortalId); foreach (var subscriber in colSubscribers) { // send off the email one by one (same email to multiple subscribers) Mail.SendMail(senderEmail, subscriber.Email, "", "", MailPriority.Normal, HtmlUtils.StripWhiteSpace(objQuestion.Title, true), MailFormat.Html, Encoding.UTF8, questionTemplate, "", Host.SMTPServer, Host.SMTPAuthentication, Host.SMTPUsername, Host.SMTPPassword, Host.EnableSMTPSSL); } strErrors = "Instant Term: Sent " + colSubscribers.Count + " emails - " + objQuestion.Title + "<br />"; } } } else { strErrors = "Instant Term: No email to send <br />"; } break; default: var colAnswers = Controller.GetAnswersByDate(lastRunDate, currentRunDate); if (colAnswers.Count() > 0) { // for each content item in the collection, get a list of subscribers and send the emails off one by one. foreach (var item in colAnswers) { var objQuestion = Controller.GetQuestionByContentItem(item.ContentItemId); // use the post item to build the email subject/body/content (sub question for content item now) var colEmail = QaSettings.GetEmailCollection(Controller.GetQaPortalSettings(item.PortalId), item.PortalId); var senderEmail = colEmail.Single(s => s.Key == Constants.EmailSettings.FromAddress.ToString()).Value; //var urlBase = colEmail.Single(s => s.Key == Constants.EmailSettings.PrimaryUrl.ToString()).Value; var answerTemplate = colEmail.Single(s => s.Key == Constants.EmailSettings.AnswerTemplate.ToString()).Value; var ps = new PortalSettings(item.PortalId); var titleLink = "http://" + ps.DefaultPortalAlias + "/tabid/" + objQuestion.TabID + "/view/question/id/" + objQuestion.PostId + "/" + DotNetNuke.Common.Globals.glbDefaultPage; var subscribeLink = "http://" + ps.DefaultPortalAlias + "/tabid/" + objQuestion.TabID + "/view/subscriptions/" + DotNetNuke.Common.Globals.glbDefaultPage; answerTemplate = answerTemplate.Replace("[AUTHOR]", item.PostCreatedDisplayName); answerTemplate = answerTemplate.Replace("[TITLELINK]", titleLink); answerTemplate = answerTemplate.Replace("[TITLE]", objQuestion.Title); answerTemplate = answerTemplate.Replace("[BODY]", Utils.ProcessDisplayPostBody(item.Body)); answerTemplate = answerTemplate.Replace("[SUBSCRIBELINK]", subscribeLink); var colSubscribers = Controller.GetSubscribersByQuestion(item.ParentId, (int)Constants.SubscriptionType.InstantPost, item.PortalId); foreach (var subscriber in colSubscribers) { // send off the email one by one (same email to multiple subscribers) Mail.SendMail(senderEmail, subscriber.Email, "", "", MailPriority.Normal, HtmlUtils.StripWhiteSpace(objQuestion.Title, true), MailFormat.Html, Encoding.UTF8, answerTemplate, "", Host.SMTPServer, Host.SMTPAuthentication, Host.SMTPUsername, Host.SMTPPassword, Host.EnableSMTPSSL); } strErrors = "Instant Post: Sent " + colSubscribers.Count + " emails - " + objQuestion.Title + "<br />"; } } else { strErrors = "Instant Post: No new answers to email <br />"; } // now we move onto comments var colComments = Controller.GetCommentsByDate(lastRunDate, currentRunDate); if (colComments.Count() > 0) { foreach (var item in colComments) { var objPost = Controller.GetPost(item.PostId, -1); var ps = new PortalSettings(objPost.PortalId); var objQuestion = objPost.ParentId == 0 ? objPost : Controller.GetQuestionByContentItem(objPost.ContentItemId); var colEmail = QaSettings.GetEmailCollection(Controller.GetQaPortalSettings(objQuestion.PortalId), objPost.PortalId); var commentTemplate = colEmail.Single(s => s.Key == Constants.EmailSettings.CommentTemplate.ToString()).Value; var senderEmail = colEmail.Single(s => s.Key == Constants.EmailSettings.FromAddress.ToString()).Value; var titleLink = "http://" + ps.DefaultPortalAlias + "/tabid/" + objQuestion.TabID + "/view/question/id/" + objQuestion.PostId + "/" + DotNetNuke.Common.Globals.glbDefaultPage; var subscribeLink = "http://" + ps.DefaultPortalAlias + "/tabid/" + objQuestion.TabID + "/view/subscriptions/" + DotNetNuke.Common.Globals.glbDefaultPage; commentTemplate = commentTemplate.Replace("[AUTHOR]", DotNetNuke.Entities.Users.UserController.GetUserById(objQuestion.PortalId, item.UserId).DisplayName); commentTemplate = commentTemplate.Replace("[TITLELINK]", titleLink); commentTemplate = commentTemplate.Replace("[TITLE]", objQuestion.Title); commentTemplate = commentTemplate.Replace("[COMMENT]", Utils.ProcessDisplayPostBody(item.Comment)); commentTemplate = commentTemplate.Replace("[SUBSCRIBELINK]", subscribeLink); var colSubscribers = Controller.GetSubscribersByQuestion(objQuestion.PostId, (int)Constants.SubscriptionType.InstantPost, objQuestion.PortalId); foreach (var subscriber in colSubscribers) { // send off the email one by one (same email to multiple subscribers) Mail.SendMail(senderEmail, subscriber.Email, "", "", MailPriority.Normal, HtmlUtils.StripWhiteSpace(objQuestion.Title, true), MailFormat.Html, Encoding.UTF8, commentTemplate, "", Host.SMTPServer, Host.SMTPAuthentication, Host.SMTPUsername, Host.SMTPPassword, Host.EnableSMTPSSL); } // we also have to remember to check if we emailed notification of a comment around this question already (only within this method, to avoid to comments on question being emailed 2x). // also avoid emailing someone of their own comment } } else { strErrors = "Instant Post: No new comments to email <br />"; } break; } return strErrors; }