diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Themes/Default/Styles/Skin.css b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Themes/Default/Styles/Skin.css index ac788077..ff510896 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Themes/Default/Styles/Skin.css +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Themes/Default/Styles/Skin.css @@ -1369,20 +1369,11 @@ UL.ActionButtons LI width:100px; } -table#toolbar -{ - width: 100%; - display: none; -} .pnlControl input.NormalTextBox { width: 300px; } -.toolbar-space -{ - width: 80%; -} .disabled { width:20px; @@ -1391,12 +1382,6 @@ table#toolbar border:medium none; } -.toolbar-button -{ - padding: 0 1px; - cursor: pointer; - white-space: nowrap; -} .enabled { width:20px; @@ -1405,10 +1390,14 @@ table#toolbar border:medium none; } -p.warningText {font-size:14px; color:Red; text-align:center;} +p.warningText { + font-size:14px; + color:Red; + text-align:center; +} .Hidden { display: none; -} \ No newline at end of file +} diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesEditHeliconApeFolder.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesEditHeliconApeFolder.ascx.resx index 29f2b669..961b5c40 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesEditHeliconApeFolder.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesEditHeliconApeFolder.ascx.resx @@ -117,8 +117,11 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Start Debug + + Start Debugging + + + Stop Debugging Cancel @@ -130,6 +133,6 @@ Update - Folder Path: + .htaccess path: \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditHeliconApeFolder.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditHeliconApeFolder.ascx index 57378288..985c8ebc 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditHeliconApeFolder.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditHeliconApeFolder.ascx @@ -5,82 +5,57 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - Open Debug window - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + Open debugging page: + + + + + + + + + + + + diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditHeliconApeFolder.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditHeliconApeFolder.ascx.cs index c754f22d..88856513 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditHeliconApeFolder.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditHeliconApeFolder.ascx.cs @@ -31,6 +31,7 @@ using System.Data; using System.Configuration; using System.Collections; using System.Collections.Generic; +using System.Globalization; using System.Text.RegularExpressions; using System.Web; using System.Web.Security; @@ -65,22 +66,30 @@ namespace WebsitePanel.Portal { // read httpd.conf folder = ES.Services.WebServers.GetHeliconApeHttpdFolder(int.Parse(spaceId)); - btnApeDebug.Visible = false; + ButtonDebuggerStart.Visible = false; + ButtonDebuggerStop.Visible = false; } else { // read web site - WebSite site = ES.Services.WebServers.GetWebSite(PanelRequest.ItemID); + WebSite site = GetWebSite(); + if (site == null) { RedirectToBrowsePage(); return; } + LabelWebSiteName.Text = site.Name; + folderPath.RootFolder = site.ContentPath; folderPath.PackageId = site.PackageId; htaccessContent.Text = "# Helicon Ape\n"; + ButtonDebuggerStart.Visible = true; + ButtonDebuggerStop.Visible = false; + + if (String.IsNullOrEmpty(PanelRequest.Name)) return; @@ -102,14 +111,16 @@ namespace WebsitePanel.Portal { htaccessContent.Text = "# Helicon Ape\n"; } - - ApeDebuggerUrl.Value = ""; + + /* + DebuggerUrlField.Value = ""; if ( RE_APE_DEBUGGER_ENABLED.IsMatch(htaccessContent.Text) ) { - btnApeDebug.Text = "Stop Debug"; - GetApeDebuggerUrl(); + btnApeDebug.Text = (string)GetLocalResourceObject("btnApeDebuggerStop.Text"); + GetDebuggerUrl(); } + */ } @@ -123,19 +134,6 @@ namespace WebsitePanel.Portal string spaceId = Request.QueryString["SpaceID"]; - if (RE_APE_DEBUGGER_ENABLED.IsMatch(htaccessContent.Text)) - { - btnApeDebug.Text = "Stop Debug"; - GetApeDebuggerUrl(); - } - else - if (RE_APE_DEBUGGER_DISABLED.IsMatch(htaccessContent.Text)) - { - btnApeDebug.Text = "Start Debug"; - GetApeDebuggerUrl(); - } - - try { if (folder.Path == HtaccessFolder.HTTPD_CONF_FILE && !string.IsNullOrEmpty(spaceId)) @@ -177,67 +175,159 @@ namespace WebsitePanel.Portal protected readonly Regex RE_APE_DEBUGGER_ENABLED = new Regex(@"^[ \t]*(SetEnv\s+mod_developer\s+secure-key-([\d]+))", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Multiline); protected readonly Regex RE_APE_DEBUGGER_DISABLED = new Regex(@"^[ \t]*#[ \t]*(SetEnv\s+mod_developer\s+secure-key-([\d]+))", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Multiline); - protected string ApeDebuggerSecureKey = ""; - //protected string ApeDebuggerUrl = ""; + + protected string DebuggerSecureKey = ""; + protected string DebuggerSessionId = ""; + protected string DebuggerUrl = ""; + protected string DebuggingPageUrl = ""; - protected void btnApeDebug_Click(object sender, EventArgs e) + protected void DebugStartClick(object sender, EventArgs e) { var code = htaccessContent.Text; if ( RE_APE_DEBUGGER_DISABLED.IsMatch(code) ) { // already disabled, enable it! - ApeDebuggerSecureKey = RE_APE_DEBUGGER_DISABLED.Match(code).Groups[2].Value; + DebuggerSecureKey = RE_APE_DEBUGGER_DISABLED.Match(code).Groups[2].Value; code = RE_APE_DEBUGGER_DISABLED.Replace(code, "$1"); - btnApeDebug.Text = "Stop Debug"; - } - else if ( RE_APE_DEBUGGER_ENABLED.IsMatch(code) ) - { - // alerdy enable, disable it! - ApeDebuggerSecureKey = ""; - code = RE_APE_DEBUGGER_ENABLED.Replace(code, "# $1"); - btnApeDebug.Text = "Start Debug"; } else { - ApeDebuggerSecureKey = new Random().Next(100000000, 999999999).ToString(); - code = code + "\nSetEnv mod_developer secure-key-" + ApeDebuggerSecureKey +"\n"; - btnApeDebug.Text = "Stop Debug"; + DebuggerSecureKey = new Random().Next(100000000, 999999999).ToString(CultureInfo.InvariantCulture); + code = code + "\nSetEnv mod_developer secure-key-" + DebuggerSecureKey +"\n"; } htaccessContent.Text = code; SaveFolder(); - GetApeDebuggerUrl(); + StartDebugger(); } - private void GetApeDebuggerUrl() + protected void DebugStopClick(object sender, EventArgs e) { - if (RE_APE_DEBUGGER_ENABLED.IsMatch(htaccessContent.Text)) + var code = htaccessContent.Text; + if (RE_APE_DEBUGGER_ENABLED.IsMatch(code)) { - // already disabled, enable it! - ApeDebuggerSecureKey = RE_APE_DEBUGGER_ENABLED.Match(htaccessContent.Text).Groups[2].Value; + // alerdy enable, disable it! + code = RE_APE_DEBUGGER_ENABLED.Replace(code, "# $1"); } - ApeDebuggerUrl.Value = ""; - if ( !string.IsNullOrEmpty(ApeDebuggerSecureKey) ) + htaccessContent.Text = code; + SaveFolder(); + + StopDebugger(); + + } + + private void GetDebuggerUrl() + { + // TODO: interactive binding selection + + if ( !string.IsNullOrEmpty(DebuggerSecureKey) ) { - WebSite site = ES.Services.WebServers.GetWebSite(PanelRequest.ItemID); + WebSite site = GetWebSite(); if ( null != site) { if (site.Bindings.Length > 0) { ServerBinding serverBinding = site.Bindings[0]; - ApeDebuggerUrl.Value = string.Format("{0}://{1}:{2}{3}?ape_debug={4}", - serverBinding.Protocol, - serverBinding.Host ?? serverBinding.IP, - serverBinding.Port, - folderPath.SelectedFile.Replace('\\', '/'), - ApeDebuggerSecureKey - ); + DebuggerUrl = string.Format( + "{0}://{1}:{2}{3}/_ape_start_developer_session?ape_debug=secure-key-{4}_{5}", + serverBinding.Protocol, + serverBinding.Host ?? serverBinding.IP, + serverBinding.Port, + folderPath.SelectedFile.Replace('\\', '/'), + DebuggerSecureKey, + DebuggerSessionId + ); + DebuggerUrlField.Value = DebuggerUrl; } } } + + // TODO: throw error if debugger url is empty + } + + private WebSite GetWebSite() + { + WebSite webSite = ViewState["HtaccessWebSite"] as WebSite; + if (null == webSite) + { + webSite = ES.Services.WebServers.GetWebSite(PanelRequest.ItemID); + // TODO: ViewState["HtaccessWebSite"] = webSite; + } + + return webSite; + } + + private void GetDebuggingPageUrl() + { + if (!string.IsNullOrEmpty(DebuggerSecureKey)) + { + WebSite site = GetWebSite(); + + if (null != site) + { + if (site.Bindings.Length > 0) + { + ServerBinding serverBinding = site.Bindings[0]; + + DebuggingPageUrl = string.Format( + "{0}://{1}:{2}{3}/?ape_debug=secure-key-{4}_{5}", + serverBinding.Protocol, + serverBinding.Host ?? serverBinding.IP, + serverBinding.Port, + folderPath.SelectedFile.Replace('\\', '/'), + DebuggerSecureKey, + DebuggerSessionId + ); + } + } + } + + // TODO: throw error if url is empty + } + + + private void StartDebugger() + { + ButtonDebuggerStart.Visible = false; + ButtonDebuggerStop.Visible = true; + + // session id + DebuggerSessionId = new Random().Next(100000000, 999999999).ToString(CultureInfo.InvariantCulture); + + // debugger url + GetDebuggerUrl(); + + // debugging page url + GetDebuggingPageUrl(); + + // show debugger iframe + DebuggerFramePanel.Visible = true; + DebuggerFrame.Attributes["src"] = DebuggerUrl; + + // debugging page link + ContainerLinkDebuggingPage.Visible = true; + LinkDebuggingPage.NavigateUrl = DebuggingPageUrl; + LinkDebuggingPage.Text = DebuggingPageUrl; + + } + + private void StopDebugger() + { + ButtonDebuggerStart.Visible = true; + ButtonDebuggerStop.Visible = false; + + DebuggerUrl = ""; + DebuggingPageUrl = ""; + DebuggerSessionId = ""; + + // hide debugger iframe + DebuggerFramePanel.Visible = false; + + // hide debugging page link + ContainerLinkDebuggingPage.Visible = false; } protected void btnCancel_Click(object sender, EventArgs e) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditHeliconApeFolder.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditHeliconApeFolder.ascx.designer.cs index 27ba44c0..e58ca09d 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditHeliconApeFolder.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditHeliconApeFolder.ascx.designer.cs @@ -21,6 +21,15 @@ namespace WebsitePanel.Portal { /// protected global::System.Web.UI.WebControls.Label lblFolderName; + /// + /// LabelWebSiteName control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label LabelWebSiteName; + /// /// folderPath control. /// @@ -40,22 +49,67 @@ namespace WebsitePanel.Portal { protected global::System.Web.UI.WebControls.HiddenField contentPath; /// - /// ApeDebuggerUrl control. + /// DebuggerUrlField control. /// /// /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.HiddenField ApeDebuggerUrl; + protected global::System.Web.UI.WebControls.HiddenField DebuggerUrlField; /// - /// btnApeDebug control. + /// ButtonDebuggerStart control. /// /// /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.Button btnApeDebug; + protected global::System.Web.UI.WebControls.Button ButtonDebuggerStart; + + /// + /// ButtonDebuggerStop control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button ButtonDebuggerStop; + + /// + /// ContainerLinkDebuggingPage control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label ContainerLinkDebuggingPage; + + /// + /// LinkDebuggingPage control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.HyperLink LinkDebuggingPage; + + /// + /// DebuggerFramePanel control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Panel DebuggerFramePanel; + + /// + /// DebuggerFrame control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlGenericControl DebuggerFrame; /// /// htaccessContent control. 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 5a320f77..efab9bc2 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj @@ -4929,7 +4929,9 @@ Designer - + + Designer +