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)); }