diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index 3a7cbc4429..1577442ede 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -492,6 +492,7 @@ + diff --git a/src/Umbraco.Web.UI/Umbraco/developer/Packages/installer.aspx b/src/Umbraco.Web.UI/Umbraco/developer/Packages/installer.aspx new file mode 100644 index 0000000000..37dca8400e --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/developer/Packages/installer.aspx @@ -0,0 +1,10 @@ +<%@ Page Language="c#" MasterPageFile="../../masterpages/umbracoPage.Master" +AutoEventWireup="True" Inherits="umbraco.presentation.developer.packages.Installer" Trace="false" ValidateRequest="false" %> +<%@ Register TagPrefix="cc1" Namespace="umbraco.uicontrols" Assembly="controls" %> + + + + + + + diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index c9ad24d4a1..a38d30f498 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -541,6 +541,9 @@ + + ASPXCodeBehind + diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/developer/Packages/installer.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/developer/Packages/installer.aspx.cs new file mode 100644 index 0000000000..ba02edbf9c --- /dev/null +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/developer/Packages/installer.aspx.cs @@ -0,0 +1,101 @@ +using System; +using System.Web.UI; +using umbraco.BasePages; +using umbraco.BusinessLogic; +using umbraco.cms.presentation.Trees; +using Umbraco.Core; +using Umbraco.Core.IO; +using Umbraco.Core.Logging; +using Umbraco.Web; + +namespace umbraco.presentation.developer.packages +{ + /// + /// Summary description for packager. + /// + [Obsolete("This should not be used and will be removed in v8, this is kept here only for backwards compat reasons, this page should never be rendered/used")] + public class Installer : UmbracoEnsuredPage + { + + private Control _configControl; + private readonly cms.businesslogic.packager.Installer _installer; + protected uicontrols.Pane pane_installing; + protected uicontrols.Pane pane_optional; + + public Installer() + { + CurrentApp = DefaultApps.developer.ToString(); + _installer = new cms.businesslogic.packager.Installer(UmbracoUser.Id); + } + + protected void Page_Load(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(Request.GetItemAsString("installing"))) + return; + + pane_optional.Visible = false; + pane_installing.Visible = true; + ProcessInstall(Request.GetItemAsString("installing")); + } + + private void ProcessInstall(string currentStep) + { + var dir = Request.GetItemAsString("dir"); + + int.TryParse(Request.GetItemAsString("pId"), out var packageId); + + switch (currentStep.ToLowerInvariant()) + { + case "custominstaller": + var customControl = Request.GetItemAsString("customControl"); + + if (customControl.IsNullOrWhiteSpace() == false) + { + pane_optional.Visible = false; + + _configControl = LoadControl(SystemDirectories.Root + customControl); + _configControl.ID = "packagerConfigControl"; + + pane_optional.Controls.Add(_configControl); + pane_optional.Visible = true; + + if (IsPostBack == false) + { + //We still need to clean everything up which is normally done in the Finished Action + PerformPostInstallCleanup(packageId, dir); + } + + } + else + { + //if the custom installer control is empty here (though it should never be because we've already checked for it previously) + //then we should run the normal FinishedAction + PerformFinishedAction(packageId, dir); + } + break; + default: + break; + } + } + + private void PerformPostInstallCleanup(int packageId, string dir) + { + _installer.InstallCleanUp(packageId, dir); + + // Update ClientDependency version + var clientDependencyConfig = new Umbraco.Core.Configuration.ClientDependencyConfiguration(LoggerResolver.Current.Logger); + clientDependencyConfig.IncreaseVersionNumber(); + + //clear the tree cache - we'll do this here even though the browser will reload, but just in case it doesn't can't hurt. + ClientTools.ClearClientTreeCache().RefreshTree("packager"); + TreeDefinitionCollection.Instance.ReRegisterTrees(); + BusinessLogic.Actions.Action.ReRegisterActionsAndHandlers(); + } + + private void PerformFinishedAction(int packageId, string dir) + { + pane_optional.Visible = false; + PerformPostInstallCleanup(packageId, dir); + } + } +}