Merge pull request #2341 from sbwalker/dev

Fix #2339 - refactor module upgrade logic to  remove requirement on ServerManagerType for modules which have no backend
This commit is contained in:
Shaun Walker 2022-08-06 16:13:53 -04:00 committed by GitHub
commit d35c204e07
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -485,63 +485,67 @@ namespace Oqtane.Infrastructure
foreach (var moduleDefinition in moduleDefinitions.GetModuleDefinitions()) foreach (var moduleDefinition in moduleDefinitions.GetModuleDefinitions())
{ {
if (!string.IsNullOrEmpty(moduleDefinition.ReleaseVersions) && !string.IsNullOrEmpty(moduleDefinition.ServerManagerType)) if (!string.IsNullOrEmpty(moduleDefinition.ReleaseVersions))
{ {
var moduleType = Type.GetType(moduleDefinition.ServerManagerType); var versions = moduleDefinition.ReleaseVersions.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
if (moduleType != null) using (var db = GetInstallationContext())
{ {
var versions = moduleDefinition.ReleaseVersions.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); if (!string.IsNullOrEmpty(moduleDefinition.ServerManagerType))
using (var db = GetInstallationContext())
{ {
foreach (var tenant in db.Tenant.ToList()) var moduleType = Type.GetType(moduleDefinition.ServerManagerType);
if (moduleType != null)
{ {
var index = Array.FindIndex(versions, item => item == moduleDefinition.Version); foreach (var tenant in db.Tenant.ToList())
if (tenant.Name == install.TenantName && install.TenantName != TenantNames.Master)
{ {
index = -1; var index = Array.FindIndex(versions, item => item == moduleDefinition.Version);
} if (tenant.Name == install.TenantName && install.TenantName != TenantNames.Master)
if (index != (versions.Length - 1))
{
for (var i = (index + 1); i < versions.Length; i++)
{ {
try index = -1;
}
if (index != (versions.Length - 1))
{
for (var i = (index + 1); i < versions.Length; i++)
{ {
if (moduleType.GetInterface("IInstallable") != null) try
{ {
tenantManager.SetTenant(tenant.TenantId); if (moduleType.GetInterface("IInstallable") != null)
var moduleObject = ActivatorUtilities.CreateInstance(scope.ServiceProvider, moduleType) as IInstallable;
if (moduleObject == null || !moduleObject.Install(tenant, versions[i]))
{ {
result.Message = "An Error Occurred Executing IInstallable Interface For " + moduleDefinition.ServerManagerType; tenantManager.SetTenant(tenant.TenantId);
var moduleObject = ActivatorUtilities.CreateInstance(scope.ServiceProvider, moduleType) as IInstallable;
if (moduleObject == null || !moduleObject.Install(tenant, versions[i]))
{
result.Message = "An Error Occurred Executing IInstallable Interface For " + moduleDefinition.ServerManagerType;
}
}
else
{
if (!sql.ExecuteScript(tenant, moduleType.Assembly, Utilities.GetTypeName(moduleDefinition.ModuleDefinitionName) + "." + versions[i] + ".sql"))
{
result.Message = "An Error Occurred Executing Database Script " + Utilities.GetTypeName(moduleDefinition.ModuleDefinitionName) + "." + versions[i] + ".sql";
}
} }
} }
else catch (Exception ex)
{ {
if (!sql.ExecuteScript(tenant, moduleType.Assembly, Utilities.GetTypeName(moduleDefinition.ModuleDefinitionName) + "." + versions[i] + ".sql")) result.Message = "An Error Occurred Installing " + moduleDefinition.Name + " Version " + versions[i] + " - " + ex.Message;
{
result.Message = "An Error Occurred Executing Database Script " + Utilities.GetTypeName(moduleDefinition.ModuleDefinitionName) + "." + versions[i] + ".sql";
}
} }
} }
catch (Exception ex)
{
result.Message = "An Error Occurred Installing " + moduleDefinition.Name + " Version " + versions[i] + " - " + ex.Message;
}
} }
} }
} }
if (string.IsNullOrEmpty(result.Message) && moduleDefinition.Version != versions[versions.Length - 1]) }
{
// get module definition from database to retain user customizable property values if (string.IsNullOrEmpty(result.Message) && moduleDefinition.Version != versions[versions.Length - 1])
var moduledef = db.ModuleDefinition.AsNoTracking().FirstOrDefault(item => item.ModuleDefinitionId == moduleDefinition.ModuleDefinitionId); {
moduleDefinition.Name = moduledef.Name; // get module definition from database to retain user customizable property values
moduleDefinition.Description = moduledef.Description; var moduledef = db.ModuleDefinition.AsNoTracking().FirstOrDefault(item => item.ModuleDefinitionId == moduleDefinition.ModuleDefinitionId);
moduleDefinition.Categories = moduledef.Categories; moduleDefinition.Name = moduledef.Name;
// update version moduleDefinition.Description = moduledef.Description;
moduleDefinition.Version = versions[versions.Length - 1]; moduleDefinition.Categories = moduledef.Categories;
db.Entry(moduleDefinition).State = EntityState.Modified; // update version
db.SaveChanges(); moduleDefinition.Version = versions[versions.Length - 1];
} db.Entry(moduleDefinition).State = EntityState.Modified;
db.SaveChanges();
} }
} }
} }