protected virtual void SaveStoreMappings(LibraryCategory category, LibraryCategoryModel model) { category.LimitedToStores = model.SelectedStoreIds.Any(); var existingStoreMappings = _storeMappingService.GetStoreMappings(category); var allStores = _storeService.GetAllStores(); foreach (var store in allStores) { if (model.SelectedStoreIds.Contains(store.Id)) { //new store if (existingStoreMappings.Count(sm => sm.StoreId == store.Id) == 0) { _storeMappingService.InsertStoreMapping(category, store.Id); } } else { //remove store var storeMappingToDelete = existingStoreMappings.FirstOrDefault(sm => sm.StoreId == store.Id); if (storeMappingToDelete != null) { _storeMappingService.DeleteStoreMapping(storeMappingToDelete); } } } }
protected virtual void SaveCategoryAcl(LibraryCategory category, LibraryCategoryModel model) { category.SubjectToAcl = model.SelectedCustomerRoleIds.Any(); var existingAclRecords = _aclService.GetAclRecords(category); var allCustomerRoles = _customerService.GetAllCustomerRoles(true); foreach (var customerRole in allCustomerRoles) { if (model.SelectedCustomerRoleIds.Contains(customerRole.Id)) { //new role if (existingAclRecords.Count(acl => acl.CustomerRoleId == customerRole.Id) == 0) { _aclService.InsertAclRecord(category, customerRole.Id); } } else { //remove role var aclRecordToDelete = existingAclRecords.FirstOrDefault(acl => acl.CustomerRoleId == customerRole.Id); if (aclRecordToDelete != null) { _aclService.DeleteAclRecord(aclRecordToDelete); } } } }
protected virtual void UpdateLocales(LibraryCategory category, LibraryCategoryModel model) { foreach (var localized in model.Locales) { _localizedEntityService.SaveLocalizedValue(category, x => x.Name, localized.Name, localized.LanguageId); _localizedEntityService.SaveLocalizedValue(category, x => x.Description, localized.Description, localized.LanguageId); _localizedEntityService.SaveLocalizedValue(category, x => x.MetaKeywords, localized.MetaKeywords, localized.LanguageId); _localizedEntityService.SaveLocalizedValue(category, x => x.MetaDescription, localized.MetaDescription, localized.LanguageId); _localizedEntityService.SaveLocalizedValue(category, x => x.MetaTitle, localized.MetaTitle, localized.LanguageId); //search engine name var seName = _urlRecordService.ValidateSeName(category, localized.SeName, localized.Name, false); _urlRecordService.SaveSlug(category, seName, localized.LanguageId); } }
public virtual IActionResult Create(LibraryCategoryModel model, bool continueEditing) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageCategories)) { return(AccessDeniedView()); } if (ModelState.IsValid) { var category = model.ToEntity <LibraryCategory>(); category.CreatedOnUtc = DateTime.UtcNow; category.UpdatedOnUtc = DateTime.UtcNow; _categoryService.InsertCategory(category); //search engine name model.SeName = _urlRecordService.ValidateSeName(category, model.SeName, category.Name, true); _urlRecordService.SaveSlug(category, model.SeName, 0); //locales UpdateLocales(category, model); //discounts var allDiscounts = _discountService.GetAllDiscounts(DiscountType.AssignedToCategories, showHidden: true); foreach (var discount in allDiscounts) { if (model.SelectedDiscountIds != null && model.SelectedDiscountIds.Contains(discount.Id)) { //category.AppliedDiscounts.Add(discount); category.DiscountCategoryMappings.Add(new DiscountCategoryMapping { Discount = discount }); } } _categoryService.UpdateCategory(category); //update picture seo file name UpdatePictureSeoNames(category); //ACL (customer roles) SaveCategoryAcl(category, model); //stores SaveStoreMappings(category, model); //activity log _customerActivityService.InsertActivity("AddNewCategory", string.Format(_localizationService.GetResource("ActivityLog.AddNewCategory"), category.Name), category); _notificationService.SuccessNotification(_localizationService.GetResource("Admin.Library.Categories.Added")); if (!continueEditing) { return(RedirectToAction("List")); } //selected tab SaveSelectedTabName(); return(RedirectToAction("Edit", new { id = category.Id })); } //prepare model model = _categoryModelFactory.PrepareCategoryModel(model, null, true); //if we got this far, something failed, redisplay form return(View(model)); }
public virtual LibraryCategoryModel PrepareCategoryModel(LibraryCategoryModel model, LibraryCategory category, bool excludeProperties = false) { Action <LibraryCategoryLocalizedModel, int> localizedModelConfiguration = null; if (category != null) { //fill in model values from the entity if (model == null) { model = category.ToModel <LibraryCategoryModel>(); model.SeName = _urlRecordService.GetSeName(category, 0, true, false); } //define localized model configuration action localizedModelConfiguration = (locale, languageId) => { locale.Name = _localizationService.GetLocalized(category, entity => entity.Name, languageId, false, false); locale.Description = _localizationService.GetLocalized(category, entity => entity.Description, languageId, false, false); locale.MetaKeywords = _localizationService.GetLocalized(category, entity => entity.MetaKeywords, languageId, false, false); locale.MetaDescription = _localizationService.GetLocalized(category, entity => entity.MetaDescription, languageId, false, false); locale.MetaTitle = _localizationService.GetLocalized(category, entity => entity.MetaTitle, languageId, false, false); locale.SeName = _urlRecordService.GetSeName(category, languageId, false, false); }; } //set default values for the new model if (category == null) { model.PageSize = _catalogSettings.DefaultCategoryPageSize; model.PageSizeOptions = _catalogSettings.DefaultCategoryPageSizeOptions; model.Published = true; model.IncludeInTopMenu = true; model.AllowCustomersToSelectPageSize = true; } //prepare localized models if (!excludeProperties) { model.Locales = _localizedModelFactory.PrepareLocalizedModels(localizedModelConfiguration); } //prepare available category templates _baseAdminModelFactory.PrepareCategoryTemplates(model.AvailableCategoryTemplates, false); //prepare available parent categories _baseAdminModelFactory.PrepareCategories(model.AvailableCategories, defaultItemText: _localizationService.GetResource("Admin.Library.Categories.Fields.Parent.None")); //prepare model discounts var availableDiscounts = _discountService.GetAllDiscounts(DiscountType.AssignedToCategories, showHidden: true); _discountSupportedModelFactory.PrepareModelDiscounts(model, category, availableDiscounts, excludeProperties); //prepare model customer roles _aclSupportedModelFactory.PrepareModelCustomerRoles(model, category, excludeProperties); //prepare model stores _storeMappingSupportedModelFactory.PrepareModelStores(model, category, excludeProperties); return(model); }