diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Virtualization/VirtualizationErrorCodes.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Virtualization/VirtualizationErrorCodes.cs index 7c92ee9f..4e51f34e 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Virtualization/VirtualizationErrorCodes.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Virtualization/VirtualizationErrorCodes.cs @@ -115,6 +115,8 @@ // Replication public const string SET_REPLICA_SERVER_ERROR = "SET_REPLICA_SERVER_ERROR"; + public const string SET_NO_REPLICA_SERVER_ERROR = "SET_NO_REPLICA_SERVER_ERROR"; + public const string SET_SET_REPLICATION_ERROR = "SET_SET_REPLICATION_ERROR"; public const string HOST_NAMER_IS_ALREADY_USED = "HOST_NAMER_IS_ALREADY_USED"; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Virtualization2012/VirtualizationServerController2012.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Virtualization2012/VirtualizationServerController2012.cs index 79a19aeb..f84f9849 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Virtualization2012/VirtualizationServerController2012.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Virtualization2012/VirtualizationServerController2012.cs @@ -3751,6 +3751,50 @@ namespace WebsitePanel.EnterpriseServer return vs.IsReplicaServer(remoteServer); } + public static VmReplication GetReplication(int itemId) + { + VirtualMachine vm = GetVirtualMachineByItemId(itemId); + VirtualizationServer2012 vs = GetVirtualizationProxy(vm.ServiceId); + return vs.GetReplication(vm.VirtualMachineId); + } + + public static ResultObject SetVmReplication(int itemId, string replicaServer, VmReplication replication) + { + ResultObject result = new ResultObject(); + try + { + VirtualMachine vm = GetVirtualMachineByItemId(itemId); + VirtualizationServer2012 vs = GetVirtualizationProxy(vm.ServiceId); + + // Get replica server name + StringDictionary vsSesstings = ServerController.GetServiceSettings(vm.ServiceId); + string replicaServiceId = vsSesstings["ReplicaServerId"]; + + if (string.IsNullOrEmpty(replicaServiceId)) + { + result.ErrorCodes.Add(VirtualizationErrorCodes.SET_NO_REPLICA_SERVER_ERROR); + return result; + } + + //StringDictionary vsSesstings = ServerController.GetServiceSettings(vm.replicaServiceId); + //string replicaServiceId = vsSesstings["ReplicaServerId"]; + + //if (string.IsNullOrEmpty(replicaServiceId)) + //{ + // result.ErrorCodes.Add(VirtualizationErrorCodes.SET_NO_REPLICA_SERVER_ERROR); + // return result; + //} + + vs.SetVmReplication(vm.VirtualMachineId, replicaServer, replication); + result.IsSuccess = true; + } + catch (Exception ex) + { + result.AddError(VirtualizationErrorCodes.SET_SET_REPLICATION_ERROR, ex); + } + return result; + } + #endregion } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/WebsitePanel_Modules.config b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/WebsitePanel_Modules.config index 827da994..e9b74d59 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/WebsitePanel_Modules.config +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/WebsitePanel_Modules.config @@ -658,6 +658,7 @@ + diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/HyperV2012R2_Settings.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/HyperV2012R2_Settings.ascx.cs index 974ce822..2734e9eb 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/HyperV2012R2_Settings.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/HyperV2012R2_Settings.ascx.cs @@ -237,7 +237,7 @@ namespace WebsitePanel.Portal.ProviderControls continue; var currentServiceSettings = ConvertArrayToDictionary(ES.Services.Servers.GetServiceSettings(serviceId)); - if (currentServiceSettings["ReplicaMode"] == ReplicaMode.IsReplicaServer.ToString()) + if (currentServiceSettings["ReplicaMode"] != ReplicaMode.IsReplicaServer.ToString()) continue; var exists = false; @@ -294,11 +294,10 @@ namespace WebsitePanel.Portal.ProviderControls ManagePreferredNameServerRow.Visible = ManageNicConfigRow.Visible && (ddlManageNicConfig.SelectedIndex == 0); // Replica - IsReplicaServerRow.Visible = IsReplicaServer; EnableReplicaRow.Visible = EnabledReplica; - ddlCertThumbnail.Visible = !IsRemoteServer; - txtCertThumbnail.Visible = CertificateThumbnailValidator.Visible = IsRemoteServer; IsReplicaServerRow.Visible = IsReplicaServer; + ddlCertThumbnail.Visible = CertificateDdlThumbnailValidator.Visible = !IsRemoteServer; + txtCertThumbnail.Visible = CertificateThumbnailValidator.Visible = IsRemoteServer; ReplicaPathErrorTr.Visible = ReplicaErrorTr.Visible = false; if (IsReplicaServer) BindCertificates(); if (EnabledReplica) BindReplicaServices(); diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPS2012/App_LocalResources/VpsDetailsReplications.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPS2012/App_LocalResources/VpsDetailsReplications.ascx.resx new file mode 100644 index 00000000..3b106beb --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPS2012/App_LocalResources/VpsDetailsReplications.ascx.resx @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + if(this.disabled) return false;if(!confirm('Do you want to apply selected snapshot to VPS?')) return false;ShowProgressDialog('Applying snapshot...'); + + + if(this.disabled) return false;if(!confirm('Do you want to completely delete selected snapshot?')) return false;ShowProgressDialog('Deleting snapshot...'); + + + if(!confirm('Do you want to completely delete selected snapshot and all its sub-tree?')) return false;ShowProgressDialog('Deleting snapshot sub-tree...'); + + + ShowProgressDialog('Renaming snapshot...', 'RenameSnapshotModal'); + + + ShowProgressDialog('Taking snapshot...'); + + + Now + + + This virtual server has no snapshots. + + + Apply + + + Cancel + + + Delete + + + Delete Subtree + + + Rename + + + Rename + + + <p>To take a <b>snapshot</b> is much like to take a picture of current VPS state: its configuration, memory and hard disk.</p><p>Snapshots maybe used as backup/restore points when installing new software or using VPS for development or testing purposes. If something has gone wrong there is an ability to roll-back and <b>"Apply"</b> a snapshot with good configuration.</p><p><b>"Rename"</b> button allows renaming snapshot and giving it some informative name, for example "Before applying service pack".</p> + + + Created: + + + Number of Snapshots: + + + Rename Snapshot + + + Snapshots + + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPS2012/VpsDetailsReplications.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPS2012/VpsDetailsReplications.ascx new file mode 100644 index 00000000..b66cb332 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPS2012/VpsDetailsReplications.ascx @@ -0,0 +1,146 @@ +<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="VpsDetailsReplications.ascx.cs" Inherits="WebsitePanel.Portal.VPS2012.VpsDetailsReplications" %> +<%@ Register Src="../UserControls/SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %> +<%@ Register Src="UserControls/ServerTabs.ascx" TagName="ServerTabs" TagPrefix="wsp" %> +<%@ Register Src="UserControls/Menu.ascx" TagName="Menu" TagPrefix="wsp" %> +<%@ Register Src="UserControls/Breadcrumb.ascx" TagName="Breadcrumb" TagPrefix="wsp" %> +<%@ Register Src="UserControls/FormTitle.ascx" TagName="FormTitle" TagPrefix="wsp" %> +<%@ Register Src="../UserControls/QuotaViewer.ascx" TagName="QuotaViewer" TagPrefix="wsp" %> +<%@ Register Src="../UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %> + + + +
+
+ +
+ +
+ +
+ +
+ +
+
+
+ + +
+
+ + + + + + + + + +
+ +
+ +
+
+ + + + + + + + +
+ +
+ +
+
+ +     + + +
+ +

+ + +

+
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+ +
+
+ +
+ +
+
+ + + + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPS2012/VpsDetailsReplications.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPS2012/VpsDetailsReplications.ascx.cs new file mode 100644 index 00000000..d231dc9a --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPS2012/VpsDetailsReplications.ascx.cs @@ -0,0 +1,262 @@ +// Copyright (c) 2015, Outercurve Foundation. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// - Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// - Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// - Neither the name of the Outercurve Foundation nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using WebsitePanel.Providers.Common; +using WebsitePanel.Providers.Virtualization; + +namespace WebsitePanel.Portal.VPS2012 +{ + public partial class VpsDetailsReplications : WebsitePanelModuleBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + BindSnapshotsTree(); + } + } + + private void BindSnapshotsTree() + { + VirtualMachineSnapshot[] snapshots = ES.Services.VPS2012.GetVirtualMachineSnapshots(PanelRequest.ItemID); + + // clear tree + SnapshotsTree.Nodes.Clear(); + + // fill tree by root nodes + AddChildNodes(SnapshotsTree.Nodes, null, snapshots); + + // select first node + if (SnapshotsTree.Nodes.Count > 0) + { + SnapshotsTree.Nodes[0].Selected = true; + } + + // refresh + BindSelectedNode(); + + // quotas + VirtualMachine vm = ES.Services.VPS2012.GetVirtualMachineItem(PanelRequest.ItemID); + snapshotsQuota.QuotaUsedValue = snapshots.Length; + snapshotsQuota.QuotaValue = vm.SnapshotsNumber; + btnTakeSnapshot.Enabled = snapshots.Length < vm.SnapshotsNumber; + } + + private void BindSelectedNode() + { + TreeNode node = SnapshotsTree.SelectedNode; + + btnApply.Enabled = + btnRename.Enabled = + btnDelete.Enabled = + btnDeleteSubtree.Enabled = + SnapshotDetailsPanel.Visible = (node != null); + + NoSnapshotsPanel.Visible = (SnapshotsTree.Nodes.Count == 0); + + if (node != null) + { + // set name + txtSnapshotName.Text = node.Text; + + // load snapshot details + VirtualMachineSnapshot snapshot = ES.Services.VPS2012.GetSnapshot(PanelRequest.ItemID, node.Value); + if (snapshot != null) + litCreated.Text = snapshot.Created.ToString(); + + // set image + imgThumbnail.ImageUrl = + string.Format("~/DesktopModules/WebsitePanel/VPS2012/VirtualMachineSnapshotImage.ashx?ItemID={0}&SnapshotID={1}&rnd={2}", + PanelRequest.ItemID, HttpUtility.UrlEncode(node.Value), DateTime.Now.Ticks); + } + } + + private void AddChildNodes(TreeNodeCollection parent, string parentId, VirtualMachineSnapshot[] snapshots) + { + foreach (VirtualMachineSnapshot snapshot in snapshots) + { + if (snapshot.ParentId == parentId) + { + // add node + TreeNode node = new TreeNode(snapshot.Name, snapshot.Id); + node.Expanded = true; + node.ImageUrl = PortalUtils.GetThemedImage("VPS/snapshot.png"); + parent.Add(node); + + // check if the current + if (snapshot.IsCurrent) + { + TreeNode nowNode = new TreeNode(GetLocalizedString("Now.Text"), ""); + nowNode.ImageUrl = PortalUtils.GetThemedImage("VPS/start2.png"); + nowNode.SelectAction = TreeNodeSelectAction.None; + node.ChildNodes.Add(nowNode); + } + + // fill children + AddChildNodes(node.ChildNodes, snapshot.Id, snapshots); + } + } + } + + protected void btnTakeSnapshot_Click(object sender, EventArgs e) + { + try + { + ResultObject res = ES.Services.VPS2012.CreateSnapshot(PanelRequest.ItemID); + + if (res.IsSuccess) + { + // bind tree + BindSnapshotsTree(); + return; + } + else + { + // show error + messageBox.ShowMessage(res, "VPS_ERROR_TAKE_SNAPSHOT", "VPS"); + } + } + catch (Exception ex) + { + messageBox.ShowErrorMessage("VPS_ERROR_TAKE_SNAPSHOT", ex); + } + } + + protected void btnApply_Click(object sender, EventArgs e) + { + try + { + ResultObject res = ES.Services.VPS2012.ApplySnapshot(PanelRequest.ItemID, GetSelectedSnapshot()); + + if (res.IsSuccess) + { + // bind tree + BindSnapshotsTree(); + return; + } + else + { + // show error + messageBox.ShowMessage(res, "VPS_ERROR_APPLY_SNAPSHOT", "VPS"); + } + } + catch (Exception ex) + { + messageBox.ShowErrorMessage("VPS_ERROR_APPLY_SNAPSHOT", ex); + } + } + + protected void btnRenameSnapshot_Click(object sender, EventArgs e) + { + try + { + string newName = txtSnapshotName.Text.Trim(); + ResultObject res = ES.Services.VPS2012.RenameSnapshot(PanelRequest.ItemID, GetSelectedSnapshot(), newName); + + if (res.IsSuccess) + { + // bind tree + SnapshotsTree.SelectedNode.Text = newName; + return; + } + else + { + // show error + messageBox.ShowMessage(res, "VPS_ERROR_RENAME_SNAPSHOT", "VPS"); + } + } + catch (Exception ex) + { + messageBox.ShowErrorMessage("VPS_ERROR_RENAME_SNAPSHOT", ex); + } + } + + protected void btnDelete_Click(object sender, EventArgs e) + { + try + { + ResultObject res = ES.Services.VPS2012.DeleteSnapshot(PanelRequest.ItemID, GetSelectedSnapshot()); + + if (res.IsSuccess) + { + // bind tree + BindSnapshotsTree(); + return; + } + else + { + // show error + messageBox.ShowMessage(res, "VPS_ERROR_DELETE_SNAPSHOT", "VPS"); + } + } + catch (Exception ex) + { + messageBox.ShowErrorMessage("VPS_ERROR_DELETE_SNAPSHOT", ex); + } + } + + protected void btnDeleteSubtree_Click(object sender, EventArgs e) + { + try + { + ResultObject res = ES.Services.VPS2012.DeleteSnapshotSubtree(PanelRequest.ItemID, GetSelectedSnapshot()); + + if (res.IsSuccess) + { + // bind tree + BindSnapshotsTree(); + return; + } + else + { + // show error + messageBox.ShowMessage(res, "VPS_ERROR_DELETE_SNAPSHOT_SUBTREE", "VPS"); + } + } + catch (Exception ex) + { + messageBox.ShowErrorMessage("VPS_ERROR_DELETE_SNAPSHOT_SUBTREE", ex); + } + } + + private string GetSelectedSnapshot() + { + return SnapshotsTree.SelectedNode.Value; + } + + protected void SnapshotsTree_SelectedNodeChanged(object sender, EventArgs e) + { + BindSelectedNode(); + } + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPS2012/VpsDetailsReplications.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPS2012/VpsDetailsReplications.ascx.designer.cs new file mode 100644 index 00000000..dcfa30fe --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPS2012/VpsDetailsReplications.ascx.designer.cs @@ -0,0 +1,267 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WebsitePanel.Portal.VPS2012 { + + + public partial class VpsDetailsReplications { + + /// + /// asyncTasks control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks; + + /// + /// breadcrumb control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::WebsitePanel.Portal.VPS2012.UserControls.Breadcrumb breadcrumb; + + /// + /// menu control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::WebsitePanel.Portal.VPS2012.UserControls.Menu menu; + + /// + /// imgIcon control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Image imgIcon; + + /// + /// locTitle control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::WebsitePanel.Portal.VPS2012.UserControls.FormTitle locTitle; + + /// + /// tabs control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::WebsitePanel.Portal.VPS2012.UserControls.ServerTabs tabs; + + /// + /// messageBox control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox; + + /// + /// btnTakeSnapshot control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnTakeSnapshot; + + /// + /// SnapshotsTree control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TreeView SnapshotsTree; + + /// + /// NoSnapshotsPanel control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlGenericControl NoSnapshotsPanel; + + /// + /// locNoSnapshots control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Localize locNoSnapshots; + + /// + /// locQuota control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Localize locQuota; + + /// + /// snapshotsQuota control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::WebsitePanel.Portal.QuotaViewer snapshotsQuota; + + /// + /// SnapshotDetailsPanel control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlTableCell SnapshotDetailsPanel; + + /// + /// imgThumbnail control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Image imgThumbnail; + + /// + /// locCreated control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Localize locCreated; + + /// + /// litCreated control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Literal litCreated; + + /// + /// btnApply control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.LinkButton btnApply; + + /// + /// btnRename control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.LinkButton btnRename; + + /// + /// btnDelete control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.LinkButton btnDelete; + + /// + /// btnDeleteSubtree control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.LinkButton btnDeleteSubtree; + + /// + /// RenamePanel control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Panel RenamePanel; + + /// + /// locRenameSnapshot control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Localize locRenameSnapshot; + + /// + /// txtSnapshotName control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtSnapshotName; + + /// + /// SnapshotNameValidator control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.RequiredFieldValidator SnapshotNameValidator; + + /// + /// btnRenameSnapshot control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnRenameSnapshot; + + /// + /// btnCancelRename control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnCancelRename; + + /// + /// RenameSnapshotModal control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::AjaxControlToolkit.ModalPopupExtender RenameSnapshotModal; + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj index f9c0c3ad..9c1cd5a4 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj @@ -512,6 +512,13 @@ VpsDetailsPermissions.ascx + + VpsDetailsReplications.ascx + ASPXCodeBehind + + + VpsDetailsReplications.ascx + VpsDetailsSnapshots.ascx ASPXCodeBehind @@ -4849,6 +4856,7 @@ + @@ -5220,6 +5228,9 @@ Designer + + Designer +