public void RemoveSegmentFromArticleSegments(SegmentArticle art, string segmentTitle) { string str1 = ""; string segments = art.Segments; foreach (string str2 in art.Segments.Split("|", StringSplitOptions.None)) { if (!str2.Contains(segmentTitle)) { str1 += str2; } } art.Segments = str1; ((DbContext)this._context).Update <SegmentArticle>(art); ((DbContext)this._context).SaveChanges(); }
public void RemoveSegmentFromArticleSegments(SegmentArticle art, string segmentTitle) { var updatedSegmentsAndOrders = ""; //Split the segments into a list, grab their order and increment it then save the change var segments = art.Segments; var segmentsList = art.Segments.Split("|"); foreach (string segmentTitleAndOrder in segmentsList) { if (!segmentTitleAndOrder.Contains(segmentTitle)) { updatedSegmentsAndOrders += segmentTitleAndOrder; } } art.Segments = updatedSegmentsAndOrders; _context.Update(art); _context.SaveChanges(); }
/// <summary> /// So pass 4 of the filtering rules: /// If user has no filters show all articles /// If user has filter x, any article shown must contain x in that group but it will show if it has other filters in that group also /// If user has filters x1 and x2, any article shown will have either x1 or x2 /// If user has filters x and y set from different groups, any article shown must contain those filters in their respective groups /// <param name="art">Article to test</param> /// <param name="usr">User who's filters to compare to the passed article</param> /// <returns></returns> public bool ArticleMatchesUserFilters(SegmentArticle art, User usr) { bool matches = false; //If no filters for user all articles will show that have no filters. if (string.IsNullOrEmpty(usr.Groups) && string.IsNullOrEmpty(usr.TypeOfUser) && string.IsNullOrEmpty(usr.Topics) && string.IsNullOrEmpty(usr.WebsiteLanguage) && string.IsNullOrEmpty(usr.Country) && string.IsNullOrEmpty(usr.State) && string.IsNullOrEmpty(usr.City)) { //So the user has absolutely no filtering set so we should show all articles matches = true; } else if (PassesFilter(art.Country, usr.Country) && PassesFilter(art.State, usr.State) && PassesFilter(art.City, usr.City) && PassesFilter(art.Groups, usr.Groups) && PassesFilter(art.TypeOfUser, usr.TypeOfUser) && PassesFilter(art.Topics, usr.Topics) && PassesFilter(art.Languages, usr.WebsiteLanguage)) { matches = true; } return(matches); }
// Decrement everything below it public void DeleteArticleAndUpdateOthersOrder(SegmentArticle article, string segmentTitle, int orderDeletedArticleIsAt) { List <SegmentArticle> segmentArticle = _context.SegmentArticle.Where(m => m.CompanyID == article.CompanyID && m.Segments.Contains(segmentTitle)).ToList(); foreach (var art in segmentArticle) { var updatedSegmentsAndOrders = ""; //Split the segments into a list, grab their order and increment it then save the change var segments = art.Segments; var segmentsList = art.Segments.Split("|"); foreach (string segmentTitleAndOrder in segmentsList) { var ender = ""; // If this isn't the last title, add a delimited if (segmentsList.Last() != segmentTitleAndOrder) { ender = "|"; } if (segmentTitleAndOrder.Contains(segmentTitle)) { //Get the order and increment var titleAndOrder = segmentTitleAndOrder.Split("/"); int ord; bool success2 = int.TryParse(titleAndOrder[1], out ord); if (ord > orderDeletedArticleIsAt) { --ord; } updatedSegmentsAndOrders += titleAndOrder[0] + "/" + ord + ender; } else { // just add it unchanged updatedSegmentsAndOrders += segmentTitleAndOrder + ender; } } art.Segments = updatedSegmentsAndOrders; _context.Update(art); } }
// Decrement everything below it public void DeleteArticleAndUpdateOthersOrder(SegmentArticle article, string segmentTitle) { foreach (var art in _context.SegmentArticle.Where(m => m.CompanyID == article.CompanyID && m.Order > article.Order)) { var updatedSegmentsAndOrders = ""; //Split the segments into a list, grab their order and increment it then save the change var segments = art.Segments; var segmentsList = art.Segments.Split("|"); foreach (string segmentTitleAndOrder in segmentsList) { var ender = ""; // If this isn't the last title, add a delimited if (segmentsList.Last() != segmentTitleAndOrder) { ender = "|"; } if (segmentTitleAndOrder.Contains(segmentTitle)) { //Get the order and increment var titleAndOrder = segmentTitleAndOrder.Split("/"); int ord; bool success2 = int.TryParse(titleAndOrder[1], out ord); ord--; updatedSegmentsAndOrders += titleAndOrder[0] + "/" + ord + ender; } else { // just add it unchanged updatedSegmentsAndOrders += segmentTitleAndOrder + ender; } } art.Segments = updatedSegmentsAndOrders; art.Order--; _context.Update(art); } // Remove the current segement and order from the passed article RemoveSegmentFromArticleSegments(article, segmentTitle); _context.SaveChanges(); }
public void DeleteArticleAndUpdateOthersOrder( SegmentArticle article, string segmentTitle, int orderDeletedArticleIsAt) { DbSet <SegmentArticle> segmentArticle = this._context.SegmentArticle; Expression <Func <SegmentArticle, bool> > predicate = (Expression <Func <SegmentArticle, bool> >)(m => m.CompanyID == article.CompanyID && m.Segments.Contains(segmentTitle)); foreach (SegmentArticle entity in (IEnumerable <SegmentArticle>)segmentArticle.Where <SegmentArticle>(predicate)) { string str1 = ""; string segments = entity.Segments; string[] strArray1 = entity.Segments.Split("|", StringSplitOptions.None); foreach (string str2 in strArray1) { string str3 = ""; if (((IEnumerable <string>)strArray1).Last <string>() != str2) { str3 = "|"; } if (str2.Contains(segmentTitle)) { string[] strArray2 = str2.Split("/", StringSplitOptions.None); int result; int.TryParse(strArray2[1], out result); if (result > orderDeletedArticleIsAt) { --result; } str1 = str1 + strArray2[0] + "/" + (object)result + str3; } else { str1 = str1 + str2 + str3; } } entity.Segments = str1; ((DbContext)this._context).Update <SegmentArticle>(entity); } }
public void DeleteArticleAndUpdateOthersOrder(SegmentArticle article, string segmentTitle) { DbSet <SegmentArticle> segmentArticle1 = this._context.SegmentArticle; Expression <Func <SegmentArticle, bool> > predicate = (Expression <Func <SegmentArticle, bool> >)(m => m.CompanyID == article.CompanyID && m.Order > article.Order); foreach (SegmentArticle entity in (IEnumerable <SegmentArticle>)segmentArticle1.Where <SegmentArticle>(predicate)) { string str1 = ""; string segments = entity.Segments; string[] strArray1 = entity.Segments.Split("|", StringSplitOptions.None); foreach (string str2 in strArray1) { string str3 = ""; if (((IEnumerable <string>)strArray1).Last <string>() != str2) { str3 = "|"; } if (str2.Contains(segmentTitle)) { string[] strArray2 = str2.Split("/", StringSplitOptions.None); int result; int.TryParse(strArray2[1], out result); --result; str1 = str1 + strArray2[0] + "/" + (object)result + str3; } else { str1 = str1 + str2 + str3; } } entity.Segments = str1; SegmentArticle segmentArticle2 = entity; int? order = segmentArticle2.Order; segmentArticle2.Order = order.HasValue ? new int?(order.GetValueOrDefault() - 1) : new int?(); ((DbContext)this._context).Update <SegmentArticle>(entity); } this.RemoveSegmentFromArticleSegments(article, segmentTitle); ((DbContext)this._context).SaveChanges(); }
public async Task <IActionResult> Create(SegmentArticleViewModel sa) { var myArticle = new SegmentArticle(); _user = _context.User.FirstOrDefault(p => p.EmailAddress == _userManager.GetUserAsync(User).GetAwaiter().GetResult().Email); _cpy = _context.Company.FirstOrDefaultAsync(m => m.ID == _user.CompanyID).GetAwaiter().GetResult(); //Have to check the article title isn't already used var existingArticle = _context.SegmentArticle.FirstOrDefault(n => n.Title == sa.Title && n.CompanyID == sa.CompanyID); if (existingArticle == null) { if (ModelState.IsValid) { //ID,Order,Title,CoverImage,CoverImageMobileFriendly,PublishDate,FinishDate,ClientName,ClientLogoImage,ThemeColor,StandardColor,Draft,Department,Tags myArticle.CompanyID = _user.CompanyID; myArticle.Title = WebUtility.HtmlEncode(sa.Title); myArticle.PublishFrom = sa.PublishFrom ?? DateTime.Now.AddDays(-1); myArticle.PublishTill = sa.PublishTill ?? DateTime.Now.AddYears(10); myArticle.AllowComments = sa.AllowComments; myArticle.ArticleContent = WebUtility.HtmlEncode(sa.ArticleContent); myArticle.Author = (sa.Author ?? _user.Name); //if null set to be user name myArticle.CreatedBy = _user.Name; myArticle.ArticleUrl = WebUtility.HtmlEncode(sa.ArticleUrl); myArticle.Order = 1; myArticle.Tags = WebUtility.HtmlEncode(sa.Tags); myArticle.Languages = string.Join("|", sa.SelectedLanguages); myArticle.Groups = string.Join("|", sa.SelectedGroups); myArticle.Topics = string.Join("|", sa.SelectedTopics); myArticle.TypeOfUser = string.Join("|", sa.SelectedTypeOfUser); if (sa.Country != null && sa.Country != "") { myArticle.Country = _context.LocationCountries.FirstOrDefault(m => m.country_code == sa.Country).country_name; } if (sa.State != null && sa.State != "") { myArticle.State = _context.LocationStates.FirstOrDefault(n => n.country_code == sa.Country && n.state_code == sa.State).state_name; } myArticle.City = sa.City; //Now we need to get what the article ID will be as it isn't normally generated till created. int artID = _context.SegmentArticle.OrderByDescending(u => u.ID).FirstOrDefault().ID + 1; IFormFile img = sa.Image; if (img != null) { await _dla.UploadFileToS3(img, _user.CompanyName + "_" + artID + "_" + img.FileName, "images/Uploads/Articles"); //The file has been saved to disk - now save the file name to the DB myArticle.Image = img.FileName; } IFormFile vid = sa.EmbeddedVideo; if (vid != null) { await _dla.UploadFileToS3(vid, _user.CompanyName + "_" + artID + "_" + vid.FileName, "images/Uploads/Articles"); //The file has been saved to disk - now save the file name to the DB myArticle.EmbeddedVideo = vid.FileName; } // As they want order to be associated with segment now im having to smush it in with the current field....a bit ugly if (sa.SelectedSegments.Count > 0) { myArticle.Segments = CreateSegmentsStringWithOrder1(sa.SelectedSegments); } _context.Add(myArticle); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } } else { // Article title already exists ModelState.AddModelError(string.Empty, "Article Title already exists - please choose something unique"); } DataAccessLayer dla = new DataAccessLayer(_context); var listOfAllSegements = dla.GetArticleSegments(_user.CompanyID); foreach (var seg in listOfAllSegements) { sa.AvailableSegments.Add(new SelectListItem { Text = seg.Value, Value = seg.Value }); } // Add group checkboxes var listOfAllGroups = dla.GetListGroups(_user.CompanyID); foreach (var seg in listOfAllGroups) { sa.AvailableGroups.Add(new SelectListItem { Text = seg.Value, Value = seg.Value }); } // Add topic checkboxes var listOfAllTopics = dla.GetListTopics(_user.CompanyID); foreach (var seg in listOfAllTopics) { sa.AvailableTopics.Add(new SelectListItem { Text = seg.Value, Value = seg.Value }); } // Add type checkboxes var listOfAllTypeOfUser = dla.GetListTypeOfUser(_user.CompanyID); foreach (var seg in listOfAllTypeOfUser) { sa.AvailableTypeOfUser.Add(new SelectListItem { Text = seg.Value, Value = seg.Value }); } // Add language checkboxes var listOfAllLanguages = dla.GetListLanguages(_user.CompanyID, _rlo); foreach (var seg in listOfAllLanguages) { sa.AvailableLanguages.Add(new SelectListItem { Text = seg.Value, Value = seg.Value }); } // Get location dropdown data sa.Countries = dla.GetCountries(); sa.States = dla.GetNullStatesOrCities(); sa.Cities = dla.GetNullStatesOrCities(); return(View(sa)); }