public ActionResult RuleDetails(int?id) { CanvasAutoResponderModel model = new CanvasAutoResponderModel(); if (id != null && id > 0) { CanvasRespondRule aRule = (from r in base.db.CanvasRespondRules where (r.CanvasRuleId == id) select r) .FirstOrDefault(); if (aRule != null) { model.CanvasRuleId = aRule.CanvasRuleId; model.CanvasRuleFor = aRule.CanvasRuleForId == null ? ((byte)0) : aRule.CanvasRuleForId.Value; model.CanvasRuleTitle = aRule.CanvasRuleTitle; model.Answer = aRule.CanvasAnswer; model.Active = aRule.Active == null ? true : aRule.Active.Value; model.lstQuestions = (from q in base.db.CanvasRespondRuleQuestions orderby q.CanvasQuestion where (q.CanvasRuleId == aRule.CanvasRuleId) && (q.Active == null || q.Active == true) select q) .ToList(); } } return(View(model)); }
public ActionResult RuleDetails1(int?id) { CanvasResponderSaveModel model = new CanvasResponderSaveModel(); model.AnsweringRules = new List <CanvasAnsweringRules>(); if (id != null && id > 0) { CanvasRespondRule aRule = (from r in base.db.CanvasRespondRules where (r.CanvasRuleId == id) select r) .FirstOrDefault(); if (aRule != null) { List <CanvasRespondRuleQuestion> lstQuestions = (from q in base.db.CanvasRespondRuleQuestions orderby q.CanvasQuestion where (q.Active == null || q.Active == true) select q) .ToList(); model.Active = Convert.ToBoolean(aRule.Active); model.Answer = aRule.CanvasAnswer; model.RuleForId = aRule.CanvasRuleForId == null ? ((byte)0) : aRule.CanvasRuleForId.Value; } } return(View(model)); }
private ActionResult UpdateRule(CanvasResponderSaveModel model) { if (model != null) { CanvasRespondRule aRule = (from r in base.db.CanvasRespondRules where (r.CanvasRuleId == model.CanvasRuleId) select r) .FirstOrDefault(); if (aRule != null) { //aRule.Active = model.Active; aRule.CanvasAnswer = model.Answer; aRule.CanvasRuleForId = model.RuleForId; aRule.CanvasRuleTitle = aRule.CanvasRuleTitle; aRule.UpdatedOn = DateTime.Now; db.Entry(aRule).State = System.Data.Entity.EntityState.Modified; int iRowCount = db.SaveChanges(); if (iRowCount > 0) { if (model.AnsweringRules != null && model.AnsweringRules.Count > 0) { foreach (var aQuestion in model.AnsweringRules) { CanvasRespondRuleQuestion newQuestion = new CanvasRespondRuleQuestion() { Active = true , CanvasQuestion = aQuestion.Question , CanvasRuleId = aRule.CanvasRuleId , CreatedOn = DateTime.Now , MatchType = aQuestion.MatchType }; base.db.CanvasRespondRuleQuestions.Add(newQuestion); } base.db.SaveChanges(); } return(Json(new { Success = true, Message = string.Empty }, JsonRequestBehavior.AllowGet)); } } } return(Json(new { Success = false, Message = Constants.ERROR_IN_EXECUTION }, JsonRequestBehavior.AllowGet)); }
public ActionResult DeleteRule(int ruleId) { if (ruleId > 0) { CanvasRespondRule aRule = (from r in base.db.CanvasRespondRules where (r.CanvasRuleId == ruleId) select r) .FirstOrDefault(); if (aRule != null) { aRule.Active = false; db.Entry(aRule).State = EntityState.Modified; db.SaveChanges(); return(base.SuccessMessage(string.Empty)); } return(base.NoSuccessMessage(Constants.ERROR_IN_EXECUTION)); } return(Json(new { Success = false, Message = Constants.ERROR_IN_EXECUTION }, JsonRequestBehavior.AllowGet)); }
public static CanvasRespondRule FindAnswer(AutoResponderRuleTypes answerType, string sQuestion) { CanvasRespondRule answerFound = null; if (!string.IsNullOrEmpty(sQuestion)) { using (LMSEntities db = new LMSEntities()) { List <int> lstDiscussionRules = (from dr in db.CanvasRespondRules where (dr.CanvasRuleForId == ((int)answerType) && (dr.Active != null && dr.Active.Value == true)) select dr.CanvasRuleId) .ToList(); if (lstDiscussionRules != null && lstDiscussionRules.Count > 0) { List <CanvasRespondRuleQuestion> lstQuestions = (from q in db.CanvasRespondRuleQuestions where (q.Active != null && q.Active.Value == true) && lstDiscussionRules.Contains(q.CanvasRuleId) select q) .ToList(); if (lstQuestions != null && lstQuestions.Count > 0) { bool isAnswerFound = false; foreach (var aQuestion in lstQuestions) { if (string.IsNullOrEmpty(aQuestion.CanvasQuestion)) { continue; } if (aQuestion.MatchType != null) { if (Enum.IsDefined(typeof(AutoResponderConditionType), (int)aQuestion.MatchType.Value)) { AutoResponderConditionType condition = (AutoResponderConditionType)aQuestion.MatchType.Value; string sPlainText = RemoveHtmlTags(sQuestion); if (!string.IsNullOrEmpty(sPlainText)) { switch (condition) { case AutoResponderConditionType.CONTAINS_ANY_WORD: break; case AutoResponderConditionType.CONTAINS_STRING: isAnswerFound = sPlainText.Trim().ToLower().IndexOf(aQuestion.CanvasQuestion.Trim().ToLower()) != -1; break; case AutoResponderConditionType.MATCH_STRING: isAnswerFound = sPlainText.Trim().ToLower().Equals(aQuestion.CanvasQuestion.Trim().ToLower()); break; } if (isAnswerFound) { answerFound = (from a in db.CanvasRespondRules where a.CanvasRuleId == aQuestion.CanvasRuleId select a) .FirstOrDefault(); break; } } } } } } } } } return(answerFound); }
private async Task <object> SendAutoReply(FAQEmail aEmail) { if (aEmail != null) { EmailDownloader aDownloader = new EmailDownloader(aEmail.faq_email_id); aDownloader.FaqLogger = this.FaqLogger; List <Message> UnreadEmails = await aDownloader.UnreadEmails(); if (UnreadEmails != null && UnreadEmails.Count > 0) { StringBuilder builder = null; foreach (Message aUnreadEmail in UnreadEmails) { FAQEmailsDownload newEmail = new FAQEmailsDownload() { download_date = DateTime.Now , email_uid = aUnreadEmail.Headers.MessageId , faq_email_id = aEmail.faq_email_id }; this.db.FAQEmailsDownloads.Add(newEmail); this.db.SaveChanges(); builder = new StringBuilder(); OpenPop.Mime.MessagePart plainText = aUnreadEmail.FindFirstPlainTextVersion(); if (plainText != null) { // We found some plaintext! builder.Append(plainText.GetBodyAsText()); } else { // Might include a part holding html instead OpenPop.Mime.MessagePart html = aUnreadEmail.FindFirstHtmlVersion(); if (html != null) { // We found some html! builder.Append(html.GetBodyAsText()); } } if (builder != null && !string.IsNullOrEmpty(builder.ToString())) { CanvasRespondRule answerFound = AnswerFinder.FindAnswer(AutoResponderRuleTypes.FAQs, builder.ToString()); if (answerFound != null) { SmtpPopSetting settings = (from s in db.SmtpPopSettings where (s.smtp_pop_id == aEmail.smtp_pop_id) select s ).FirstOrDefault(); if (settings != null) { string sEmailReceivedFrom = aUnreadEmail.Headers.From.MailAddress.Address; using (MailMessage mail = new MailMessage(aEmail.user_name, sEmailReceivedFrom)) { using (SmtpClient client = new SmtpClient(settings.smtp_server, settings.smpt_port)) { client.EnableSsl = settings.smtp_use_ssl; client.DeliveryMethod = SmtpDeliveryMethod.Network; client.UseDefaultCredentials = false; client.Credentials = new NetworkCredential(aEmail.user_name, aEmail.use_password); if (!builder.ToString().Trim().ToLower().StartsWith("re:")) { mail.Subject = string.Concat("RE: ", aUnreadEmail.Headers.Subject); } mail.Body = answerFound.CanvasAnswer; try { //client.SendCompleted += (s, e) => //{ //}; //client.SendAsync(mail, null); client.Send(mail); Log(string.Format("Question '{0}' replied with answer '{1}' to email account '{2}'" , builder.ToString(), answerFound.CanvasAnswer, sEmailReceivedFrom)); AnsweredFAQ aAnswer = new AnsweredFAQ() { answer_date_time = DateTime.Now , answer_replied_with = answerFound.CanvasAnswer , faq = builder.ToString() , canvas_rule_id = answerFound.CanvasRuleId , faq_email_id = aEmail.faq_email_id }; this.db.AnsweredFAQs.Add(aAnswer); this.db.SaveChanges(); } catch (Exception ex) { Log(string.Concat("EXCEPTION : ", ex.Message)); } } } } } else { Log(string.Format("No answer was found against FAQ '{0}'", builder.ToString())); UnAnsweredFAQ unAnswered = new UnAnsweredFAQ() { faq = builder.ToString() , faq_email_id = aEmail.faq_email_id , to_email_address = aUnreadEmail.Headers.From.MailAddress.Address , faq_email_subject = aUnreadEmail.Headers.Subject }; db.UnAnsweredFAQs.Add(unAnswered); db.SaveChanges(); } } } } } return(null); }
private ActionResult AddNewRule(CanvasResponderSaveModel model) { if (model != null) { CanvasRespondRule aAnswer = new CanvasRespondRule() { CanvasAnswer = model.Answer , CreatedOn = DateTime.Now , CanvasRuleForId = model.RuleForId , Active = true , CanvasRuleId = model.CanvasRuleId , CanvasRuleTitle = model.CanvasRuleTitle }; base.db.CanvasRespondRules.Add(aAnswer); try { base.db.SaveChanges(); } catch (DbEntityValidationException e) { foreach (var eve in e.EntityValidationErrors) { Debug.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); foreach (var ve in eve.ValidationErrors) { Debug.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); } } throw; } if (aAnswer.CanvasRuleId > 0) { if (model.AnsweringRules != null && model.AnsweringRules.Count > 0) { foreach (var aQuestion in model.AnsweringRules) { CanvasRespondRuleQuestion aRule = new CanvasRespondRuleQuestion() { Active = true , CanvasQuestion = aQuestion.Question , CanvasRuleId = aAnswer.CanvasRuleId , CreatedOn = DateTime.Now , MatchType = aQuestion.MatchType }; base.db.CanvasRespondRuleQuestions.Add(aRule); } base.db.SaveChanges(); return(Json(new { Success = true, Message = string.Empty }, JsonRequestBehavior.AllowGet)); } } } return(Json(new { Success = false, Message = Constants.ERROR_IN_EXECUTION }, JsonRequestBehavior.AllowGet)); }