private List <DynamicContentFolder> LoadFoldersRecursive(DynamicContentFolder folder) { var retVal = new List <DynamicContentFolder>(); var childrenFolders = _dynamicContentSearchService.SearchFolders(new DynamicContentFolderSearchCriteria { FolderId = folder?.Id, Take = int.MaxValue }).Results.ToList(); foreach (var childFolder in childrenFolders) { retVal.Add(childFolder); retVal.AddRange(LoadFoldersRecursive(childFolder)); } return(retVal); }
private async Task <IList <DynamicContentFolder> > LoadFoldersRecursiveAsync(DynamicContentFolder folder) { var result = new List <DynamicContentFolder>(); var childrenFolders = (await _folderSearchService.SearchFoldersAsync(new DynamicContentFolderSearchCriteria { FolderId = folder?.Id, Take = int.MaxValue })).Results.ToList(); foreach (var childFolder in childrenFolders) { result.Add(childFolder); result.AddRange(await LoadFoldersRecursiveAsync(childFolder)); } return(result); }
public void PostInitialize(IApplicationBuilder appBuilder) { _appBuilder = appBuilder; var settingsRegistrar = appBuilder.ApplicationServices.GetRequiredService <ISettingsRegistrar>(); settingsRegistrar.RegisterSettings(ModuleConstants.Settings.General.AllSettings, ModuleInfo.Id); var permissionsProvider = appBuilder.ApplicationServices.GetRequiredService <IPermissionsRegistrar>(); permissionsProvider.RegisterPermissions(ModuleConstants.Security.Permissions.AllPermissions.Select(x => new Permission() { GroupName = "Marketing", ModuleId = ModuleInfo.Id, Name = x }).ToArray()); var eventHandlerRegistrar = appBuilder.ApplicationServices.GetService <IHandlerRegistrar>(); //Create order observer. record order coupon usage eventHandlerRegistrar.RegisterHandler <DynamicContentItemChangedEvent>(async(message, token) => await appBuilder.ApplicationServices.GetService <DynamicContentItemEventHandlers>().Handle(message)); using (var serviceScope = appBuilder.ApplicationServices.CreateScope()) { var dbContext = serviceScope.ServiceProvider.GetRequiredService <MarketingDbContext>(); dbContext.Database.MigrateIfNotApplied(MigrationName.GetUpdateV2MigrationName(ModuleInfo.Id)); dbContext.Database.EnsureCreated(); dbContext.Database.Migrate(); } var dynamicContentService = appBuilder.ApplicationServices.GetService <IDynamicContentService>(); foreach (var id in new[] { ModuleConstants.MarketingConstants.ContentPlacesRootFolderId, ModuleConstants.MarketingConstants.CotentItemRootFolderId }) { var folders = dynamicContentService.GetFoldersByIdsAsync(new[] { id }).GetAwaiter().GetResult(); var rootFolder = folders.FirstOrDefault(); if (rootFolder == null) { rootFolder = new DynamicContentFolder { Id = id, Name = id }; dynamicContentService.SaveFoldersAsync(new[] { rootFolder }).GetAwaiter().GetResult(); } } //Create standard dynamic properties for dynamic content item var dynamicPropertyService = appBuilder.ApplicationServices.GetService <IDynamicPropertyService>(); var contentItemTypeProperty = new DynamicProperty { Id = "Marketing_DynamicContentItem_Type_Property", IsDictionary = true, Name = "Content type", ObjectType = typeof(DynamicContentItem).FullName, ValueType = DynamicPropertyValueType.ShortText, CreatedBy = "Auto", }; dynamicPropertyService.SaveDynamicPropertiesAsync(new[] { contentItemTypeProperty }).GetAwaiter().GetResult(); var extensionManager = appBuilder.ApplicationServices.GetService <IMarketingExtensionManager>(); extensionManager.PromotionCondition = new PromotionConditionAndRewardTree { Children = GetConditionsAndRewards() }; extensionManager.ContentCondition = new DynamicContentConditionTree() { Children = GetDynamicContentConditions() }; //Next lines allow to use polymorph types in API controller methods var mvcJsonOptions = appBuilder.ApplicationServices.GetService <IOptions <MvcJsonOptions> >(); mvcJsonOptions.Value.SerializerSettings.Converters.Add(new PolymorphicMarketingJsonConverter(appBuilder.ApplicationServices.GetService <IMarketingExtensionManager>())); mvcJsonOptions.Value.SerializerSettings.Converters.Add(new RewardJsonConverter()); AbstractTypeFactory <IConditionTree> .RegisterType <PromotionConditionAndRewardTree>(); AbstractTypeFactory <IConditionTree> .RegisterType <DynamicContentConditionTree>(); AbstractTypeFactory <IConditionTree> .RegisterType <BlockContentCondition>(); AbstractTypeFactory <IConditionTree> .RegisterType <BlockCustomerCondition>(); AbstractTypeFactory <IConditionTree> .RegisterType <ConditionIsRegisteredUser>(); AbstractTypeFactory <IConditionTree> .RegisterType <ConditionIsEveryone>(); AbstractTypeFactory <IConditionTree> .RegisterType <ConditionIsFirstTimeBuyer>(); AbstractTypeFactory <IConditionTree> .RegisterType <BlockCatalogCondition>(); AbstractTypeFactory <IConditionTree> .RegisterType <ConditionAtNumItemsInCart>(); AbstractTypeFactory <IConditionTree> .RegisterType <ConditionAtNumItemsInCategoryAreInCart>(); AbstractTypeFactory <IConditionTree> .RegisterType <ConditionAtNumItemsOfEntryAreInCart>(); AbstractTypeFactory <IConditionTree> .RegisterType <ConditionCartSubtotalLeast>(); AbstractTypeFactory <IConditionTree> .RegisterType <BlockCartCondition>(); AbstractTypeFactory <IConditionTree> .RegisterType <ConditionCategoryIs>(); AbstractTypeFactory <IConditionTree> .RegisterType <ConditionCodeContains>(); AbstractTypeFactory <IConditionTree> .RegisterType <ConditionCurrencyIs>(); AbstractTypeFactory <IConditionTree> .RegisterType <ConditionEntryIs>(); AbstractTypeFactory <IConditionTree> .RegisterType <ConditionInStockQuantity>(); AbstractTypeFactory <IConditionTree> .RegisterType <BlockReward>(); AbstractTypeFactory <IConditionTree> .RegisterType <RewardCartGetOfAbsSubtotal>(); AbstractTypeFactory <IConditionTree> .RegisterType <RewardCartGetOfRelSubtotal>(); AbstractTypeFactory <IConditionTree> .RegisterType <RewardItemGetFreeNumItemOfProduct>(); AbstractTypeFactory <IConditionTree> .RegisterType <RewardItemGetOfAbs>(); AbstractTypeFactory <IConditionTree> .RegisterType <RewardItemGetOfAbsForNum>(); AbstractTypeFactory <IConditionTree> .RegisterType <RewardItemGetOfRel>(); AbstractTypeFactory <IConditionTree> .RegisterType <RewardItemGetOfRelForNum>(); AbstractTypeFactory <IConditionTree> .RegisterType <RewardItemGiftNumItem>(); AbstractTypeFactory <IConditionTree> .RegisterType <RewardShippingGetOfAbsShippingMethod>(); AbstractTypeFactory <IConditionTree> .RegisterType <RewardShippingGetOfRelShippingMethod>(); AbstractTypeFactory <IConditionTree> .RegisterType <RewardPaymentGetOfAbs>(); AbstractTypeFactory <IConditionTree> .RegisterType <RewardPaymentGetOfRel>(); AbstractTypeFactory <IConditionTree> .RegisterType <RewardItemForEveryNumInGetOfRel>(); AbstractTypeFactory <IConditionTree> .RegisterType <RewardItemForEveryNumOtherItemInGetOfRel>(); AbstractTypeFactory <PromotionReward> .RegisterType <GiftReward>(); AbstractTypeFactory <PromotionReward> .RegisterType <CartSubtotalReward>(); AbstractTypeFactory <PromotionReward> .RegisterType <CatalogItemAmountReward>(); AbstractTypeFactory <PromotionReward> .RegisterType <PaymentReward>(); AbstractTypeFactory <PromotionReward> .RegisterType <ShipmentReward>(); AbstractTypeFactory <PromotionReward> .RegisterType <SpecialOfferReward>(); }
public void PostInitialize(IApplicationBuilder appBuilder) { _appBuilder = appBuilder; var settingsRegistrar = appBuilder.ApplicationServices.GetRequiredService <ISettingsRegistrar>(); settingsRegistrar.RegisterSettings(ModuleConstants.Settings.General.AllSettings, ModuleInfo.Id); var permissionsRegistrar = appBuilder.ApplicationServices.GetRequiredService <IPermissionsRegistrar>(); permissionsRegistrar.RegisterPermissions(ModuleConstants.Security.Permissions.AllPermissions.Select(x => new Permission() { GroupName = "Marketing", ModuleId = ModuleInfo.Id, Name = x }).ToArray()); //Register Permission scopes AbstractTypeFactory <PermissionScope> .RegisterType <MarketingStoreSelectedScope>(); permissionsRegistrar.WithAvailabeScopesForPermissions(new[] { ModuleConstants.Security.Permissions.Read }, new MarketingStoreSelectedScope()); var eventHandlerRegistrar = appBuilder.ApplicationServices.GetService <IHandlerRegistrar>(); //Create order observer. record order coupon usage eventHandlerRegistrar.RegisterHandler <OrderChangedEvent>(async(message, token) => await appBuilder.ApplicationServices.GetService <CouponUsageRecordHandler>().Handle(message)); eventHandlerRegistrar.RegisterHandler <PromotionChangedEvent>(async(message, token) => await appBuilder.ApplicationServices.GetService <LogChangesChangedEventHandler>().Handle(message)); eventHandlerRegistrar.RegisterHandler <CouponChangedEvent>(async(message, token) => await appBuilder.ApplicationServices.GetService <LogChangesChangedEventHandler>().Handle(message)); using (var serviceScope = appBuilder.ApplicationServices.CreateScope()) { var dbContext = serviceScope.ServiceProvider.GetRequiredService <MarketingDbContext>(); dbContext.Database.MigrateIfNotApplied(MigrationName.GetUpdateV2MigrationName(ModuleInfo.Id)); dbContext.Database.EnsureCreated(); dbContext.Database.Migrate(); } var dynamicPropertyRegistrar = appBuilder.ApplicationServices.GetRequiredService <IDynamicPropertyRegistrar>(); dynamicPropertyRegistrar.RegisterType <DynamicContentItem>(); var dynamicContentService = appBuilder.ApplicationServices.GetService <IDynamicContentService>(); foreach (var id in new[] { ModuleConstants.MarketingConstants.ContentPlacesRootFolderId, ModuleConstants.MarketingConstants.CotentItemRootFolderId }) { var folders = dynamicContentService.GetFoldersByIdsAsync(new[] { id }).GetAwaiter().GetResult(); var rootFolder = folders.FirstOrDefault(); if (rootFolder == null) { rootFolder = new DynamicContentFolder { Id = id, Name = id }; dynamicContentService.SaveFoldersAsync(new[] { rootFolder }).GetAwaiter().GetResult(); } } //Create standard dynamic properties for dynamic content item var dynamicPropertyService = appBuilder.ApplicationServices.GetService <IDynamicPropertyService>(); var contentItemTypeProperty = new DynamicProperty { Id = "Marketing_DynamicContentItem_Type_Property", IsDictionary = true, Name = "Content type", ObjectType = typeof(DynamicContentItem).FullName, ValueType = DynamicPropertyValueType.ShortText, CreatedBy = "Auto", }; dynamicPropertyService.SaveDynamicPropertiesAsync(new[] { contentItemTypeProperty }).GetAwaiter().GetResult(); PolymorphJsonConverter.RegisterTypeForDiscriminator(typeof(PromotionReward), nameof(PromotionReward.Id)); //Register the resulting trees expressions into the AbstractFactory<IConditionTree> foreach (var conditionTree in AbstractTypeFactory <PromotionConditionAndRewardTreePrototype> .TryCreateInstance().Traverse <IConditionTree>(x => x.AvailableChildren)) { AbstractTypeFactory <IConditionTree> .RegisterType(conditionTree.GetType()); } foreach (var conditionTree in AbstractTypeFactory <DynamicContentConditionTreePrototype> .TryCreateInstance().Traverse <IConditionTree>(x => x.AvailableChildren)) { AbstractTypeFactory <IConditionTree> .RegisterType(conditionTree.GetType()); } }