-
Notifications
You must be signed in to change notification settings - Fork 68
/
FrontendModuleInstaller.cs
141 lines (124 loc) · 6.15 KB
/
FrontendModuleInstaller.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
using System;
using System.Collections.Generic;
using System.Linq;
using Ninject;
using Telerik.Microsoft.Practices.Unity;
using Telerik.Sitefinity.Abstractions;
using Telerik.Sitefinity.Configuration;
using Telerik.Sitefinity.Frontend.Modules.Comments;
using Telerik.Sitefinity.Frontend.Mvc.Infrastructure.Controllers;
using Telerik.Sitefinity.Frontend.Services.FilesService;
using Telerik.Sitefinity.Frontend.Services.ListsService;
using Telerik.Sitefinity.Frontend.Services.ReviewsService;
using Telerik.Sitefinity.Modules.Pages;
using Telerik.Sitefinity.Modules.Pages.Configuration;
using Telerik.Sitefinity.Pages.Model;
using Telerik.Sitefinity.Services;
using Telerik.Sitefinity.Services.Comments.Notifications;
namespace Telerik.Sitefinity.Frontend
{
/// <summary>
/// Handles the logic for Feather install/initialize
/// </summary>
internal static class FrontendModuleInstaller
{
/// <summary>
/// Installs the specified initializer.
/// </summary>
/// <param name="initializer">The initializer.</param>
public static void Install(SiteInitializer initializer)
{
if (FrontendModuleInstaller.FrontendServiceExists())
FrontendModuleInstaller.InitialUpgrade(initializer);
}
/// <summary>
/// Initializes the specified settings.
/// </summary>
public static void Initialize()
{
SystemManager.RegisterServiceStackPlugin(new ListsServiceStackPlugin());
SystemManager.RegisterServiceStackPlugin(new FilesServiceStackPlugin());
IModule module = SystemManager.GetApplicationModule("Comments");
if (module != null && !(module is InactiveModule))
{
SystemManager.RegisterServiceStackPlugin(new ReviewsServiceStackPlugin());
}
}
/// <summary>
/// Bootstrapper_s the initialized.
/// </summary>
/// <param name="initializers">The initializers.</param>
public static void Bootstrapper_Initialized(IEnumerable<IInitializer> initializers)
{
foreach (var initializer in initializers)
{
using (new HealthMonitoring.MethodPerformanceRegion("Initializing '{0}'.".Arrange(initializer.GetType().Name)))
{
initializer.Initialize();
}
}
ObjectFactory.Container.RegisterType<ICommentNotificationsStrategy, ReviewNotificationStrategy>(new ContainerControlledLifetimeManager());
}
#region Install
private static bool FrontendServiceExists()
{
var systemConfig = Config.Get<SystemConfig>();
return systemConfig.SystemServices.ContainsKey(FrontendModuleInstaller.FrontendServiceName);
}
private static void InitialUpgrade(SiteInitializer initializer)
{
FrontendModuleInstaller.RemoveFrontendService();
FrontendModuleInstaller.RenameControllers(initializer);
FrontendModuleInstaller.ClearToolboxItems();
}
private static void RemoveFrontendService()
{
var configManager = ConfigManager.GetManager();
var systemConfig = configManager.GetSection<SystemConfig>();
systemConfig.SystemServices.Remove(FrontendModuleInstaller.FrontendServiceName);
configManager.SaveSection(systemConfig);
}
private static void RenameControllers(SiteInitializer initializer)
{
var manager = initializer.PageManager;
var controllerNameProperties = manager.GetControls<ControlData>()
.Where(c => c.ObjectType == "Telerik.Sitefinity.Mvc.Proxy.MvcControllerProxy" || c.ObjectType == "Telerik.Sitefinity.Frontend.Mvc.Infrastructure.Controllers.MvcWidgetProxy, Telerik.Sitefinity.Frontend")
.SelectMany(c => c.Properties.Where(p => p.Name == "ControllerName"));
foreach (var property in controllerNameProperties)
{
if (property.Value == "News.Mvc.Controllers.NewsController")
property.Value = "Telerik.Sitefinity.Frontend.News.Mvc.Controllers.NewsController";
else if (property.Value == "ContentBlock.Mvc.Controllers.ContentBlockController")
property.Value = "Telerik.Sitefinity.Frontend.ContentBlock.Mvc.Controllers.ContentBlockController";
else if (property.Value == "Navigation.Mvc.Controllers.NavigationController")
property.Value = "Telerik.Sitefinity.Frontend.Navigation.Mvc.Controllers.NavigationController";
else if (property.Value == "DynamicContent.Mvc.Controllers.DynamicContentController")
property.Value = "Telerik.Sitefinity.Frontend.DynamicContent.Mvc.Controllers.DynamicContentController";
}
}
private static void ClearToolboxItems()
{
var configManager = ConfigManager.GetManager();
var toolboxesConfig = configManager.GetSection<ToolboxesConfig>();
var pagesToolbox = toolboxesConfig.Toolboxes["PageControls"];
if (pagesToolbox == null)
return;
var mvcWidgetsSection = pagesToolbox.Sections.FirstOrDefault<ToolboxSection>(s => s.Name == "MvcWidgets");
if (mvcWidgetsSection != null)
{
FrontendModuleInstaller.RemoveToolboxItemIfExists(mvcWidgetsSection, "ContentBlock");
FrontendModuleInstaller.RemoveToolboxItemIfExists(mvcWidgetsSection, "Navigation");
FrontendModuleInstaller.RemoveToolboxItemIfExists(mvcWidgetsSection, "News");
configManager.SaveSection(toolboxesConfig);
}
}
private static void RemoveToolboxItemIfExists(ToolboxSection mvcWidgetsSection, string toolName)
{
var tool = mvcWidgetsSection.Tools.FirstOrDefault<ToolboxItem>(t => t.Name == toolName);
if (tool != null && tool.Source == ConfigSource.Database)
mvcWidgetsSection.Tools.Remove(tool);
}
private const string FrontendServiceName = "Telerik.Sitefinity.Frontend";
#endregion
}
}