added globally unique identifier for Site ( used string data type to ensure compatibility with multiple database engines )
This commit is contained in:
		| @ -1,6 +1,5 @@ | ||||
| using Microsoft.AspNetCore.Hosting; | ||||
| using Microsoft.Extensions.DependencyInjection; | ||||
| using Oqtane.Extensions; | ||||
| using Oqtane.Models; | ||||
| using Oqtane.Repository; | ||||
| using Oqtane.Shared; | ||||
| @ -25,80 +24,94 @@ namespace Oqtane.Infrastructure | ||||
|  | ||||
|         public void Upgrade(Tenant tenant, string version) | ||||
|         { | ||||
|             // core framework upgrade logic - note that you can check if current tenant is Master if you only want to execute the logic once | ||||
|             switch (version) | ||||
|             // core framework upgrade logic - executed for every tenant | ||||
|             using (var scope = _serviceScopeFactory.CreateScope()) | ||||
|             { | ||||
|                 case "0.9.0": | ||||
|                     // this code is commented out on purpose - it provides an example of how to programmatically add a page to all existing sites on upgrade | ||||
|                     var pageTemplates = new List<PageTemplate>(); | ||||
|                     //pageTemplates.Add(new PageTemplate | ||||
|                     //{ | ||||
|                     //    Name = "Test", | ||||
|                     //    Parent = "", | ||||
|                     //    Path = "test", | ||||
|                     //    Icon = Icons.Badge, | ||||
|                     //    IsNavigation = true, | ||||
|                     //    IsPersonalizable = false, | ||||
|                     //    EditMode = false, | ||||
|                     //    PagePermissions = new List<Permission> | ||||
|                     //    { | ||||
|                     //        new Permission(PermissionNames.View, RoleNames.Admin, true), | ||||
|                     //        new Permission(PermissionNames.View, RoleNames.Everyone, true), | ||||
|                     //        new Permission(PermissionNames.Edit, RoleNames.Admin, true) | ||||
|                     //    }.EncodePermissions(), | ||||
|                     //            PageTemplateModules = new List<PageTemplateModule> | ||||
|                     //    { | ||||
|                     //        new PageTemplateModule | ||||
|                     //        { | ||||
|                     //            ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Login.Index).ToModuleDefinitionName(), Title = "Test", Pane = "Content", | ||||
|                     //            ModulePermissions = new List<Permission> | ||||
|                     //            { | ||||
|                     //                new Permission(PermissionNames.View, RoleNames.Admin, true), | ||||
|                     //                new Permission(PermissionNames.View, RoleNames.Everyone, true), | ||||
|                     //                new Permission(PermissionNames.Edit, RoleNames.Admin, true) | ||||
|                     //            }.EncodePermissions(), | ||||
|                     //            Content = "" | ||||
|                     //        } | ||||
|                     //    } | ||||
|                     //}); | ||||
|                     CreateSitePages(tenant, pageTemplates); | ||||
|                     break; | ||||
|                 case "2.0.2": | ||||
|                     if (tenant.Name == TenantNames.Master) | ||||
|                     { | ||||
|                         // remove Internal module template files as they are no longer supported | ||||
|                         var internalTemplatePath = Utilities.PathCombine(_environment.WebRootPath, "Modules", "Templates", "Internal", Path.DirectorySeparatorChar.ToString()); | ||||
|                         if (Directory.Exists(internalTemplatePath)) | ||||
|                         { | ||||
|                             Directory.Delete(internalTemplatePath, true); | ||||
|                         } | ||||
|                     } | ||||
|                     break; | ||||
|                 // set SiteState based on tenant | ||||
|                 var siteState = scope.ServiceProvider.GetRequiredService<SiteState>(); | ||||
|                 siteState.Alias = new Alias { TenantId = tenant.TenantId }; | ||||
|  | ||||
|                 switch (version) | ||||
|                 { | ||||
|                     case "1.0.0": | ||||
|                         Upgrade_1_0_0(tenant, scope); | ||||
|                         break; | ||||
|                     case "2.0.2": | ||||
|                         Upgrade_2_0_2(tenant, scope); | ||||
|                         break; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         private void CreateSitePages(Tenant tenant, List<PageTemplate> pageTemplates) | ||||
|         private void Upgrade_1_0_0(Tenant tenant, IServiceScope scope) | ||||
|         { | ||||
|             var pageTemplates = new List<PageTemplate>(); | ||||
|  | ||||
|             // **Note: this code is commented out on purpose - it provides an example of how to programmatically add a page to all existing sites on upgrade | ||||
|  | ||||
|             //pageTemplates.Add(new PageTemplate | ||||
|             //{ | ||||
|             //    Name = "Test", | ||||
|             //    Parent = "", | ||||
|             //    Path = "test", | ||||
|             //    Icon = Icons.Badge, | ||||
|             //    IsNavigation = true, | ||||
|             //    IsPersonalizable = false, | ||||
|             //    EditMode = false, | ||||
|             //    PagePermissions = new List<Permission> | ||||
|             //    { | ||||
|             //        new Permission(PermissionNames.View, RoleNames.Admin, true), | ||||
|             //        new Permission(PermissionNames.View, RoleNames.Everyone, true), | ||||
|             //        new Permission(PermissionNames.Edit, RoleNames.Admin, true) | ||||
|             //    }.EncodePermissions(), | ||||
|             //            PageTemplateModules = new List<PageTemplateModule> | ||||
|             //    { | ||||
|             //        new PageTemplateModule | ||||
|             //        { | ||||
|             //            ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Login.Index).ToModuleDefinitionName(), Title = "Test", Pane = "Content", | ||||
|             //            ModulePermissions = new List<Permission> | ||||
|             //            { | ||||
|             //                new Permission(PermissionNames.View, RoleNames.Admin, true), | ||||
|             //                new Permission(PermissionNames.View, RoleNames.Everyone, true), | ||||
|             //                new Permission(PermissionNames.Edit, RoleNames.Admin, true) | ||||
|             //            }.EncodePermissions(), | ||||
|             //            Content = "" | ||||
|             //        } | ||||
|             //    } | ||||
|             //}); | ||||
|  | ||||
|             CreateSitePages(scope, pageTemplates); | ||||
|         } | ||||
|  | ||||
|         private void Upgrade_2_0_2(Tenant tenant, IServiceScope scope) | ||||
|         { | ||||
|             if (tenant.Name == TenantNames.Master) | ||||
|             { | ||||
|                 // remove Internal module template files as they are no longer supported | ||||
|                 var internalTemplatePath = Utilities.PathCombine(_environment.WebRootPath, "Modules", "Templates", "Internal", Path.DirectorySeparatorChar.ToString()); | ||||
|                 if (Directory.Exists(internalTemplatePath)) | ||||
|                 { | ||||
|                     Directory.Delete(internalTemplatePath, true); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             // initialize SiteGuid | ||||
|             var sites = scope.ServiceProvider.GetRequiredService<ISiteRepository>(); | ||||
|             foreach (Site site in sites.GetSites().ToList()) | ||||
|             { | ||||
|                 site.SiteGuid = System.Guid.NewGuid().ToString(); | ||||
|                 sites.UpdateSite(site); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         private void CreateSitePages(IServiceScope scope, List<PageTemplate> pageTemplates) | ||||
|         { | ||||
|             if (pageTemplates.Count != 0) | ||||
|             { | ||||
|                 var processed = new List<Site>(); | ||||
|                 foreach (Alias alias in _aliases.GetAliases().Where(item => item.TenantId == tenant.TenantId)) | ||||
|                 var sites = scope.ServiceProvider.GetRequiredService<ISiteRepository>(); | ||||
|                 foreach (Site site in sites.GetSites().ToList()) | ||||
|                 { | ||||
|                     if (!processed.Exists(item => item.SiteId == alias.SiteId)) | ||||
|                     { | ||||
|                         using (var scope = _serviceScopeFactory.CreateScope()) | ||||
|                         { | ||||
|                             var siteState = scope.ServiceProvider.GetRequiredService<SiteState>(); | ||||
|                             siteState.Alias = alias; | ||||
|                             var sites = scope.ServiceProvider.GetRequiredService<ISiteRepository>(); | ||||
|                             var site = sites.GetSite(alias.SiteId); | ||||
|                             if (site != null) | ||||
|                             { | ||||
|                                 sites.CreatePages(site, pageTemplates); | ||||
|                             } | ||||
|                             processed.Add(site); | ||||
|                         } | ||||
|                     } | ||||
|                     sites.CreatePages(site, pageTemplates); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Shaun Walker
					Shaun Walker