protected void ButtonPostComment_Click(object sender, EventArgs e) { // check the Honeypot if (TextBoxPhone.Text == string.Empty && this.InstanceGuid != Guid.Empty) { int indexUrl = Request.Url.AbsoluteUri.IndexOf(":" + Request.Url.Port.ToString()); if (indexUrl <= 0) { indexUrl = Request.Url.AbsoluteUri.IndexOf(Request.Url.AbsolutePath); } string siteUrl = Request.Url.AbsoluteUri.Substring(0, indexUrl) + Request.ApplicationPath + "/"; using (MainDataSetTableAdapters.CommentTableAdapter taComment = new MainDataSetTableAdapters.CommentTableAdapter()) { Organization currOrganization = null; MainDataSet.Mc_InstanceRow currInstance = null; using (MainDataSetTableAdapters.Mc_InstanceTableAdapter taInstance = new MainDataSetTableAdapters.Mc_InstanceTableAdapter()) { MainDataSet.Mc_InstanceDataTable instances = taInstance.GetDataByInstanceId(this.InstanceGuid); if (instances.Count > 0) { currInstance = instances[0]; currOrganization = Micajah.Common.Bll.Providers.OrganizationProvider.GetOrganization(currInstance.OrganizationId); } } DateTime dtNow = DateTime.Now; if (this.ArticleGuid == Guid.Empty) { // create a reqest Guid newId = Guid.NewGuid(); // create a request if (this.ArticleTableAdapter.Insert(newId, this.InstanceGuid, new Guid?(), ArticleType.Request.ToString(), (this.AlternateId != string.Empty) ? this.AlternateId : HttpUtility.HtmlEncode(Utils.ShortCommentText(TextBoxComment.Text, 50)), (string)this.GetLocalResourceObject("BodyNotArticle"), string.Empty, 0, 0, 0, false, new DateTime?(), new DateTime?(), new DateTime?(), new Guid?(), new Guid?(), new Guid?()) > 0) { MainDataSet.CommentDataTable commentDataTable = taComment.InsertComment(newId, TextBoxName.Text, TextBoxEmail.Text, string.Format("{0} ({1})", Request.UserHostName, Request.UserHostAddress), HttpUtility.HtmlEncode(Utils.ShortCommentText(TextBoxComment.Text, 50)), HttpUtility.HtmlEncode(TextBoxComment.Text), false, true, DateTime.Now, true); if (commentDataTable != null && commentDataTable.Rows.Count > 0) { if (CommentPosted != null) { CommentPosted(this, new ArticleEventArgs(newId, true)); } if (currOrganization != null && currInstance != null) { string subj; Micajah.Common.Dal.OrganizationDataSet.UserDataTable users = Micajah.Common.Bll.Providers.UserProvider.GetUsers( currOrganization.OrganizationId, this.InstanceGuid, new string[] { "InstAdmin" }); ArrayList admins = new ArrayList(); ArrayList SendTo = new ArrayList(); admins.AddRange(this.InputListAdmin); foreach (Micajah.Common.Dal.OrganizationDataSet.UserRow row in users) { admins.Add(row.Email); } SendTo.AddRange(admins); MainDataSetTableAdapters.EmailsTableAdapter emailsTableAdapter = new MainDataSetTableAdapters.EmailsTableAdapter(); foreach (DataRow row in emailsTableAdapter.GetArticleEmails(ArticleGuid).Rows) { if (!SendTo.Contains(row["UserEmail"].ToString())) { SendTo.Add(row["UserEmail"].ToString()); } } foreach (DataRow row in emailsTableAdapter.GetUnsubscribedEmails(ArticleGuid, this.InstanceGuid).Rows) { SendTo.Remove(row["UserEmail"].ToString()); } string SendToList = string.Empty; bool separated = false; for (int i = 0; i < SendTo.Count; i++) { if (!separated && !admins.Contains(SendTo[i].ToString())) { SendToList += "<br><br>Commentors:<br>" + SendTo[i].ToString(); separated = true; } else { SendToList += ", " + SendTo[i].ToString(); } } SendToList = SendToList.Remove(0, 1); if (SendTo.Count > 0) { for (int i = 0; i < SendTo.Count; i++) { subj = (this.AlternateId != string.Empty) ? this.AlternateId : HttpUtility.HtmlEncode(Utils.ShortCommentText(TextBoxComment.Text, 50)); StringBuilder body = new StringBuilder((string)this.GetLocalResourceObject("EmailBody_Request")); body.Replace("{OrgName}", currOrganization.Name); body.Replace("{InstName}", currInstance.Name); body.Replace("{ArticleName}", subj); body.Replace("{ArticleUrl}", siteUrl + string.Format(CultureInfo.CurrentCulture, "?i={0}&t={1}", this.InstanceGuid.ToString("N"), newId.ToString("N"))); body.Replace("{ArticleText}", HttpUtility.HtmlEncode(TextBoxComment.Text)); body.Replace("{AuthorName}", TextBoxName.Text); body.Replace("{AuthorEmail}", string.IsNullOrEmpty(TextBoxEmail.Text) ? string.Empty : string.Format(CultureInfo.CurrentCulture, "<a href=\"mailto:{0}\" target=\"_blank\">{0}</a>", TextBoxEmail.Text)); body.Replace("{ImageUrl}", siteUrl + Micajah.Common.Configuration.FrameworkConfiguration.Current.WebApplication.Copyright.CompanyLogoImageUrl); if (body.Length > 0) { string encrypted = Utils.Encrypt(String.Format("{0}&{1}&{2}&{3}&{4}", SendTo[i].ToString(), 1, commentDataTable[0].CommentId.ToString(CultureInfo.InvariantCulture), InstanceGuid.ToString(), UserContext.SelectedOrganizationId.ToString()), "Dshd*&^*@dsdss", "237w&@2d", "SHA1", 2, "&s2hfyDjuf372*73", 256); string url = siteUrl + String.Format("Unsubscribe.aspx?token={0}", encrypted); body.Replace("{UnsubscribeFromArticleUrl}", url); encrypted = Utils.Encrypt(String.Format("{0}&{1}&{2}&{3}&{4}", SendTo[i].ToString(), 2, commentDataTable[0].CommentId.ToString(CultureInfo.InvariantCulture), InstanceGuid.ToString(), UserContext.SelectedOrganizationId.ToString()), "Dshd*&^*@dsdss", "237w&@2d", "SHA1", 2, "&s2hfyDjuf372*73", 256); url = siteUrl + String.Format("Unsubscribe.aspx?token={0}", encrypted); body.Replace("{UnsubscribeFromAllUrl}", url); if (admins.Contains(SendTo[i])) { body.Replace("{SendToList}", "This message was also sent to:<br>" + SendToList); } else { body.Replace("{SendToList}", string.Empty); } Utils.SendEmail("*****@*****.**", SendTo[i].ToString(), string.Format((string)this.GetLocalResourceObject("EmailSubjectRequest"), subj), body.ToString(), true, Micajah.Common.Configuration.FrameworkConfiguration.Current.WebApplication.Email.SmtpServer, true); } } } } ResetData(); } } } else { // post to article MainDataSet.CommentDataTable commentDataTable = taComment.InsertComment(this.ArticleGuid, TextBoxName.Text, TextBoxEmail.Text, string.Format("{0} ({1})", Request.UserHostName, Request.UserHostAddress), HttpUtility.HtmlEncode(Utils.ShortCommentText(TextBoxComment.Text, 50)), HttpUtility.HtmlEncode(TextBoxComment.Text), false, true, dtNow, true); if (commentDataTable != null && commentDataTable.Rows.Count > 0) { if (CommentPosted != null) { CommentPosted(this, new ArticleEventArgs(this.ArticleGuid, false)); } MainDataSet.ArticleRow articleRow = this.GetCurrentArticle(); if (currOrganization != null && articleRow != null && !articleRow.IsUpdatedByNull() && currInstance != null) { string author = string.Empty, subj; subj = string.Format((string)this.GetLocalResourceObject("EmailSubjectComment"), articleRow.Subject); System.Data.DataRow mcuser = Micajah.Common.Bll.Providers.UserProvider.GetUserRow(articleRow.UpdatedBy, currOrganization.OrganizationId); if (mcuser != null) { author = (string)mcuser["Email"]; } Micajah.Common.Dal.OrganizationDataSet.UserDataTable users = Micajah.Common.Bll.Providers.UserProvider.GetUsers( currOrganization.OrganizationId, this.InstanceGuid, new string[] { "InstAdmin" }); ArrayList admins = new ArrayList(); ArrayList SendTo = new ArrayList(); admins.AddRange(this.InputListAdmin); foreach (Micajah.Common.Dal.OrganizationDataSet.UserRow row in users) { admins.Add(row.Email); } SendTo.AddRange(admins); if (!string.IsNullOrEmpty(author) && !SendTo.Contains(author)) { SendTo.Add(author); } MainDataSetTableAdapters.EmailsTableAdapter emailsTableAdapter = new MainDataSetTableAdapters.EmailsTableAdapter(); foreach (DataRow row in emailsTableAdapter.GetArticleEmails(ArticleGuid).Rows) { if (!SendTo.Contains(row["UserEmail"].ToString())) { SendTo.Add(row["UserEmail"].ToString()); } } foreach (DataRow row in emailsTableAdapter.GetUnsubscribedEmails(ArticleGuid, this.InstanceGuid).Rows) { SendTo.Remove(row["UserEmail"].ToString()); } string SendToList = string.Empty; bool separated = false; for (int i = 0; i < SendTo.Count; i++) { if (!separated && !admins.Contains(SendTo[i].ToString())) { SendToList += "<br><br>Commentors:<br>" + SendTo[i].ToString(); separated = true; } else { SendToList += ", " + SendTo[i].ToString(); } } SendToList = SendToList.Remove(0, 1); if (SendTo.Count > 0) { for (int i = 0; i < SendTo.Count; i++) { StringBuilder body = new StringBuilder((string)this.GetLocalResourceObject("EmailBody_PostToArticle")); body.Replace("{OrgName}", currOrganization.Name); body.Replace("{InstName}", currInstance.Name); body.Replace("{ArticleName}", articleRow.Subject); body.Replace("{ArticleUrl}", siteUrl + string.Format(CultureInfo.CurrentCulture, "?i={0}&t={1}", this.InstanceGuid.ToString("N"), this.ArticleGuid.ToString("N"))); body.Replace("{ArticleText}", HttpUtility.HtmlEncode(TextBoxComment.Text)); body.Replace("{AuthorName}", TextBoxName.Text); body.Replace("{AuthorEmail}", string.IsNullOrEmpty(TextBoxEmail.Text) ? string.Empty : string.Format(CultureInfo.CurrentCulture, "<a href=\"mailto:{0}\" target=\"_blank\">{0}</a>", TextBoxEmail.Text)); body.Replace("{ImageUrl}", siteUrl + Micajah.Common.Configuration.FrameworkConfiguration.Current.WebApplication.Copyright.CompanyLogoImageUrl); if (admins.Contains(SendTo[i])) { body.Replace("{SendToList}", "This message was also sent to:<br>" + SendToList); } else { body.Replace("{SendToList}", string.Empty); } if (body.Length > 0) { string encrypted = Utils.Encrypt(String.Format("{0}&{1}&{2}&{3}&{4}", SendTo[i].ToString(), 1, commentDataTable[0].CommentId.ToString(CultureInfo.InvariantCulture), InstanceGuid.ToString(), UserContext.SelectedOrganizationId.ToString()), "Dshd*&^*@dsdss", "237w&@2d", "SHA1", 2, "&s2hfyDjuf372*73", 256); string url = siteUrl + String.Format("Unsubscribe.aspx?token={0}", encrypted); body.Replace("{UnsubscribeFromArticleUrl}", url); encrypted = Utils.Encrypt(String.Format("{0}&{1}&{2}&{3}&{4}", SendTo[i].ToString(), 2, commentDataTable[0].CommentId.ToString(CultureInfo.InvariantCulture), InstanceGuid.ToString(), UserContext.SelectedOrganizationId.ToString()), "Dshd*&^*@dsdss", "237w&@2d", "SHA1", 2, "&s2hfyDjuf372*73", 256); url = siteUrl + String.Format("Unsubscribe.aspx?token={0}", encrypted); body.Replace("{UnsubscribeFromAllUrl}", url); Utils.SendEmail("*****@*****.**", SendTo[i].ToString(), subj, body.ToString(), true, Micajah.Common.Configuration.FrameworkConfiguration.Current.WebApplication.Email.SmtpServer, true); } } } } ResetData(); } } } } }
protected void Page_Load(object sender, EventArgs e) { if (!string.IsNullOrEmpty(Request.QueryString["token"])) { string decrypted = Utils.Decrypt(Request.QueryString["token"], "Dshd*&^*@dsdss", "237w&@2d", "SHA1", 2, "&s2hfyDjuf372*73", 256); string[] splitted = decrypted.Split('&'); if (splitted.Length > 3) { string email = splitted[0]; int type; int.TryParse(splitted[1], out type); int commentId; int.TryParse(splitted[2], out commentId); Guid instanceId = new Guid(splitted[3]); Guid organizationId = new Guid(splitted[4]); if (type == 1) // Unsubscribe from article { if (InstanceAdminEmails(organizationId, instanceId).Contains(email)) { string encrypted = Utils.Encrypt(String.Format("{0}&{1}&{2}&{3}&{4}", email, 2, commentId.ToString(CultureInfo.InvariantCulture), instanceId.ToString(), organizationId.ToString()), "Dshd*&^*@dsdss", "237w&@2d", "SHA1", 2, "&s2hfyDjuf372*73", 256); int indexUrl = Request.Url.AbsoluteUri.IndexOf(":" + Request.Url.Port.ToString()); if (indexUrl <= 0) { indexUrl = Request.Url.AbsoluteUri.IndexOf(Request.Url.AbsolutePath); } string siteUrl = Request.Url.AbsoluteUri.Substring(0, indexUrl) + Request.ApplicationPath; string url = siteUrl + String.Format("Unsubscribe.aspx?token={0}", encrypted); Message.Text = String.Format("You cannot unsubscribe from this article, you are receiving emails because you are administrator of the KB system.<br><br><a href='{0}'>Click here to stop receiving all emails</a>", url); CanCloseLiteral.Visible = false; } else { MainDataSetTableAdapters.CommentTableAdapter comments = new MainDataSetTableAdapters.CommentTableAdapter(); MainDataSet.CommentDataTable commentDataTable = comments.GetDataByCommentId(commentId); if (commentDataTable != null && commentDataTable.Rows.Count > 0) { if (commentDataTable[0].ReceiveEmailUpdate) { comments.Unsubscribe(commentId); Message.Text = "You have succussfuly unsubscribe from this article."; } else { Message.Text = "You have been already unsubscribed from this article."; } } } } else // Unsubscribe from all emails { MainDataSetTableAdapters.DoNotEmailTableAdapter doNotEmail = new MainDataSetTableAdapters.DoNotEmailTableAdapter(); MainDataSet.DoNotEmailDataTable doNotEmailDataTable = doNotEmail.GetDataByEmail(instanceId, email); if (doNotEmailDataTable == null || doNotEmailDataTable.Rows.Count == 0) { doNotEmail.Insert(Guid.NewGuid(), instanceId, email); Message.Text = "You have succussfuly unsubscribe from all emails."; } else { Message.Text = "You have been already unsubscribed from all emails."; } } } } }