Пример #1
0
        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));
        }
Пример #2
0
        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));
        }
Пример #3
0
        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));
        }
Пример #4
0
 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));
 }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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));
        }