Merge
This commit is contained in:
commit
da03abd190
12 changed files with 158 additions and 65 deletions
|
@ -1300,6 +1300,11 @@ namespace WebsitePanel.EnterpriseServer
|
|||
List<RemoteApplication> remoteAppsToAdd = remoteApps.Where(x => !existingCollectionApps.Select(p => p.DisplayName).Contains(x.DisplayName)).ToList();
|
||||
foreach (var app in remoteAppsToAdd)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(app.RequiredCommandLine))
|
||||
{
|
||||
app.RequiredCommandLine = string.Format("/v:{0}", collection.Servers.First().FqdName);
|
||||
}
|
||||
|
||||
AddRemoteApplicationToCollection(itemId, collection, app);
|
||||
}
|
||||
|
||||
|
|
|
@ -12,5 +12,6 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
|
|||
public string UnifiedSessionId { get; set; }
|
||||
public string SessionState { get; set; }
|
||||
public string HostServer { get; set; }
|
||||
public string DomainName { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,5 +35,6 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
|
|||
public string FilePath { get; set; }
|
||||
public string FileVirtualPath { get; set; }
|
||||
public bool ShowInWebAccess { get; set; }
|
||||
public string RequiredCommandLine { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,5 +33,6 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
|
|||
public string DisplayName { get; set; }
|
||||
public string FilePath { get; set; }
|
||||
public string FileVirtualPath { get; set; }
|
||||
public string RequiredCommandLine { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -742,6 +742,12 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
|
|||
cmd.Parameters.Add("FilePath", remoteApp.FilePath);
|
||||
cmd.Parameters.Add("ShowInWebAccess", remoteApp.ShowInWebAccess);
|
||||
|
||||
if (!string.IsNullOrEmpty(remoteApp.RequiredCommandLine))
|
||||
{
|
||||
cmd.Parameters.Add("CommandLineSetting", "Require");
|
||||
cmd.Parameters.Add("RequiredCommandLine", remoteApp.RequiredCommandLine);
|
||||
}
|
||||
|
||||
ExecuteShellCommand(runSpace, cmd, false);
|
||||
|
||||
result = true;
|
||||
|
@ -1157,6 +1163,9 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
|
|||
ShowInWebAccess = Convert.ToBoolean(GetPSObjectProperty(psObject, "ShowInWebAccess"))
|
||||
};
|
||||
|
||||
var requiredCommandLine = GetPSObjectProperty(psObject, "RequiredCommandLine");
|
||||
remoteApp.RequiredCommandLine = requiredCommandLine == null ? null : requiredCommandLine.ToString();
|
||||
|
||||
return remoteApp;
|
||||
}
|
||||
|
||||
|
@ -1729,9 +1738,7 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
|
|||
Command cmd = new Command("Get-RDUserSession");
|
||||
cmd.Parameters.Add("CollectionName", collectionName);
|
||||
cmd.Parameters.Add("ConnectionBroker", ConnectionBroker);
|
||||
var userSessions = ExecuteShellCommand(runSpace, cmd, false, out errors);
|
||||
|
||||
//var userSessions = ExecuteShellCommand(runSpace, scripts, out errors);
|
||||
var userSessions = ExecuteShellCommand(runSpace, cmd, false, out errors);
|
||||
var properties = typeof(RdsUserSession).GetProperties();
|
||||
|
||||
foreach(var userSession in userSessions)
|
||||
|
|
|
@ -147,4 +147,7 @@
|
|||
<data name="cmdLogOff.ToolTip" xml:space="preserve">
|
||||
<value>Log Off</value>
|
||||
</data>
|
||||
<data name="btnRefresh.Text" xml:space="preserve">
|
||||
<value>Refresh</value>
|
||||
</data>
|
||||
</root>
|
|
@ -22,51 +22,58 @@
|
|||
</div>
|
||||
<div class="FormBody">
|
||||
<wsp:CollectionTabs id="tabs" runat="server" SelectedTab="rds_collection_user_sessions" />
|
||||
<wsp:SimpleMessageBox id="messageBox" runat="server" />
|
||||
|
||||
<wsp:CollapsiblePanel id="secRdsUserSessions" runat="server"
|
||||
TargetControlID="panelRdsUserSessions" meta:resourcekey="secRdsUserSessions" Text="">
|
||||
</wsp:CollapsiblePanel>
|
||||
|
||||
<asp:Panel runat="server" ID="panelRdsUserSessions">
|
||||
<div style="padding: 10px;">
|
||||
<asp:GridView ID="gvRDSUserSessions" runat="server" AutoGenerateColumns="False" EnableViewState="true"
|
||||
Width="100%" EmptyDataText="gvRDSUserSessions" CssSelectorClass="NormalGridView"
|
||||
OnRowCommand="gvRDSCollections_RowCommand" AllowPaging="True" AllowSorting="True">
|
||||
<Columns>
|
||||
<asp:TemplateField meta:resourcekey="gvUserName" HeaderText="gvUserName">
|
||||
<ItemStyle Width="30%" Wrap="false"/>
|
||||
<ItemTemplate>
|
||||
<asp:Literal ID="litUserName" runat="server" Text='<%# Eval("UserName") %>'/>
|
||||
<asp:HiddenField ID="hfUnifiedSessionId" runat="server" Value='<%# Eval("UnifiedSessionId") %>'/>
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
<asp:TemplateField meta:resourcekey="gvHostServer" HeaderText="gvHostServer">
|
||||
<ItemStyle Width="30%" Wrap="false"/>
|
||||
<ItemTemplate>
|
||||
<asp:Literal ID="litHostServer" runat="server" Text='<%# Eval("HostServer") %>'/>
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
<asp:TemplateField meta:resourcekey="gvSessionState" HeaderText="gvSessionState">
|
||||
<ItemStyle Width="30%" Wrap="false"/>
|
||||
<ItemTemplate>
|
||||
<asp:Literal ID="litSessionState" runat="server" Text='<%# Eval("SessionState") %>'/>
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
<asp:TemplateField>
|
||||
<ItemTemplate>
|
||||
<asp:LinkButton ID="lnkLogOff" runat="server" Text="Log Off" CommandName="LogOff" CommandArgument='<%# Eval("UnifiedSessionId") + ";" + Eval("HostServer") %>'
|
||||
meta:resourcekey="cmdLogOff" OnClientClick="return confirm('Are you sure you want to log off selected user?')"></asp:LinkButton>
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
</Columns>
|
||||
</asp:GridView>
|
||||
</div>
|
||||
</asp:Panel>
|
||||
<div class="FormFooterClean">
|
||||
<wsp:ItemButtonPanel id="buttonPanel" runat="server" ValidationGroup="SaveRDSCollection"
|
||||
OnSaveClick="btnSave_Click" OnSaveExitClick="btnSaveExit_Click" />
|
||||
</div>
|
||||
<wsp:SimpleMessageBox id="messageBox" runat="server" />
|
||||
<asp:UpdatePanel ID="RDAppsUpdatePanel" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
|
||||
<ContentTemplate>
|
||||
<div class="FormButtonsBarCleanRight">
|
||||
<div class="FormButtonsBarClean">
|
||||
<asp:Button ID="btnRefresh" runat="server" Text="Refresh" CssClass="Button1" OnClick="btnRefresh_Click" OnClientClick="ShowProgressDialog('Loading'); return true;" meta:resourcekey="btnRefresh" />
|
||||
</div>
|
||||
</div>
|
||||
<wsp:CollapsiblePanel id="secRdsUserSessions" runat="server"
|
||||
TargetControlID="panelRdsUserSessions" meta:resourcekey="secRdsUserSessions" Text="">
|
||||
</wsp:CollapsiblePanel>
|
||||
<asp:Panel runat="server" ID="panelRdsUserSessions">
|
||||
<div style="padding: 10px;">
|
||||
<asp:GridView ID="gvRDSUserSessions" runat="server" AutoGenerateColumns="False" EnableViewState="true"
|
||||
Width="100%" EmptyDataText="gvRDSUserSessions" CssSelectorClass="NormalGridView"
|
||||
OnRowCommand="gvRDSCollections_RowCommand" AllowPaging="True" AllowSorting="True">
|
||||
<Columns>
|
||||
<asp:TemplateField meta:resourcekey="gvUserName" HeaderText="gvUserName">
|
||||
<ItemStyle Width="30%" Wrap="false"/>
|
||||
<ItemTemplate>
|
||||
<asp:Literal ID="litUserName" runat="server" Text='<%# string.Format("{0}\\{1}", Eval("DomainName"), Eval("UserName")) %>'/>
|
||||
<asp:HiddenField ID="hfUnifiedSessionId" runat="server" Value='<%# Eval("UnifiedSessionId") %>'/>
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
<asp:TemplateField meta:resourcekey="gvHostServer" HeaderText="gvHostServer">
|
||||
<ItemStyle Width="30%" Wrap="false"/>
|
||||
<ItemTemplate>
|
||||
<asp:Literal ID="litHostServer" runat="server" Text='<%# Eval("HostServer") %>'/>
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
<asp:TemplateField meta:resourcekey="gvSessionState" HeaderText="gvSessionState">
|
||||
<ItemStyle Width="30%" Wrap="false"/>
|
||||
<ItemTemplate>
|
||||
<asp:Literal ID="litSessionState" runat="server" Text='<%# Eval("SessionState") %>'/>
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
<asp:TemplateField>
|
||||
<ItemTemplate>
|
||||
<asp:LinkButton ID="lnkLogOff" runat="server" Text="Log Off" CommandName="LogOff" CommandArgument='<%# Eval("UnifiedSessionId") + ";" + Eval("HostServer") %>'
|
||||
meta:resourcekey="cmdLogOff" OnClientClick="return confirm('Are you sure you want to log off selected user?')"></asp:LinkButton>
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
</Columns>
|
||||
</asp:GridView>
|
||||
</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>
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using System;
|
||||
using AjaxControlToolkit;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
|
@ -17,7 +18,7 @@ namespace WebsitePanel.Portal.RDS
|
|||
if (!IsPostBack)
|
||||
{
|
||||
var collection = ES.Services.RDS.GetRdsCollection(PanelRequest.CollectionID);
|
||||
litCollectionName.Text = collection.Name;
|
||||
litCollectionName.Text = collection.DisplayName;
|
||||
BindGrid();
|
||||
}
|
||||
}
|
||||
|
@ -34,7 +35,7 @@ namespace WebsitePanel.Portal.RDS
|
|||
{
|
||||
ES.Services.RDS.LogOffRdsUser(PanelRequest.ItemID, unifiedSessionId, hostServer);
|
||||
BindGrid();
|
||||
|
||||
((ModalPopupExtender)asyncTasks.FindControl("ModalPopupProperties")).Hide();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
@ -49,6 +50,8 @@ namespace WebsitePanel.Portal.RDS
|
|||
{
|
||||
return;
|
||||
}
|
||||
|
||||
BindGrid();
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
protected void btnRefresh_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (!Page.IsValid)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
BindGrid();
|
||||
((ModalPopupExtender)asyncTasks.FindControl("ModalPopupProperties")).Hide();
|
||||
}
|
||||
|
||||
private void BindGrid()
|
||||
{
|
||||
var userSessions = new List<RdsUserSession>();
|
||||
|
@ -74,6 +88,16 @@ namespace WebsitePanel.Portal.RDS
|
|||
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.DataBind();
|
||||
}
|
||||
|
|
|
@ -66,6 +66,24 @@ namespace WebsitePanel.Portal.RDS {
|
|||
/// </remarks>
|
||||
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>
|
||||
/// secRdsUserSessions control.
|
||||
/// </summary>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<ContentTemplate>
|
||||
<div class="FormButtonsBarClean">
|
||||
<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"/>
|
||||
</div>
|
||||
<asp:GridView ID="gvApps" runat="server" meta:resourcekey="gvApps" AutoGenerateColumns="False"
|
||||
Width="600px" CssSelectorClass="NormalGridView"
|
||||
|
@ -26,6 +26,7 @@
|
|||
<ItemTemplate>
|
||||
<asp:Literal ID="litDisplayName" runat="server" Text='<%# Eval("DisplayName") %>'></asp:Literal>
|
||||
<asp:HiddenField ID="hfFilePath" runat="server" Value='<%# Eval("FilePath") %>'/>
|
||||
<asp:HiddenField ID="hfRequiredCommandLine" runat="server" Value='<%# Eval("RequiredCommandLine") %>'/>
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
<asp:TemplateField>
|
||||
|
@ -74,6 +75,7 @@
|
|||
<ItemTemplate>
|
||||
<asp:Literal ID="litName" runat="server" Text='<%# Eval("DisplayName") %>'></asp:Literal>
|
||||
<asp:HiddenField ID="hfFilePathPopup" runat="server" Value='<%# Eval("FilePath") %>'/>
|
||||
<asp:HiddenField ID="hfRequiredCommandLinePopup" runat="server" Value='<%# Eval("RequiredCommandLine") %>'/>
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
</Columns>
|
||||
|
|
|
@ -50,7 +50,7 @@ namespace WebsitePanel.Portal.RDS.UserControls
|
|||
}
|
||||
|
||||
public void SetApps(RemoteApplication[] apps)
|
||||
{
|
||||
{
|
||||
BindApps(apps, false);
|
||||
}
|
||||
|
||||
|
@ -104,30 +104,52 @@ namespace WebsitePanel.Portal.RDS.UserControls
|
|||
List<RemoteApplication> selectedApps = GetPopUpGridViewApps();
|
||||
|
||||
BindApps(selectedApps.ToArray(), true);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
protected void BindPopupApps()
|
||||
{
|
||||
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)
|
||||
{
|
||||
Array.Reverse(apps);
|
||||
apps = apps.OrderBy(a => a.DisplayName).ToList();
|
||||
Direction = SortDirection.Descending;
|
||||
}
|
||||
else
|
||||
{
|
||||
apps = apps.OrderByDescending(a => a.DisplayName).ToList();
|
||||
Direction = SortDirection.Ascending;
|
||||
}
|
||||
|
||||
if (!displayNames.Contains(fullRemote.DisplayName))
|
||||
{
|
||||
if (apps.Count > 0)
|
||||
{
|
||||
apps.Insert(0, fullRemote);
|
||||
}
|
||||
else
|
||||
{
|
||||
apps.Add(fullRemote);
|
||||
}
|
||||
}
|
||||
|
||||
gvPopupApps.DataSource = apps;
|
||||
gvPopupApps.DataBind();
|
||||
}
|
||||
|
||||
protected void BindApps(RemoteApplication[] newApps, bool preserveExisting)
|
||||
{
|
||||
{
|
||||
// get binded addresses
|
||||
List<RemoteApplication> apps = new List<RemoteApplication>();
|
||||
if(preserveExisting)
|
||||
|
@ -154,7 +176,7 @@ namespace WebsitePanel.Portal.RDS.UserControls
|
|||
|
||||
apps.Add(newApp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gvApps.DataSource = apps;
|
||||
gvApps.DataBind();
|
||||
|
@ -174,6 +196,7 @@ namespace WebsitePanel.Portal.RDS.UserControls
|
|||
app.Alias = (string)gvApps.DataKeys[i][0];
|
||||
app.DisplayName = ((Literal)row.FindControl("litDisplayName")).Text;
|
||||
app.FilePath = ((HiddenField)row.FindControl("hfFilePath")).Value;
|
||||
app.RequiredCommandLine = ((HiddenField)row.FindControl("hfRequiredCommandLine")).Value;
|
||||
|
||||
if (state == SelectedState.All ||
|
||||
(state == SelectedState.Selected && chkSelect.Checked) ||
|
||||
|
@ -200,7 +223,8 @@ namespace WebsitePanel.Portal.RDS.UserControls
|
|||
{
|
||||
Alias = (string)gvPopupApps.DataKeys[i][0],
|
||||
DisplayName = ((Literal)row.FindControl("litName")).Text,
|
||||
FilePath = ((HiddenField)row.FindControl("hfFilePathPopup")).Value
|
||||
FilePath = ((HiddenField)row.FindControl("hfFilePathPopup")).Value,
|
||||
RequiredCommandLine = ((HiddenField)row.FindControl("hfRequiredCommandLinePopup")).Value
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
<ItemStyle Width="10px" />
|
||||
</asp:TemplateField>
|
||||
<asp:TemplateField meta:resourcekey="gvUsersAccount" HeaderText="gvUsersAccount">
|
||||
<ItemStyle Width="60%" Wrap="false">
|
||||
<ItemStyle Width="96%" Wrap="false" HorizontalAlign="Left">
|
||||
</ItemStyle>
|
||||
<ItemTemplate>
|
||||
<asp:Literal ID="litAccount" runat="server" Text='<%# Eval("DisplayName") %>'></asp:Literal>
|
||||
|
@ -75,14 +75,14 @@
|
|||
<ItemStyle Width="10px" />
|
||||
</asp:TemplateField>
|
||||
<asp:TemplateField meta:resourcekey="gvAccountsDisplayName">
|
||||
<ItemStyle Width="50%"></ItemStyle>
|
||||
<ItemStyle Width="50%" HorizontalAlign="Left"></ItemStyle>
|
||||
<ItemTemplate>
|
||||
<asp:Image ID="imgAccount" runat="server" ImageUrl='<%# GetAccountImage((int)Eval("AccountType")) %>' ImageAlign="AbsMiddle" />
|
||||
<asp:Literal ID="litDisplayName" runat="server" Text='<%# Eval("DisplayName") %>'></asp:Literal>
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
<asp:TemplateField meta:resourcekey="gvAccountsEmail">
|
||||
<ItemStyle Width="50%"></ItemStyle>
|
||||
<ItemStyle Width="50%" HorizontalAlign="Left"></ItemStyle>
|
||||
<ItemTemplate>
|
||||
<asp:Literal ID="litPrimaryEmailAddress" runat="server" Text='<%# Eval("PrimaryEmailAddress") %>'></asp:Literal>
|
||||
</ItemTemplate>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue