Skip to content

Commit 20ac52e

Browse files
authored
Merge pull request #3647 from 2sic/develop
minor v20
2 parents 53884b0 + 1cb7c7f commit 20ac52e

6 files changed

Lines changed: 101 additions & 46 deletions

File tree

Src/Dnn/ToSic.Sxc.Dnn/StartUp/DnnDi.cs

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@
1111
using ToSic.Sxc.Dnn.Startup;
1212
using ToSic.Sxc.Engines;
1313
using ToSic.Sxc.Images;
14-
using ToSic.Sxc.Services;
1514
using ToSic.Sxc.Startup;
16-
using ToSic.Sxc.Web;
1715

1816

1917
namespace ToSic.Sxc.Dnn.StartUp;
@@ -37,7 +35,6 @@ public static IServiceCollection RegisterServices(IServiceCollection services)
3735
l.A("Will start with DNN parts");
3836
services
3937
.AddDnnPlugins()
40-
.AddObsoleteServicesAndKits()
4138
.AddDnnCore() // TODO: Move core stuff from AddDnn to AddDnnCore and make implementations internal
4239
.AddDnnSxcDataSources()
4340
.AddDnnDataSources()
@@ -69,6 +66,7 @@ public static IServiceCollection RegisterServices(IServiceCollection services)
6966
.AddSxcRender()
7067
.AddSxcCms()
7168
.AddSxcServices()
69+
.AddSxcServicesObsolete()
7270
.AddSxcWeb()
7371
.AddSxcLightSpeed()
7472
.AddSxcCodeGen() // Code generation services
@@ -103,14 +101,4 @@ public static IServiceCollection AddDnnPlugins(this IServiceCollection services)
103101
return services;
104102
}
105103

106-
107-
#pragma warning disable CS0612 // Type or member is obsolete
108-
#pragma warning disable CS0618 // Type or member is obsolete
109-
public static IServiceCollection AddObsoleteServicesAndKits(this IServiceCollection services)
110-
{
111-
services.TryAddTransient<ToSic.Sxc.Web.IPageService, WebPageServiceObsolete>(); // Obsolete version, needed to keep old Apps working which used this
112-
return services;
113-
}
114-
#pragma warning restore CS0618 // Type or member is obsolete
115-
#pragma warning restore CS0618 // Type or member is obsolete
116104
}

Src/Oqtane/ToSic.Sxc.Oqt.Server/Installation/SxcManager.cs

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
1+
using Microsoft.AspNetCore.Hosting;
2+
using Microsoft.Extensions.DependencyInjection;
3+
using Microsoft.Extensions.Logging;
14
using Oqtane.Infrastructure;
25
using Oqtane.Models;
36
using Oqtane.Repository;
7+
using System.Reflection;
8+
using Microsoft.Extensions.Hosting;
9+
using Oqtane.Shared;
10+
using LogLevel = Microsoft.Extensions.Logging.LogLevel;
411

512
namespace ToSic.Sxc.Oqt.Server.Installation;
613

@@ -11,15 +18,72 @@ namespace ToSic.Sxc.Oqt.Server.Installation;
1118
/// WARNING: Careful when renaming / moving, the name is listed in the ModuleInfo.cs in the Client.
1219
/// </remarks>
1320
[ShowApiWhenReleased(ShowApiMode.Never)]
14-
public class SxcManager(ISqlRepository sql) : IInstallable
21+
public class SxcManager(ISqlRepository sql, IServiceScopeFactory serviceScopeFactory, IWebHostEnvironment environment, IConfigManager configManager, ILogger<UpgradeManager> filelogger) : IInstallable
1522
{
1623
public bool Install(Tenant tenant, string version)
1724
{
25+
filelogger.Log(LogLevel.Information, Utilities.LogMessage(this, $"2sxc install: {nameof(Install)} {version}"));
26+
27+
// core framework upgrade logic - executed for every tenant
28+
using (var scope = serviceScopeFactory.CreateScope())
29+
{
30+
// set tenant
31+
var tenantManager = scope.ServiceProvider.GetRequiredService<ITenantManager>();
32+
tenantManager.SetTenant(tenant.TenantId);
33+
34+
switch (version.Replace(".", "-"))
35+
{
36+
case "20-00-00":
37+
Upgrade_20_00_00(tenant, scope, version);
38+
break;
39+
40+
}
41+
}
42+
1843
return sql.ExecuteScript(tenant, GetType().Assembly, "ToSic.Sxc." + version + ".sql");
1944
}
2045

2146
public bool Uninstall(Tenant tenant)
2247
{
2348
return sql.ExecuteScript(tenant, GetType().Assembly, "ToSic.Sxc.Uninstall.sql");
2449
}
50+
51+
private void Upgrade_20_00_00(Tenant tenant, IServiceScope scope, string version)
52+
{
53+
filelogger.Log(LogLevel.Information, Utilities.LogMessage(this, $"2sxc install: {nameof(Upgrade_20_00_00)} {version}"));
54+
55+
string[] assemblies = [
56+
"ToSic.Sxc.dll",
57+
"ToSic.Eav.dll",
58+
"ToSic.Eav.Core.dll",
59+
"ToSic.Lib.Core.dll"
60+
];
61+
62+
RemoveAssemblies(tenant, assemblies, version);
63+
}
64+
65+
private void RemoveAssemblies(Tenant tenant, string[] assemblies, string version)
66+
{
67+
filelogger.Log(LogLevel.Information, Utilities.LogMessage(this, $"2sxc install: {nameof(RemoveAssemblies)} assemblies:{assemblies.Length}, version:{version}"));
68+
69+
// in a development environment assemblies cannot be removed as the debugger runs from /bin folder and locks the files
70+
if (tenant.Name == TenantNames.Master && !environment.IsDevelopment())
71+
{
72+
foreach (var assembly in assemblies)
73+
{
74+
try
75+
{
76+
var binFolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
77+
var filepath = Path.Combine(binFolder, assembly);
78+
filelogger.Log(LogLevel.Information, Utilities.LogMessage(this, $"2sxc install: {version} Removing {assembly} - '{filepath}'"));
79+
if (System.IO.File.Exists(filepath)) System.IO.File.Delete(filepath);
80+
}
81+
catch (Exception ex)
82+
{
83+
// error deleting assembly
84+
filelogger.LogError(Utilities.LogMessage(this, $"2sxc install Error: {version} Upgrade Error Removing {assembly} - {ex}"));
85+
}
86+
}
87+
}
88+
}
2589
}

Src/Oqtane/ToSic.Sxc.Oqt.Server/StartUp/OqtStartup.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ public void ConfigureServices(IServiceCollection services)
7878
.AddSxcRender()
7979
.AddSxcCms()
8080
.AddSxcServices()
81+
.AddSxcServicesObsolete()
8182
.AddSxcWeb()
8283
.AddSxcLightSpeed() // LightSpeed services
8384
.AddSxcCodeGen() // Code generation services

Src/Sxc/ToSic.Sxc.Services/Services/SxcServicesStartup.cs renamed to Src/Sxc/ToSic.Sxc.Services/SxcServicesStartup.cs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Microsoft.Extensions.DependencyInjection;
22
using Microsoft.Extensions.DependencyInjection.Extensions;
33
using ToSic.Sxc.Images;
4+
using ToSic.Sxc.Services;
45
using ToSic.Sxc.Services.Cache;
56
using ToSic.Sxc.Services.CmsService.Internal;
67
using ToSic.Sxc.Services.DataServices;
@@ -11,8 +12,10 @@
1112
using ToSic.Sxc.Services.Page.Sys;
1213
using ToSic.Sxc.Services.Templates;
1314
using ToSic.Sxc.Services.User.Sys;
15+
using ToSic.Sxc.Web;
1416

15-
namespace ToSic.Sxc.Services;
17+
// ReSharper disable once CheckNamespace
18+
namespace ToSic.Sxc.Startup;
1619

1720
[ShowApiWhenReleased(ShowApiMode.Never)]
1821
public static class SxcServicesStartup
@@ -21,7 +24,7 @@ public static class SxcServicesStartup
2124
public static IServiceCollection AddSxcServices(this IServiceCollection services)
2225
{
2326
// new in v12.02 - PageService & Page Features
24-
services.TryAddTransient<IPageService, PageService>(); // must be unique per module where it's used
27+
services.TryAddTransient<Services.IPageService, PageService>(); // must be unique per module where it's used
2528

2629
//services.AddObsoleteServicesAndKits();
2730

@@ -45,7 +48,7 @@ public static IServiceCollection AddSxcServices(this IServiceCollection services
4548
// V15
4649
services.TryAddScoped<IModuleService, ModuleService>(); // Must be scoped & shared on the module
4750
services.TryAddTransient<ITurnOnService, TurnOnService>();
48-
services.TryAddTransient<ICmsService, CmsService.Internal.CmsService>();
51+
services.TryAddTransient<ICmsService, CmsService>();
4952
services.TryAddTransient<CmsServiceStringWysiwyg>();
5053
services.TryAddTransient<CmsServiceImageExtractor>();
5154
services.TryAddTransient<IDataService, DataService>();
@@ -112,5 +115,16 @@ public static IServiceCollection AddSxcServicesFallbacks(this IServiceCollection
112115
return services;
113116
}
114117

118+
#pragma warning disable CS0612 // Type or member is obsolete
119+
#pragma warning disable CS0618 // Type or member is obsolete
120+
public static IServiceCollection AddSxcServicesObsolete(this IServiceCollection services)
121+
{
122+
// Obsolete version, needed to keep old Apps working which used this
123+
services.TryAddTransient<Web.IPageService, WebPageServiceObsolete>();
124+
return services;
125+
}
126+
#pragma warning restore CS0618 // Type or member is obsolete
127+
#pragma warning restore CS0618 // Type or member is obsolete
128+
115129

116130
}

Src/Dnn/ToSic.Sxc.Dnn.Core/CompatibilityStopped/ToSic.Sxc.Web.IPageService.Obsolete.cs renamed to Src/Sxc/ToSic.Sxc.Services/Web/IPageService.Obsolete.cs

File renamed without changes.

Src/Dnn/ToSic.Sxc.Dnn.Core/CompatibilityStopped/ToSic.Sxc.Web.PageServiceObsolete.cs renamed to Src/Sxc/ToSic.Sxc.Services/Web/Web.PageServiceObsolete.cs

Lines changed: 17 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,9 @@ namespace ToSic.Sxc.Web;
1010
/// The apps will get it using `var page = GetService{ToSic.Sxc.Web.IPageService}()` or similar.
1111
/// </summary>
1212
[Obsolete]
13-
internal class WebPageServiceObsolete : IPageService, INeedsExecutionContext
13+
internal class WebPageServiceObsolete(Services.IPageService pageServiceImplementation)
14+
: IPageService, INeedsExecutionContext
1415
{
15-
private readonly Services.IPageService _pageServiceImplementation;
16-
17-
/// <summary>
18-
/// This is the obsolete version of the PageService, which is needed to keep old Apps working which used this.
19-
/// The apps will get it using `var page = GetService{ToSic.Sxc.Web.IPageService}()` or similar.
20-
/// </summary>
21-
/// <param name="pageServiceImplementation"></param>
22-
public WebPageServiceObsolete(Services.IPageService pageServiceImplementation)
23-
{
24-
throw new("The interface ToSic.Sxc.Web.IPageService has been replaced with ToSic.Sxc.Services.IPageService. Deprecated since v12, removed in v20.");
25-
_pageServiceImplementation = pageServiceImplementation;
26-
}
27-
2816
/// <summary>
2917
/// Forward execution context to the actual implementation.
3018
///
@@ -33,80 +21,80 @@ public WebPageServiceObsolete(Services.IPageService pageServiceImplementation)
3321
/// <param name="exCtx"></param>
3422
public void ConnectToRoot(IExecutionContext exCtx)
3523
{
36-
(_pageServiceImplementation as INeedsExecutionContext)?.ConnectToRoot(exCtx);
24+
(pageServiceImplementation as INeedsExecutionContext)?.ConnectToRoot(exCtx);
3725
}
3826

3927
public string SetBase(string url = null)
4028
{
41-
return _pageServiceImplementation.SetBase(url);
29+
return pageServiceImplementation.SetBase(url);
4230
}
4331

4432
public string SetTitle(string value, string placeholder = null)
4533
{
46-
return _pageServiceImplementation.SetTitle(value, placeholder);
34+
return pageServiceImplementation.SetTitle(value, placeholder);
4735
}
4836

4937
public string SetDescription(string value, string placeholder = null)
5038
{
51-
return _pageServiceImplementation.SetDescription(value, placeholder);
39+
return pageServiceImplementation.SetDescription(value, placeholder);
5240
}
5341

5442
public string SetKeywords(string value, string placeholder = null)
5543
{
56-
return _pageServiceImplementation.SetKeywords(value, placeholder);
44+
return pageServiceImplementation.SetKeywords(value, placeholder);
5745
}
5846

5947
public string SetHttpStatus(int statusCode, string message = null)
6048
{
61-
return _pageServiceImplementation.SetHttpStatus(statusCode, message);
49+
return pageServiceImplementation.SetHttpStatus(statusCode, message);
6250
}
6351

6452
public string AddToHead(string tag)
6553
{
66-
return _pageServiceImplementation.AddToHead(tag);
54+
return pageServiceImplementation.AddToHead(tag);
6755
}
6856

6957
public string AddToHead(IHtmlTag tag)
7058
{
71-
return _pageServiceImplementation.AddToHead(tag);
59+
return pageServiceImplementation.AddToHead(tag);
7260
}
7361

7462
public string AddMeta(string name, string content)
7563
{
76-
return _pageServiceImplementation.AddMeta(name, content);
64+
return pageServiceImplementation.AddMeta(name, content);
7765
}
7866

7967
public string AddOpenGraph(string property, string content)
8068
{
81-
return _pageServiceImplementation.AddOpenGraph(property, content);
69+
return pageServiceImplementation.AddOpenGraph(property, content);
8270
}
8371

8472
public string AddJsonLd(string jsonString)
8573
{
86-
return _pageServiceImplementation.AddJsonLd(jsonString);
74+
return pageServiceImplementation.AddJsonLd(jsonString);
8775
}
8876

8977
public string AddJsonLd(object jsonObject)
9078
{
91-
return _pageServiceImplementation.AddJsonLd(jsonObject);
79+
return pageServiceImplementation.AddJsonLd(jsonObject);
9280
}
9381

9482
public string AddIcon(string path, NoParamOrder noParamOrder = default, string rel = "", int size = 0,
9583
string type = null)
9684
{
97-
return _pageServiceImplementation.AddIcon(path, noParamOrder, rel, size, type);
85+
return pageServiceImplementation.AddIcon(path, noParamOrder, rel, size, type);
9886
}
9987

10088
public string AddIconSet(string path, NoParamOrder noParamOrder = default, object favicon = null,
10189
IEnumerable<string> rels = null,
10290
IEnumerable<int> sizes = null)
10391
{
104-
return _pageServiceImplementation.AddIconSet(path, noParamOrder, favicon, rels, sizes);
92+
return pageServiceImplementation.AddIconSet(path, noParamOrder, favicon, rels, sizes);
10593
}
10694

10795
public string Activate(params string[] keys)
10896
{
109-
return _pageServiceImplementation.Activate(keys);
97+
return pageServiceImplementation.Activate(keys);
11098
}
11199

112100
}

0 commit comments

Comments
 (0)