public static string RemoveWords(string textForReplace,
                                         IQueryable <ForbiddenWordUser> forbiddenWordUser,
                                         IQueryable <ForbiddenWord> forbiddenWordStandart,
                                         MessagesViewModel viewModel,
                                         string replaceTo)
        {
            foreach (var word in forbiddenWordUser)
            {
                var forbidden = new ForbiddenWordUser();
                forbidden.Word = word.Word;
                viewModel.ForbiddenWordsUser.Add(forbidden);
                viewModel.AllForbiddenWordsUser.Add(forbidden);
            }
            foreach (var word in forbiddenWordStandart)
            {
                var forbidden = new ForbiddenWordUser();
                forbidden.Word = word.Word;
                viewModel.ForbiddenWordsStandart.Add(forbidden);
                viewModel.AllForbiddenWordsUser.Add(forbidden);
            }

            List <string> arrayForbidden = new List <string>();

            foreach (var w in viewModel.AllForbiddenWordsUser)
            {
                arrayForbidden.Add(w.Word.ToLower());
            }

            string pattern = "\\b" + string.Join("\\b|\\b", arrayForbidden) + "\\b";
            string newText = Regex.Replace(textForReplace, pattern, replaceTo, RegexOptions.IgnoreCase);

            return(newText);
        }
        public IActionResult Messages(List <IFormFile> files, MessagesViewModel viewModel)
        {
            if (viewModel.PostType == "uploadFiles")
            {
                foreach (var file in files)
                {
                    if (file != null && file.Length > 0)
                    {
                        viewModel.AttachFile = UploadFile(file);
                        viewModel.AttachFile = file.FileName;
                    }
                }
                viewModel.AlertType = "alertUpload";
            }

            if (viewModel.PostType == "sendEmail")
            {
                // Create List Forbidden Words (Standart Forbidden Words + User )
                var forbiddenWordsUser    = _dbContext.ForbiddenWordUsers.Where(u => u.UserId == UserID);
                var forbiddenWordStandart = _dbContext.ForbiddenWords.Where(a => a.Word != null);

                // for Change forbidden words to ***
                if (viewModel.TextMessage != null)
                {
                    viewModel.TextMessage = RemoveWords(viewModel.TextMessage, forbiddenWordsUser, forbiddenWordStandart, viewModel, "***");
                }
                SendEMail(UserEmail, viewModel.NameFrom, viewModel.TitleMessage, viewModel.TextMessage, viewModel.AttachFile, UserID);

                viewModel.AlertType = "alertSended";

                // write to DB
                EmailMessage mes = new EmailMessage();
                mes.UserId       = UserID;
                mes.SendTo       = UserEmail;
                mes.NameFrom     = viewModel.NameFrom;
                mes.TitleMessage = viewModel.TitleMessage;
                mes.TextMessage  = viewModel.TextMessage;
                mes.AttachFile   = viewModel.AttachFile;
                mes.VoiceName    = GetMd5Hash(viewModel.TextMessage) + ".mp3";
                mes.DateMessage  = DateTime.Now;

                _dbContext.EmailMessages.Add(mes);
                _dbContext.SaveChanges();
            }

            if (viewModel.PostType == "saveSettings")
            {
                var forbiddenWord         = _dbContext.ForbiddenWordUsers.Where(u => u.UserId == UserID);
                var forbiddenWordStandart = _dbContext.ForbiddenWords.Where(a => a.Word != null);

                var stringForbiddenWords = viewModel.StringForbiddenWordsUser;
                if (stringForbiddenWords != null)
                {
                    var listForbiddenWords = stringForbiddenWords.Trim().Split(new[] { " ", "," }, StringSplitOptions.RemoveEmptyEntries);

                    // удаляю из БД все запрещенные слова юзера
                    var wordsUser = _dbContext.ForbiddenWordUsers.Where(a => a.UserId == UserID);
                    foreach (var del in wordsUser)
                    {
                        _dbContext.ForbiddenWordUsers.Remove(del);
                    }
                    _dbContext.SaveChanges();

                    if (listForbiddenWords != null)
                    {
                        foreach (string word in listForbiddenWords)
                        {
                            ForbiddenWordUser w = new ForbiddenWordUser();
                            // на всякий случай сравниваю массив новых слов юзера со словами из таблицы, если такого слова нет - добавляю в таблицу
                            if (_dbContext.ForbiddenWordUsers.Where(a => a.Word == word).Count() == 0)
                            {
                                w.UserId = UserID;
                                w.Word   = word.ToLower();
                                viewModel.ForbiddenWordsUser.Add(w);
                                _dbContext.ForbiddenWordUsers.Add(w);
                            }
                        }
                        _dbContext.SaveChanges();
                    }
                }
                else
                {
                    // просто удаляю из БД все запрещенные слова юзера
                    var wordsUser = _dbContext.ForbiddenWordUsers.Where(a => a.UserId == UserID);
                    foreach (var del in wordsUser)
                    {
                        _dbContext.ForbiddenWordUsers.Remove(del);
                    }
                    _dbContext.SaveChanges();
                }

                viewModel.AlertType = "alertSave";
            }

            viewModel = ModelForMessages(viewModel);

            return(View("~/Views/Widgets/Messages.cshtml", viewModel));
        }