UI changes

This commit is contained in:
vfedosevich 2015-01-30 06:43:13 -08:00
parent 1567ef9f15
commit d063e2ce2d
12 changed files with 139 additions and 101 deletions

View file

@ -12,5 +12,6 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
public string UnifiedSessionId { get; set; } public string UnifiedSessionId { get; set; }
public string SessionState { get; set; } public string SessionState { get; set; }
public string HostServer { get; set; } public string HostServer { get; set; }
public string DomainName { get; set; }
} }
} }

View file

@ -33,5 +33,6 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
public string DisplayName { get; set; } public string DisplayName { get; set; }
public string FilePath { get; set; } public string FilePath { get; set; }
public string FileVirtualPath { get; set; } public string FileVirtualPath { get; set; }
public string RequiredCommandLine { get; set; }
} }
} }

View file

@ -1738,9 +1738,7 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
Command cmd = new Command("Get-RDUserSession"); Command cmd = new Command("Get-RDUserSession");
cmd.Parameters.Add("CollectionName", collectionName); cmd.Parameters.Add("CollectionName", collectionName);
cmd.Parameters.Add("ConnectionBroker", ConnectionBroker); cmd.Parameters.Add("ConnectionBroker", ConnectionBroker);
var userSessions = ExecuteShellCommand(runSpace, cmd, false, out errors); var userSessions = ExecuteShellCommand(runSpace, cmd, false, out errors);
//var userSessions = ExecuteShellCommand(runSpace, scripts, out errors);
var properties = typeof(RdsUserSession).GetProperties(); var properties = typeof(RdsUserSession).GetProperties();
foreach(var userSession in userSessions) foreach(var userSession in userSessions)

View file

@ -147,4 +147,7 @@
<data name="cmdLogOff.ToolTip" xml:space="preserve"> <data name="cmdLogOff.ToolTip" xml:space="preserve">
<value>Log Off</value> <value>Log Off</value>
</data> </data>
<data name="btnRefresh.Text" xml:space="preserve">
<value>Refresh</value>
</data>
</root> </root>

View file

@ -22,51 +22,58 @@
</div> </div>
<div class="FormBody"> <div class="FormBody">
<wsp:CollectionTabs id="tabs" runat="server" SelectedTab="rds_collection_user_sessions" /> <wsp:CollectionTabs id="tabs" runat="server" SelectedTab="rds_collection_user_sessions" />
<wsp:SimpleMessageBox id="messageBox" runat="server" /> <wsp:SimpleMessageBox id="messageBox" runat="server" />
<asp:UpdatePanel ID="RDAppsUpdatePanel" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
<wsp:CollapsiblePanel id="secRdsUserSessions" runat="server" <ContentTemplate>
TargetControlID="panelRdsUserSessions" meta:resourcekey="secRdsUserSessions" Text=""> <div class="FormButtonsBarCleanRight">
</wsp:CollapsiblePanel> <div class="FormButtonsBarClean">
<asp:Button ID="btnRefresh" runat="server" Text="Refresh" CssClass="Button1" OnClick="btnRefresh_Click" OnClientClick="ShowProgressDialog('Loading'); return true;" meta:resourcekey="btnRefresh" />
<asp:Panel runat="server" ID="panelRdsUserSessions"> </div>
<div style="padding: 10px;"> </div>
<asp:GridView ID="gvRDSUserSessions" runat="server" AutoGenerateColumns="False" EnableViewState="true" <wsp:CollapsiblePanel id="secRdsUserSessions" runat="server"
Width="100%" EmptyDataText="gvRDSUserSessions" CssSelectorClass="NormalGridView" TargetControlID="panelRdsUserSessions" meta:resourcekey="secRdsUserSessions" Text="">
OnRowCommand="gvRDSCollections_RowCommand" AllowPaging="True" AllowSorting="True"> </wsp:CollapsiblePanel>
<Columns> <asp:Panel runat="server" ID="panelRdsUserSessions">
<asp:TemplateField meta:resourcekey="gvUserName" HeaderText="gvUserName"> <div style="padding: 10px;">
<ItemStyle Width="30%" Wrap="false"/> <asp:GridView ID="gvRDSUserSessions" runat="server" AutoGenerateColumns="False" EnableViewState="true"
<ItemTemplate> Width="100%" EmptyDataText="gvRDSUserSessions" CssSelectorClass="NormalGridView"
<asp:Literal ID="litUserName" runat="server" Text='<%# Eval("UserName") %>'/> OnRowCommand="gvRDSCollections_RowCommand" AllowPaging="True" AllowSorting="True">
<asp:HiddenField ID="hfUnifiedSessionId" runat="server" Value='<%# Eval("UnifiedSessionId") %>'/> <Columns>
</ItemTemplate> <asp:TemplateField meta:resourcekey="gvUserName" HeaderText="gvUserName">
</asp:TemplateField> <ItemStyle Width="30%" Wrap="false"/>
<asp:TemplateField meta:resourcekey="gvHostServer" HeaderText="gvHostServer"> <ItemTemplate>
<ItemStyle Width="30%" Wrap="false"/> <asp:Literal ID="litUserName" runat="server" Text='<%# string.Format("{0}\\{1}", Eval("DomainName"), Eval("UserName")) %>'/>
<ItemTemplate> <asp:HiddenField ID="hfUnifiedSessionId" runat="server" Value='<%# Eval("UnifiedSessionId") %>'/>
<asp:Literal ID="litHostServer" runat="server" Text='<%# Eval("HostServer") %>'/> </ItemTemplate>
</ItemTemplate> </asp:TemplateField>
</asp:TemplateField> <asp:TemplateField meta:resourcekey="gvHostServer" HeaderText="gvHostServer">
<asp:TemplateField meta:resourcekey="gvSessionState" HeaderText="gvSessionState"> <ItemStyle Width="30%" Wrap="false"/>
<ItemStyle Width="30%" Wrap="false"/> <ItemTemplate>
<ItemTemplate> <asp:Literal ID="litHostServer" runat="server" Text='<%# Eval("HostServer") %>'/>
<asp:Literal ID="litSessionState" runat="server" Text='<%# Eval("SessionState") %>'/> </ItemTemplate>
</ItemTemplate> </asp:TemplateField>
</asp:TemplateField> <asp:TemplateField meta:resourcekey="gvSessionState" HeaderText="gvSessionState">
<asp:TemplateField> <ItemStyle Width="30%" Wrap="false"/>
<ItemTemplate> <ItemTemplate>
<asp:LinkButton ID="lnkLogOff" runat="server" Text="Log Off" CommandName="LogOff" CommandArgument='<%# Eval("UnifiedSessionId") + ";" + Eval("HostServer") %>' <asp:Literal ID="litSessionState" runat="server" Text='<%# Eval("SessionState") %>'/>
meta:resourcekey="cmdLogOff" OnClientClick="return confirm('Are you sure you want to log off selected user?')"></asp:LinkButton> </ItemTemplate>
</ItemTemplate> </asp:TemplateField>
</asp:TemplateField> <asp:TemplateField>
</Columns> <ItemTemplate>
</asp:GridView> <asp:LinkButton ID="lnkLogOff" runat="server" Text="Log Off" CommandName="LogOff" CommandArgument='<%# Eval("UnifiedSessionId") + ";" + Eval("HostServer") %>'
</div> meta:resourcekey="cmdLogOff" OnClientClick="return confirm('Are you sure you want to log off selected user?')"></asp:LinkButton>
</asp:Panel> </ItemTemplate>
<div class="FormFooterClean"> </asp:TemplateField>
<wsp:ItemButtonPanel id="buttonPanel" runat="server" ValidationGroup="SaveRDSCollection" </Columns>
OnSaveClick="btnSave_Click" OnSaveExitClick="btnSaveExit_Click" /> </asp:GridView>
</div> </div>
</asp:Panel>
<div class="FormFooterClean">
<wsp:ItemButtonPanel id="buttonPanel" runat="server" ValidationGroup="SaveRDSCollection"
OnSaveClick="btnSave_Click" OnSaveExitClick="btnSaveExit_Click" />
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div> </div>
</div> </div>
</div> </div>

View file

@ -1,4 +1,5 @@
using System; using AjaxControlToolkit;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Web; using System.Web;
@ -17,7 +18,7 @@ namespace WebsitePanel.Portal.RDS
if (!IsPostBack) if (!IsPostBack)
{ {
var collection = ES.Services.RDS.GetRdsCollection(PanelRequest.CollectionID); var collection = ES.Services.RDS.GetRdsCollection(PanelRequest.CollectionID);
litCollectionName.Text = collection.Name; litCollectionName.Text = collection.DisplayName;
BindGrid(); BindGrid();
} }
} }
@ -34,7 +35,7 @@ namespace WebsitePanel.Portal.RDS
{ {
ES.Services.RDS.LogOffRdsUser(PanelRequest.ItemID, unifiedSessionId, hostServer); ES.Services.RDS.LogOffRdsUser(PanelRequest.ItemID, unifiedSessionId, hostServer);
BindGrid(); BindGrid();
((ModalPopupExtender)asyncTasks.FindControl("ModalPopupProperties")).Hide();
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -49,6 +50,8 @@ namespace WebsitePanel.Portal.RDS
{ {
return; return;
} }
BindGrid();
} }
protected void btnSaveExit_Click(object sender, EventArgs e) protected void btnSaveExit_Click(object sender, EventArgs e)
@ -61,6 +64,17 @@ namespace WebsitePanel.Portal.RDS
Response.Redirect(EditUrl("ItemID", PanelRequest.ItemID.ToString(), "rds_collections", "SpaceID=" + PanelSecurity.PackageId)); Response.Redirect(EditUrl("ItemID", PanelRequest.ItemID.ToString(), "rds_collections", "SpaceID=" + PanelSecurity.PackageId));
} }
protected void btnRefresh_Click(object sender, EventArgs e)
{
if (!Page.IsValid)
{
return;
}
BindGrid();
((ModalPopupExtender)asyncTasks.FindControl("ModalPopupProperties")).Hide();
}
private void BindGrid() private void BindGrid()
{ {
var userSessions = new List<RdsUserSession>(); var userSessions = new List<RdsUserSession>();
@ -74,6 +88,16 @@ namespace WebsitePanel.Portal.RDS
ShowErrorMessage("REMOTE_DESKTOP_SERVICES_USER_SESSIONS", ex); ShowErrorMessage("REMOTE_DESKTOP_SERVICES_USER_SESSIONS", ex);
} }
foreach(var userSession in userSessions)
{
var states = userSession.SessionState.Split('_');
if (states.Length == 2)
{
userSession.SessionState = states[1];
}
}
gvRDSUserSessions.DataSource = userSessions; gvRDSUserSessions.DataSource = userSessions;
gvRDSUserSessions.DataBind(); gvRDSUserSessions.DataBind();
} }

View file

@ -66,6 +66,24 @@ namespace WebsitePanel.Portal.RDS {
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox; protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox;
/// <summary>
/// RDAppsUpdatePanel control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.UpdatePanel RDAppsUpdatePanel;
/// <summary>
/// btnRefresh control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Button btnRefresh;
/// <summary> /// <summary>
/// secRdsUserSessions control. /// secRdsUserSessions control.
/// </summary> /// </summary>

View file

@ -138,9 +138,6 @@
<data name="btnDelete.Text" xml:space="preserve"> <data name="btnDelete.Text" xml:space="preserve">
<value>Delete</value> <value>Delete</value>
</data> </data>
<data name="btnFullDesktopConnection.Text" xml:space="preserve">
<value>Add Full Desktop Connection</value>
</data>
<data name="gvAppName.HeaderText" xml:space="preserve"> <data name="gvAppName.HeaderText" xml:space="preserve">
<value>Remote Application Name</value> <value>Remote Application Name</value>
</data> </data>

View file

@ -5,8 +5,7 @@
<ContentTemplate> <ContentTemplate>
<div class="FormButtonsBarClean"> <div class="FormButtonsBarClean">
<asp:Button ID="btnAdd" runat="server" Text="Add..." CssClass="Button1" OnClick="btnAdd_Click" meta:resourcekey="btnAdd" /> <asp:Button ID="btnAdd" runat="server" Text="Add..." CssClass="Button1" OnClick="btnAdd_Click" meta:resourcekey="btnAdd" />
<asp:Button ID="btnDelete" runat="server" Text="Delete" CssClass="Button1" OnClick="btnDelete_Click" meta:resourcekey="btnDelete"/> <asp:Button ID="btnDelete" runat="server" Text="Delete" CssClass="Button1" OnClick="btnDelete_Click" meta:resourcekey="btnDelete"/>
<asp:Button ID="btnFullDesktopConnection" runat="server" Text="" CssClass="Button1" OnClick="btnFullDesktopConnection_Click" meta:resourcekey="btnFullDesktopConnection"/>
</div> </div>
<asp:GridView ID="gvApps" runat="server" meta:resourcekey="gvApps" AutoGenerateColumns="False" <asp:GridView ID="gvApps" runat="server" meta:resourcekey="gvApps" AutoGenerateColumns="False"
Width="600px" CssSelectorClass="NormalGridView" Width="600px" CssSelectorClass="NormalGridView"
@ -76,6 +75,7 @@
<ItemTemplate> <ItemTemplate>
<asp:Literal ID="litName" runat="server" Text='<%# Eval("DisplayName") %>'></asp:Literal> <asp:Literal ID="litName" runat="server" Text='<%# Eval("DisplayName") %>'></asp:Literal>
<asp:HiddenField ID="hfFilePathPopup" runat="server" Value='<%# Eval("FilePath") %>'/> <asp:HiddenField ID="hfFilePathPopup" runat="server" Value='<%# Eval("FilePath") %>'/>
<asp:HiddenField ID="hfRequiredCommandLinePopup" runat="server" Value='<%# Eval("RequiredCommandLine") %>'/>
</ItemTemplate> </ItemTemplate>
</asp:TemplateField> </asp:TemplateField>
</Columns> </Columns>

View file

@ -104,39 +104,45 @@ namespace WebsitePanel.Portal.RDS.UserControls
List<RemoteApplication> selectedApps = GetPopUpGridViewApps(); List<RemoteApplication> selectedApps = GetPopUpGridViewApps();
BindApps(selectedApps.ToArray(), true); BindApps(selectedApps.ToArray(), true);
} }
protected void btnFullDesktopConnection_Click(object sender, EventArgs e)
{
var newApps = new RemoteApplication[]
{
new RemoteApplication
{
DisplayName = "Session Host",
FilePath = "%SystemRoot%\\system32\\mstsc.exe",
Alias = "mstsc",
RequiredCommandLine = "/v:",
ShowInWebAccess = true
}
};
BindApps(newApps, true);
}
protected void BindPopupApps() protected void BindPopupApps()
{ {
RdsCollection collection = ES.Services.RDS.GetRdsCollection(PanelRequest.CollectionID); RdsCollection collection = ES.Services.RDS.GetRdsCollection(PanelRequest.CollectionID);
StartMenuApp[] apps = ES.Services.RDS.GetAvailableRemoteApplications(PanelRequest.ItemID, collection.Name); List<StartMenuApp> apps = ES.Services.RDS.GetAvailableRemoteApplications(PanelRequest.ItemID, collection.Name).ToList();
var fullRemote = new StartMenuApp
{
DisplayName = "Session Host",
FilePath = "%SystemRoot%\\system32\\mstsc.exe",
RequiredCommandLine = string.Format("/v:{0}", collection.Servers.First().FqdName)
};
var displayNames = GetApps().Select(p => p.DisplayName);
apps = apps.Where(x => !displayNames.Contains(x.DisplayName)).ToList();
apps = apps.Where(x => !GetApps().Select(p => p.DisplayName).Contains(x.DisplayName)).ToArray();
Array.Sort(apps, CompareAccount);
if (Direction == SortDirection.Ascending) if (Direction == SortDirection.Ascending)
{ {
Array.Reverse(apps); apps = apps.OrderBy(a => a.DisplayName).ToList();
Direction = SortDirection.Descending; Direction = SortDirection.Descending;
} }
else else
{
apps = apps.OrderByDescending(a => a.DisplayName).ToList();
Direction = SortDirection.Ascending; Direction = SortDirection.Ascending;
}
if (!displayNames.Contains(fullRemote.DisplayName))
{
if (apps.Count > 0)
{
apps.Insert(0, fullRemote);
}
else
{
apps.Add(fullRemote);
}
}
gvPopupApps.DataSource = apps; gvPopupApps.DataSource = apps;
gvPopupApps.DataBind(); gvPopupApps.DataBind();
@ -170,16 +176,7 @@ namespace WebsitePanel.Portal.RDS.UserControls
apps.Add(newApp); apps.Add(newApp);
} }
} }
if (apps.Any(a => a.DisplayName.Equals("session host", StringComparison.CurrentCultureIgnoreCase)))
{
btnFullDesktopConnection.Enabled = false;
}
else
{
btnFullDesktopConnection.Enabled = true;
}
gvApps.DataSource = apps; gvApps.DataSource = apps;
gvApps.DataBind(); gvApps.DataBind();
@ -226,7 +223,8 @@ namespace WebsitePanel.Portal.RDS.UserControls
{ {
Alias = (string)gvPopupApps.DataKeys[i][0], Alias = (string)gvPopupApps.DataKeys[i][0],
DisplayName = ((Literal)row.FindControl("litName")).Text, DisplayName = ((Literal)row.FindControl("litName")).Text,
FilePath = ((HiddenField)row.FindControl("hfFilePathPopup")).Value FilePath = ((HiddenField)row.FindControl("hfFilePathPopup")).Value,
RequiredCommandLine = ((HiddenField)row.FindControl("hfRequiredCommandLinePopup")).Value
}); });
} }
} }

View file

@ -39,15 +39,6 @@ namespace WebsitePanel.Portal.RDS.UserControls {
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Button btnDelete; protected global::System.Web.UI.WebControls.Button btnDelete;
/// <summary>
/// btnFullDesktopConnection control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Button btnFullDesktopConnection;
/// <summary> /// <summary>
/// gvApps control. /// gvApps control.
/// </summary> /// </summary>

View file

@ -21,7 +21,7 @@
<ItemStyle Width="10px" /> <ItemStyle Width="10px" />
</asp:TemplateField> </asp:TemplateField>
<asp:TemplateField meta:resourcekey="gvUsersAccount" HeaderText="gvUsersAccount"> <asp:TemplateField meta:resourcekey="gvUsersAccount" HeaderText="gvUsersAccount">
<ItemStyle Width="60%" Wrap="false"> <ItemStyle Width="96%" Wrap="false" HorizontalAlign="Left">
</ItemStyle> </ItemStyle>
<ItemTemplate> <ItemTemplate>
<asp:Literal ID="litAccount" runat="server" Text='<%# Eval("DisplayName") %>'></asp:Literal> <asp:Literal ID="litAccount" runat="server" Text='<%# Eval("DisplayName") %>'></asp:Literal>
@ -75,14 +75,14 @@
<ItemStyle Width="10px" /> <ItemStyle Width="10px" />
</asp:TemplateField> </asp:TemplateField>
<asp:TemplateField meta:resourcekey="gvAccountsDisplayName"> <asp:TemplateField meta:resourcekey="gvAccountsDisplayName">
<ItemStyle Width="50%"></ItemStyle> <ItemStyle Width="50%" HorizontalAlign="Left"></ItemStyle>
<ItemTemplate> <ItemTemplate>
<asp:Image ID="imgAccount" runat="server" ImageUrl='<%# GetAccountImage((int)Eval("AccountType")) %>' ImageAlign="AbsMiddle" /> <asp:Image ID="imgAccount" runat="server" ImageUrl='<%# GetAccountImage((int)Eval("AccountType")) %>' ImageAlign="AbsMiddle" />
<asp:Literal ID="litDisplayName" runat="server" Text='<%# Eval("DisplayName") %>'></asp:Literal> <asp:Literal ID="litDisplayName" runat="server" Text='<%# Eval("DisplayName") %>'></asp:Literal>
</ItemTemplate> </ItemTemplate>
</asp:TemplateField> </asp:TemplateField>
<asp:TemplateField meta:resourcekey="gvAccountsEmail"> <asp:TemplateField meta:resourcekey="gvAccountsEmail">
<ItemStyle Width="50%"></ItemStyle> <ItemStyle Width="50%" HorizontalAlign="Left"></ItemStyle>
<ItemTemplate> <ItemTemplate>
<asp:Literal ID="litPrimaryEmailAddress" runat="server" Text='<%# Eval("PrimaryEmailAddress") %>'></asp:Literal> <asp:Literal ID="litPrimaryEmailAddress" runat="server" Text='<%# Eval("PrimaryEmailAddress") %>'></asp:Literal>
</ItemTemplate> </ItemTemplate>