private int ProcessSlugs(ICollection<ImportRow<Product>> batch, ImportResult result) { var slugMap = new Dictionary<string, UrlRecord>(100); Func<string, UrlRecord> slugLookup = ((s) => { if (slugMap.ContainsKey(s)) { return slugMap[s]; } return (UrlRecord)null; }); var entityName = typeof(Product).Name; foreach (var row in batch) { if (row.IsNew || row.NameChanged || row.ContainsKey("SeName")) { try { string seName = row.GetValue<string>("SeName"); seName = row.Entity.ValidateSeName(seName, row.Entity.Name, true, _urlRecordService, _seoSettings, extraSlugLookup: slugLookup); UrlRecord urlRecord = null; if (row.IsNew) { // dont't bother validating SeName for new entities. urlRecord = new UrlRecord { EntityId = row.Entity.Id, EntityName = entityName, Slug = seName, LanguageId = 0, IsActive = true, }; _rsUrlRecord.Insert(urlRecord); } else { urlRecord = _urlRecordService.SaveSlug(row.Entity, seName, 0); } if (urlRecord != null) { // a new record was inserted to the store: keep track of it for this batch. slugMap[seName] = urlRecord; } } catch (Exception ex) { result.AddWarning(ex.Message, row.GetRowInfo(), "SeName"); } } } // commit whole batch at once return _rsUrlRecord.Context.SaveChanges(); }
private void PrepareUrlRecordModel(UrlRecordModel model, UrlRecord urlRecord, bool forList = false) { if (!forList) { var allLanguages = _languageService.GetAllLanguages(true); model.AvailableLanguages = allLanguages .Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString() }) .ToList(); model.AvailableLanguages.Insert(0, new SelectListItem { Text = T("Admin.System.SeNames.Language.Standard"), Value = "0" }); } if (urlRecord != null) { model.Id = urlRecord.Id; model.Slug = urlRecord.Slug; model.EntityName = urlRecord.EntityName; model.EntityId = urlRecord.EntityId; model.IsActive = urlRecord.IsActive; model.LanguageId = urlRecord.LanguageId; if (urlRecord.EntityName.IsCaseInsensitiveEqual("BlogPost")) { model.EntityUrl = Url.Action("Edit", "Blog", new { id = urlRecord.EntityId }); } else if (urlRecord.EntityName.IsCaseInsensitiveEqual("Forum")) { model.EntityUrl = Url.Action("EditForum", "Forum", new { id = urlRecord.EntityId }); } else if (urlRecord.EntityName.IsCaseInsensitiveEqual("ForumGroup")) { model.EntityUrl = Url.Action("EditForumGroup", "Forum", new { id = urlRecord.EntityId }); } else if (urlRecord.EntityName.IsCaseInsensitiveEqual("NewsItem")) { model.EntityUrl = Url.Action("Edit", "News", new { id = urlRecord.EntityId }); } else { model.EntityUrl = Url.Action("Edit", urlRecord.EntityName, new { id = urlRecord.EntityId }); } } }