Ejemplo n.º 1
0
        /// <summary>
        /// Creates an error validation result for this validator.
        /// </summary>
        /// <param name="context">The validator context</param>
        /// <returns>Returns an error validation result.</returns>
        protected virtual ValidationFailure CreateValidationError(PropertyValidatorContext context)
        {
            var messageBuilderContext = new MessageBuilderContext(context, errorSource, this);

            var error = context.Rule.MessageBuilder != null
                                ? context.Rule.MessageBuilder(messageBuilderContext)
                                : messageBuilderContext.GetDefaultMessage();

            var failure = new ValidationFailure(context.PropertyName, error, context.PropertyValue);

            failure.FormattedMessageArguments         = context.MessageFormatter.AdditionalArguments;
            failure.FormattedMessagePlaceholderValues = context.MessageFormatter.PlaceholderValues;
            failure.ResourceName = errorSource.ResourceName;
            failure.ErrorCode    = (errorCodeSource != null)
                                ? errorCodeSource.GetString(context.Instance)
                                : ValidatorOptions.ErrorCodeResolver(this);

            if (CustomStateProvider != null)
            {
                failure.CustomState = CustomStateProvider(context);
            }

            failure.Severity = Severity;
            return(failure);
        }
Ejemplo n.º 2
0
        private MessageBuilderContext GeneralMatch(Customer customer, IEnumerable <ListeningAction> listeningActions)
        {
            var generalActions = listeningActions.Where(l => l.GetType() == typeof(GeneralListeningAction));
            var returnObj      = new MessageBuilderContext();

            if (generalActions.Count() >= 1)
            {
                var rand      = new Random();
                int index     = rand.Next(0, generalActions.Count());
                var actions   = (GeneralListeningAction)generalActions.ElementAt(index);
                var responses = actions.Responses;

                index = rand.Next(0, responses.Count());

                var response = responses.ElementAt(index);

                returnObj.Customer = customer;
                returnObj.SendText = response.Text;

                return(returnObj);
            }
            else
            {
                return(null);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Creates an error validation result for this validator.
        /// </summary>
        /// <param name="context">The validator context</param>
        /// <returns>Returns an error validation result.</returns>
        protected virtual ValidationFailure CreateValidationError(PropertyValidatorContext context)
        {
            var messageBuilderContext = new MessageBuilderContext(context, this);

            var error = context.Rule.MessageBuilder != null
                                ? context.Rule.MessageBuilder(messageBuilderContext)
                                : messageBuilderContext.GetDefaultMessage();

            var failure = new ValidationFailure(context.PropertyName, error, context.PropertyValue);

#pragma warning disable 618
            failure.FormattedMessageArguments = context.MessageFormatter.AdditionalArguments;
#pragma warning restore 618
            failure.FormattedMessagePlaceholderValues = context.MessageFormatter.PlaceholderValues;
#pragma warning disable 618
            failure.ErrorCode = ErrorCodeSource?.GetString(context) ?? ValidatorOptions.Global.ErrorCodeResolver(this);
#pragma warning restore 618

            if (CustomStateProvider != null)
            {
                failure.CustomState = CustomStateProvider(context);
            }

            if (SeverityProvider != null)
            {
                failure.Severity = SeverityProvider(context);
            }

            return(failure);
        }
Ejemplo n.º 4
0
        public MessageBuilder(MessageBuilderContext context)
        {
            if (context == null || context.TemplateFile == null)
            {
                throw new ArgumentNullException("email context has incorrect value");
            }

            _context = context;
        }
Ejemplo n.º 5
0
        public ActionResult Success()
        {
            var sum   = HttpContext.Request.QueryString.Get("out_summ");
            var email = HttpContext.Request.QueryString.Get("Shp_email");
            var name  = HttpContext.Request.QueryString.Get("Shp_name");
            var phone = HttpContext.Request.QueryString.Get("Shp_phone");

            if (String.IsNullOrEmpty(sum) || String.IsNullOrEmpty(email) || String.IsNullOrEmpty(name) ||
                String.IsNullOrEmpty(phone))
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            //todo: check hash

            //sending email notification
            try
            {
                using (var messageTemplateFile = MessageBuilder.GetMessageTemplate("payment"))
                {
                    try
                    {
                        var messageContext = new MessageBuilderContext()
                        {
                            TemplateFile = messageTemplateFile,
                            Title        = "Оплата абонемента",
                            Name         = name,
                            Email        = email,
                            Phone        = phone,
                            Description  = $"Стоимость абонемента: {sum}р."
                        };
                        var messageBuilder = new MessageBuilder(messageContext);

                        EmailSender.SendMessageAsync(messageBuilder.GetMessage());
                    }
                    catch
                    {
                        //todo: write log
                    }
                }
            }
            catch (FileNotFoundException e)
            {
                //todo: write log
            }
            catch (Exception e)
            {
                //todo: write log
            }

            return(View());
        }
Ejemplo n.º 6
0
 private Dictionary <string, string> BuildDictionary(MessageBuilderContext context)
 {
     return(new Dictionary <string, string>
     {
         { KeywordToken.BotName, _settingRepository.GetSettingByType(SettingType.BotName).Value ?? "" },
         { KeywordToken.CompanyName, _settingRepository.GetSettingByType(SettingType.CompanyName).Value ?? "" },
         { KeywordToken.CustomerName, !string.IsNullOrEmpty(context.Customer.Name) ? context.Customer.Name : "" },
         { KeywordToken.CustomerNameAllCaps, !string.IsNullOrEmpty(context.Customer.Name) ? context.Customer.Name.ToUpper() : "" },
         { KeywordToken.InputText, context.InputText ?? "" },
         { KeywordToken.ListeningActionMatches, context.ListeningActionMatches ?? "" },
         { KeywordToken.Products, _productService.BuildProductList() ?? "" }
     });
 }
Ejemplo n.º 7
0
        public void SendMessage(SendMessageDto dto, MessageBuilderContext mbContext)
        {
            var dict    = BuildDictionary(mbContext);
            var message = dict.Aggregate(mbContext.SendText, (current, value) =>
                                         current.Replace(value.Key, value.Value));

            MessageResource.Create(
                body: message,
                from: new Twilio.Types.PhoneNumber(dto.FromNumber),
                statusCallback: new Uri($"{_httpContextAccessor.HttpContext.Request.Scheme}://{_httpContextAccessor.HttpContext.Request.Headers["X-Original-Host"]}{_httpContextAccessor.HttpContext.Request.Path}/status"),
                to: new Twilio.Types.PhoneNumber(dto.ToNumber)
                );
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Creates an error validation result for this validator.
        /// </summary>
        /// <param name="context">The validator context</param>
        /// <returns>Returns an error validation result.</returns>
        protected virtual ValidationFailure CreateValidationError(PropertyValidatorContext context)
        {
            var messageBuilderContext = new MessageBuilderContext(context, Options.ErrorMessageSource, this);

            var error = context.Rule.MessageBuilder != null
                ? context.Rule.MessageBuilder(messageBuilderContext)
                : messageBuilderContext.GetDefaultMessage();

            var failure = new ValidationFailure(context.PropertyName, error, context.PropertyValue);

            //failure.FormattedMessageArguments = context.MessageFormatter.AdditionalArguments;
            failure.FormattedMessagePlaceholderValues = context.MessageFormatter.PlaceholderValues;
            failure.ErrorCode = (Options.ErrorCodeSource != null)
                ? Options.ErrorCodeSource.GetString(context)
                : ValidatorOptions.ErrorCodeResolver(this);
            return(failure);
        }
Ejemplo n.º 9
0
        public ActionResult TrialWorkout(TrialWorkoutModel model)
        {
            if (model == null || String.IsNullOrEmpty(model.DateField) || String.IsNullOrEmpty(model.Email) ||
                String.IsNullOrEmpty(model.LevelSelect) || String.IsNullOrEmpty(model.NameField) ||
                String.IsNullOrEmpty(model.Phone))
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            //sending email notification
            try
            {
                using (var messageTemplateFile = MessageBuilder.GetMessageTemplate("trialworkout"))
                {
                    try
                    {
                        var messageContext = new MessageBuilderContext()
                        {
                            TemplateFile = messageTemplateFile,
                            Title        = "Пробная тренировка",
                            Name         = model.NameField,
                            Email        = model.Email,
                            Phone        = model.Phone,
                            Description  = $"Дата: {model.DateField}, Уровень: {model.LevelSelect}"
                        };
                        var messageBuilder = new MessageBuilder(messageContext);

                        EmailSender.SendMessageAsync(messageBuilder.GetMessage());
                    }
                    catch
                    {
                        //todo: write log
                    }
                }
            }
            catch (FileNotFoundException e)
            {
                //todo: write log
            }
            catch (Exception e)
            {
                //todo: write log
            }

            return(View("TrialWorkoutSuccess", model));
        }
Ejemplo n.º 10
0
        private MessageBuilderContext NoMatch(Customer customer, IEnumerable <ListeningAction> listeningActions)
        {
            var typedActions   = listeningActions.Where(l => l.GetType() == typeof(TypedListeningAction));
            var generalActions = listeningActions.Where(l => l.GetType() == typeof(GeneralListeningAction));

            if (typedActions.Count() == 0 && generalActions.Count() == 0)
            {
                var returnObj = new MessageBuilderContext();

                returnObj.Customer = customer;
                returnObj.SendText = _messageService.GetRandomTypedMessage(MessageType.ListeningActionResponseNoMatch).Text;

                return(returnObj);
            }
            else
            {
                return(null);
            }
        }
Ejemplo n.º 11
0
        private MessageBuilderContext UniqueTypedMatch(Customer customer, IEnumerable <ListeningAction> listeningActions)
        {
            var typedActions = listeningActions.Where(l => l.GetType() == typeof(TypedListeningAction));

            if (typedActions.Count() == 1)
            {
                var returnObj   = new MessageBuilderContext();
                var typedAction = (TypedListeningAction)typedActions.First();

                returnObj.Customer = customer;
                returnObj.SendText = _messageService.GetRandomTypedMessage(typedAction.ResponseMessageType).Text;
                returnObj.Customer.Session.AwaitState = typedActions.First().NextState;

                return(returnObj);
            }
            else
            {
                return(null);
            }
        }
Ejemplo n.º 12
0
        public Customer DoAction(StateActionDto dto)
        {
            var customer         = dto.Customer;
            var listeningActions = _listeningActionService.GetListeningActionsByMatch(dto.InputText);

            var priorities = new List <Func <MessageBuilderContext> > {
                () => NoMatch(customer, listeningActions),
                () => UniqueTypedMatch(customer, listeningActions),
                () => MultipleTypedMatches(customer, listeningActions),
                () => GeneralMatch(customer, listeningActions)
            };

            var mbContext = new MessageBuilderContext();

            foreach (var func in priorities)
            {
                mbContext = func();
                if (mbContext == null)
                {
                    continue;
                }
                else
                {
                    break;
                }
            }

            mbContext.InputText = dto.InputText;

            _twilioService.SendMessage(new SendMessageDto
            {
                FromNumber = dto.MyNumber,
                ToNumber   = customer.PhoneNumber
            }, mbContext);

            return(customer);
        }
Ejemplo n.º 13
0
        private MessageBuilderContext MultipleTypedMatches(Customer customer, IEnumerable <ListeningAction> listeningActions)
        {
            var typedActions = listeningActions.Where(l => l.GetType() == typeof(TypedListeningAction));
            var returnObj    = new MessageBuilderContext();

            if (typedActions.Count() > 1)
            {
                returnObj.Customer = customer;
                returnObj.SendText = _messageService.GetRandomTypedMessage(MessageType.ListeningActionResponseMultipleMatches).Text;
                returnObj.Customer.Session.AwaitState = typedActions.First().NextState;

                for (int i = 0; i < typedActions.Count() - 1; i++)
                {
                    returnObj.ListeningActionMatches += $"{typedActions.ElementAt(i).Name}, ";
                }
                returnObj.ListeningActionMatches += $"or {typedActions.LastOrDefault().Name}";

                return(returnObj);
            }
            else
            {
                return(null);
            }
        }
Ejemplo n.º 14
0
 /// <summary>
 /// Gets the service provider associated with the validation context.
 /// </summary>
 /// <param name="context"></param>
 /// <returns></returns>
 /// <exception cref="InvalidOperationException"></exception>
 public static IServiceProvider GetServiceProvider <T, TProperty>(this MessageBuilderContext <T, TProperty> context)
 => Get(context.ParentContext.RootContextData);