Remote Application users changes

This commit is contained in:
vfedosevich 2015-02-05 05:55:24 -08:00
parent fe0edfbed2
commit 4ca584a5ca
12 changed files with 210 additions and 99 deletions

View file

@ -1111,7 +1111,7 @@ namespace WebsitePanel.EnterpriseServer
var rds = GetRemoteDesktopServices(GetRemoteDesktopServiceID(org.PackageId)); var rds = GetRemoteDesktopServices(GetRemoteDesktopServiceID(org.PackageId));
var collection = GetRdsCollection(collectionId); var collection = GetRdsCollection(collectionId);
result.AddRange(rds.GetApplicationUsers(collection.Name, remoteApp.DisplayName)); result.AddRange(rds.GetApplicationUsers(collection.Name, remoteApp.Alias));
return result; return result;
} }
@ -1130,7 +1130,7 @@ namespace WebsitePanel.EnterpriseServer
return result; return result;
} }
var collection = GetRdsCollection(collectionId); var collection = ObjectUtils.FillObjectFromDataReader<RdsCollection>(DataProvider.GetRDSCollectionById(collectionId));
var rds = GetRemoteDesktopServices(GetRemoteDesktopServiceID(org.PackageId)); var rds = GetRemoteDesktopServices(GetRemoteDesktopServiceID(org.PackageId));
rds.SetApplicationUsers(collection.Name, remoteApp, users.ToArray()); rds.SetApplicationUsers(collection.Name, remoteApp, users.ToArray());
} }
@ -1214,7 +1214,6 @@ namespace WebsitePanel.EnterpriseServer
} }
remoteApp.ShowInWebAccess = true; remoteApp.ShowInWebAccess = true;
rds.AddRemoteApplication(collection.Name, remoteApp); rds.AddRemoteApplication(collection.Name, remoteApp);
} }
catch (Exception ex) catch (Exception ex)
@ -1319,13 +1318,14 @@ namespace WebsitePanel.EnterpriseServer
} }
List<RemoteApplication> existingCollectionApps = GetCollectionRemoteApplications(itemId, collection.Name); List<RemoteApplication> existingCollectionApps = GetCollectionRemoteApplications(itemId, collection.Name);
List<RemoteApplication> remoteAppsToAdd = remoteApps.Where(x => !existingCollectionApps.Select(p => p.DisplayName).Contains(x.DisplayName)).ToList(); List<RemoteApplication> remoteAppsToAdd = remoteApps.Where(x => !existingCollectionApps.Select(p => p.Alias).Contains(x.Alias)).ToList();
foreach (var app in remoteAppsToAdd) foreach (var app in remoteAppsToAdd)
{ {
app.ShowInWebAccess = true;
AddRemoteApplicationToCollection(itemId, collection, app); AddRemoteApplicationToCollection(itemId, collection, app);
} }
List<RemoteApplication> remoteAppsToRemove = existingCollectionApps.Where(x => !remoteApps.Select(p => p.DisplayName).Contains(x.DisplayName)).ToList(); List<RemoteApplication> remoteAppsToRemove = existingCollectionApps.Where(x => !remoteApps.Select(p => p.Alias).Contains(x.Alias)).ToList();
foreach (var app in remoteAppsToRemove) foreach (var app in remoteAppsToRemove)
{ {
RemoveRemoteApplicationFromCollection(itemId, collection, app); RemoveRemoteApplicationFromCollection(itemId, collection, app);

View file

@ -34,5 +34,6 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
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; } public string RequiredCommandLine { get; set; }
public string Alias { get; set; }
} }
} }

View file

@ -643,7 +643,7 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
Command cmd = new Command("Get-RDRemoteApp"); Command cmd = new Command("Get-RDRemoteApp");
cmd.Parameters.Add("CollectionName", collectionName); cmd.Parameters.Add("CollectionName", collectionName);
cmd.Parameters.Add("ConnectionBroker", ConnectionBroker); cmd.Parameters.Add("ConnectionBroker", ConnectionBroker);
cmd.Parameters.Add("DisplayName", applicationName); cmd.Parameters.Add("Alias", applicationName);
var application = ExecuteShellCommand(runspace, cmd, false).FirstOrDefault(); var application = ExecuteShellCommand(runspace, cmd, false).FirstOrDefault();
@ -900,7 +900,6 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
RemoveRdRap(runSpace, gatewayHost, policyName); RemoveRdRap(runSpace, gatewayHost, policyName);
} }
Log.WriteWarning(gatewayHost);
var userGroupParametr = string.Format("@({0})", string.Join(",", groups.Select(x => string.Format("\"{0}@{1}\"", x, RootDomain)).ToArray())); var userGroupParametr = string.Format("@({0})", string.Join(",", groups.Select(x => string.Format("\"{0}@{1}\"", x, RootDomain)).ToArray()));
var computerGroupParametr = string.Format("\"{0}@{1}\"", GetComputersGroupName(collectionName), RootDomain); var computerGroupParametr = string.Format("\"{0}@{1}\"", GetComputersGroupName(collectionName), RootDomain);
@ -910,10 +909,24 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
rdRapCommand.Parameters.Add("UserGroups", userGroupParametr); rdRapCommand.Parameters.Add("UserGroups", userGroupParametr);
rdRapCommand.Parameters.Add("ComputerGroupType", 1); rdRapCommand.Parameters.Add("ComputerGroupType", 1);
rdRapCommand.Parameters.Add("ComputerGroup", computerGroupParametr); rdRapCommand.Parameters.Add("ComputerGroup", computerGroupParametr);
Log.WriteWarning("User Group:" + userGroupParametr);
Log.WriteWarning("Computer Group:" + computerGroupParametr); object[] errors;
ExecuteRemoteShellCommand(runSpace, gatewayHost, rdRapCommand, RdsModuleName);
Log.WriteWarning("RD RAP Added"); for (int i = 0; i < 3; i++)
{
Log.WriteWarning(string.Format("Adding RD RAP ... {0}\r\nGateway Host\t{1}\r\nUser Group\t{2}\r\nComputer Group\t{3}", i + 1, gatewayHost, userGroupParametr, computerGroupParametr));
ExecuteRemoteShellCommand(runSpace, gatewayHost, rdRapCommand, out errors, RdsModuleName);
if (errors == null || !errors.Any())
{
Log.WriteWarning("RD RAP Added Successfully");
break;
}
else
{
Log.WriteWarning(string.Join("\r\n", errors.Select(e => e.ToString()).ToArray()));
}
}
} }
internal void RemoveRdRap(Runspace runSpace, string gatewayHost, string name) internal void RemoveRdRap(Runspace runSpace, string gatewayHost, string name)
@ -1179,6 +1192,8 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
FileVirtualPath = Convert.ToString(GetPSObjectProperty(psObject, "FileVirtualPath")) FileVirtualPath = Convert.ToString(GetPSObjectProperty(psObject, "FileVirtualPath"))
}; };
remoteApp.Alias = remoteApp.DisplayName;
return remoteApp; return remoteApp;
} }
@ -1493,6 +1508,12 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
} }
internal Collection<PSObject> ExecuteRemoteShellCommand(Runspace runSpace, string hostName, Command cmd, params string[] moduleImports) internal Collection<PSObject> ExecuteRemoteShellCommand(Runspace runSpace, string hostName, Command cmd, params string[] moduleImports)
{
object[] errors;
return ExecuteRemoteShellCommand(runSpace, hostName, cmd, out errors, moduleImports);
}
internal Collection<PSObject> ExecuteRemoteShellCommand(Runspace runSpace, string hostName, Command cmd, out object[] errors, params string[] moduleImports)
{ {
Command invokeCommand = new Command("Invoke-Command"); Command invokeCommand = new Command("Invoke-Command");
invokeCommand.Parameters.Add("ComputerName", hostName); invokeCommand.Parameters.Add("ComputerName", hostName);
@ -1514,7 +1535,7 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
invokeCommand.Parameters.Add("ScriptBlock", sb); invokeCommand.Parameters.Add("ScriptBlock", sb);
return ExecuteShellCommand(runSpace, invokeCommand, false); return ExecuteShellCommand(runSpace, invokeCommand, false, out errors);
} }
internal Collection<PSObject> ExecuteRemoteShellCommand(Runspace runSpace, string hostName, List<string> scripts, params string[] moduleImports) internal Collection<PSObject> ExecuteRemoteShellCommand(Runspace runSpace, string hostName, List<string> scripts, params string[] moduleImports)
@ -1779,12 +1800,28 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
prop.SetValue(session, GetPSObjectProperty(userSession, prop.Name).ToString(), null); prop.SetValue(session, GetPSObjectProperty(userSession, prop.Name).ToString(), null);
} }
session.UserName = GetUserFullName(session.DomainName, session.UserName, runSpace);
result.Add(session); result.Add(session);
} }
return result; return result;
} }
private string GetUserFullName(string domain, string userName, Runspace runspace)
{
Command cmd = new Command("Get-WmiObject");
cmd.Parameters.Add("Class", "win32_useraccount");
cmd.Parameters.Add("Filter", string.Format("Domain = '{0}' AND Name = '{1}'", domain, userName));
var names = ExecuteShellCommand(runspace, cmd, false);
if (names.Any())
{
return names.First().Members["FullName"].Value.ToString();
}
return "";
}
#endregion #endregion
} }
} }

View file

@ -5641,6 +5641,9 @@
<data name="ERROR.RDSCOLLECTIONSETTINGS_NOT_UPDATES" xml:space="preserve"> <data name="ERROR.RDSCOLLECTIONSETTINGS_NOT_UPDATES" xml:space="preserve">
<value>RDS Collection settings not updated</value> <value>RDS Collection settings not updated</value>
</data> </data>
<data name="ERROR.REMOTEAPPUSERS_NOT_UPDATED" xml:space="preserve">
<value>Remote application users not updated</value>
</data>
<data name="ERROR.REMOTE_DESKTOP_SERVICES_LOG_OFF_USER" xml:space="preserve"> <data name="ERROR.REMOTE_DESKTOP_SERVICES_LOG_OFF_USER" xml:space="preserve">
<value>RDS User logging off error</value> <value>RDS User logging off error</value>
</data> </data>

View file

@ -127,10 +127,10 @@
<value /> <value />
</data> </data>
<data name="Text.PageName" xml:space="preserve"> <data name="Text.PageName" xml:space="preserve">
<value>Edit RDS Application</value> <value>Edit RDS Collection</value>
</data> </data>
<data name="locTitle.Text" xml:space="preserve"> <data name="locTitle.Text" xml:space="preserve">
<value>Edit RDS Application</value> <value>Edit RDS Collection</value>
</data> </data>
<data name="locCollectionName.Text" xml:space="preserve"> <data name="locCollectionName.Text" xml:space="preserve">
<value>Collection Name:</value> <value>Collection Name:</value>
@ -144,4 +144,13 @@
<data name="locApplicationName.Text" xml:space="preserve"> <data name="locApplicationName.Text" xml:space="preserve">
<value>Application Name:</value> <value>Application Name:</value>
</data> </data>
<data name="secRdsApplicationUsers.Text" xml:space="preserve">
<value>Users</value>
</data>
<data name="secRdsApplicationEdit.Text" xml:space="preserve">
<value />
</data>
<data name="locLblApplicationName" xml:space="preserve">
<value>Application Name</value>
</data>
</root> </root>

View file

@ -2,6 +2,9 @@
<%@ Register Src="../UserControls/SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %> <%@ Register Src="../UserControls/SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %>
<%@ Register Src="../UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %> <%@ Register Src="../UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %>
<%@ Register Src="UserControls/RDSCollectionUsers.ascx" TagName="CollectionUsers" TagPrefix="wsp"%> <%@ Register Src="UserControls/RDSCollectionUsers.ascx" TagName="CollectionUsers" TagPrefix="wsp"%>
<%@ Register Src="UserControls/RDSCollectionTabs.ascx" TagName="CollectionTabs" TagPrefix="wsp" %>
<%@ Register TagPrefix="wsp" TagName="CollapsiblePanel" Src="../UserControls/CollapsiblePanel.ascx" %>
<%@ Register Src="../UserControls/ItemButtonPanel.ascx" TagName="ItemButtonPanel" TagPrefix="wsp" %>
<script type="text/javascript" src="/JavaScript/jquery.min.js?v=1.4.4"></script> <script type="text/javascript" src="/JavaScript/jquery.min.js?v=1.4.4"></script>
<wsp:EnableAsyncTasksSupport id="asyncTasks" runat="server"/> <wsp:EnableAsyncTasksSupport id="asyncTasks" runat="server"/>
@ -14,36 +17,46 @@
<div class="Center"> <div class="Center">
<div class="Title"> <div class="Title">
<asp:Image ID="imgEditRDSCollection" SkinID="EnterpriseStorageSpace48" runat="server" /> <asp:Image ID="imgEditRDSCollection" SkinID="EnterpriseStorageSpace48" runat="server" />
<asp:Localize ID="locTitle" runat="server" meta:resourcekey="locTitle" Text="Edit RDS Application"></asp:Localize> <asp:Localize ID="locTitle" runat="server" meta:resourcekey="locTitle" Text="Edit RDS Collection"></asp:Localize>
-
<asp:Literal ID="litCollectionName" runat="server" Text="" />
</div> </div>
<div class="FormContentRDS"> <div class="FormContentRDS">
<wsp:SimpleMessageBox id="messageBox" runat="server" /> <wsp:SimpleMessageBox id="SimpleMessageBox1" runat="server" />
<wsp:CollectionTabs id="tabs" runat="server" SelectedTab="rds_collection_edit_apps" />
<wsp:CollapsiblePanel id="secRdsApplicationEdit" runat="server"
TargetControlID="panelRdsApplicationEdit" meta:resourcekey="secRdsApplicationEdit" Text="">
</wsp:CollapsiblePanel>
<asp:Panel runat="server" ID="panelRdsApplicationEdit">
<div style="padding: 10px;">
<table> <table>
<tr> <tr>
<td class="FormSimpleLabel" style="width: 120px;"><asp:Localize ID="locCollectionName" runat="server" meta:resourcekey="locCollectionName" Text="Collection Name:"></asp:Localize></td> <td class="FormLabel150" style="width: 150px;">
<td class="FormSimpleLabel"> <asp:Localize ID="locLblApplicationName" runat="server" meta:resourcekey="locLblApplicationName" Text="Application Name"/>
<asp:Localize ID="locCName" runat="server" Text="" />
</td> </td>
</tr> <td>
<tr> <asp:TextBox ID="txtApplicationName" runat="server" CssClass="TextBox300" />
<td class="FormSimpleLabel" style="width: 120px;"><asp:Localize ID="locApplicationName" runat="server" meta:resourcekey="locApplicationName" Text="Collection Name:"></asp:Localize></td> <asp:RequiredFieldValidator ID="valApplicationName" runat="server" ErrorMessage="*" ControlToValidate="txtApplicationName" ValidationGroup="SaveRDSCollection"/>
<td class="FormSimpleLabel">
<asp:Localize ID="locAppName" runat="server" Text="" />
</td> </td>
</tr> </tr>
</table> </table>
</div>
</asp:Panel>
<fieldset id="UsersPanel" runat="server"> <wsp:CollapsiblePanel id="secRdsApplicationUsers" runat="server"
<legend><asp:Localize ID="locUsersSection" runat="server" meta:resourcekey="locUsersSection" Text="Users"></asp:Localize></legend> TargetControlID="panelRdsApplicationUsers" meta:resourcekey="secRdsApplicationUsers" Text="">
</wsp:CollapsiblePanel>
<asp:Panel runat="server" ID="panelRdsApplicationUsers">
<div style="padding: 10px;"> <div style="padding: 10px;">
<wsp:CollectionUsers id="users" runat="server" /> <wsp:CollectionUsers id="users" runat="server" />
</div> </div>
</fieldset> </asp:Panel>
<div class="FormFooterClean">
<div class="FormFooter"> <wsp:ItemButtonPanel id="buttonPanel" runat="server" ValidationGroup="SaveRDSCollection"
<asp:Button id="btnSave" runat="server" Text="Save" CssClass="Button1" meta:resourcekey="btnSave" ValidationGroup="SaveRDSCollectoin" OnClick="btnSave_Click"></asp:Button> OnSaveClick="btnSave_Click" OnSaveExitClick="btnSaveExit_Click" />
<asp:ValidationSummary ID="valSummary" runat="server" ShowMessageBox="True" ShowSummary="False" ValidationGroup="SaveRDSCollectoin" />
</div> </div>
</div> </div>
</div> </div>

View file

@ -44,17 +44,38 @@ namespace WebsitePanel.Portal.RDS
{ {
var collection = ES.Services.RDS.GetRdsCollection(PanelRequest.CollectionID); var collection = ES.Services.RDS.GetRdsCollection(PanelRequest.CollectionID);
var applications = ES.Services.RDS.GetCollectionRemoteApplications(PanelRequest.ItemID, collection.Name); var applications = ES.Services.RDS.GetCollectionRemoteApplications(PanelRequest.ItemID, collection.Name);
var remoteApp = applications.Where(x => x.DisplayName.Equals(PanelRequest.ApplicationID, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault(); var remoteApp = applications.Where(x => x.Alias.Equals(PanelRequest.ApplicationID, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
var collectionUsers = ES.Services.RDS.GetRdsCollectionUsers(PanelRequest.CollectionID); var organizationUsers = ES.Services.Organizations.GetOrganizationUsersPaged(PanelRequest.ItemID, null, null, null, 0, Int32.MaxValue).PageUsers;
var applicationUsers = ES.Services.RDS.GetApplicationUsers(PanelRequest.ItemID, PanelRequest.CollectionID, remoteApp); var applicationUsers = ES.Services.RDS.GetApplicationUsers(PanelRequest.ItemID, PanelRequest.CollectionID, remoteApp);
locCName.Text = collection.Name; litCollectionName.Text = collection.Name;
locAppName.Text = remoteApp.DisplayName; txtApplicationName.Text = remoteApp.DisplayName;
var remoteAppUsers = organizationUsers.Where(x => applicationUsers.Contains(x.DomainUserName));
users.SetUsers(collectionUsers.Where(x => applicationUsers.Contains(x.SamAccountName)).ToArray()); users.SetUsers(remoteAppUsers.ToArray());
} }
} }
private bool SaveApplicationUsers()
{
try
{
var collection = ES.Services.RDS.GetRdsCollection(PanelRequest.CollectionID);
var applications = ES.Services.RDS.GetCollectionRemoteApplications(PanelRequest.ItemID, collection.Name);
var remoteApp = applications.Where(x => x.Alias.Equals(PanelRequest.ApplicationID, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
remoteApp.DisplayName = txtApplicationName.Text;
ES.Services.RDS.SetApplicationUsers(PanelRequest.ItemID, PanelRequest.CollectionID, remoteApp, users.GetUsers().Select(x => x.AccountName).ToArray());
}
catch (Exception ex)
{
ShowErrorMessage("REMOTEAPPUSERS_NOT_UPDATED", ex);
return false;
}
return true;
}
protected void btnSave_Click(object sender, EventArgs e) protected void btnSave_Click(object sender, EventArgs e)
{ {
if (!Page.IsValid) if (!Page.IsValid)
@ -62,18 +83,20 @@ namespace WebsitePanel.Portal.RDS
return; return;
} }
try SaveApplicationUsers();
{ }
var collection = ES.Services.RDS.GetRdsCollection(PanelRequest.CollectionID);
var applications = ES.Services.RDS.GetCollectionRemoteApplications(PanelRequest.ItemID, collection.Name);
var remoteApp = applications.Where(x => x.DisplayName.Equals(PanelRequest.ApplicationID, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
ES.Services.RDS.SetApplicationUsers(PanelRequest.ItemID, PanelRequest.CollectionID, remoteApp, users.GetUsers().Select(x => x.AccountName).ToArray());
protected void btnSaveExit_Click(object sender, EventArgs e)
{
if (!Page.IsValid)
{
return;
}
if (SaveApplicationUsers())
{
Response.Redirect(EditUrl("SpaceID", PanelSecurity.PackageId.ToString(), "rds_collection_edit_apps", "CollectionId=" + PanelRequest.CollectionID, "ItemID=" + PanelRequest.ItemID)); Response.Redirect(EditUrl("SpaceID", PanelSecurity.PackageId.ToString(), "rds_collection_edit_apps", "CollectionId=" + PanelRequest.CollectionID, "ItemID=" + PanelRequest.ItemID));
} }
catch (Exception)
{
}
} }
} }
} }

View file

@ -40,67 +40,94 @@ namespace WebsitePanel.Portal.RDS {
protected global::System.Web.UI.WebControls.Localize locTitle; protected global::System.Web.UI.WebControls.Localize locTitle;
/// <summary> /// <summary>
/// messageBox control. /// litCollectionName control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox; protected global::System.Web.UI.WebControls.Literal litCollectionName;
/// <summary> /// <summary>
/// locCollectionName control. /// SimpleMessageBox1 control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Localize locCollectionName; protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox SimpleMessageBox1;
/// <summary> /// <summary>
/// locCName control. /// tabs control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Localize locCName; protected global::WebsitePanel.Portal.RDS.UserControls.RdsServerTabs tabs;
/// <summary> /// <summary>
/// locApplicationName control. /// secRdsApplicationEdit control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Localize locApplicationName; protected global::WebsitePanel.Portal.CollapsiblePanel secRdsApplicationEdit;
/// <summary> /// <summary>
/// locAppName control. /// panelRdsApplicationEdit control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Localize locAppName; protected global::System.Web.UI.WebControls.Panel panelRdsApplicationEdit;
/// <summary> /// <summary>
/// UsersPanel control. /// locLblApplicationName control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlGenericControl UsersPanel; protected global::System.Web.UI.WebControls.Localize locLblApplicationName;
/// <summary> /// <summary>
/// locUsersSection control. /// txtApplicationName control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Localize locUsersSection; protected global::System.Web.UI.WebControls.TextBox txtApplicationName;
/// <summary>
/// valApplicationName 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.RequiredFieldValidator valApplicationName;
/// <summary>
/// secRdsApplicationUsers control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.CollapsiblePanel secRdsApplicationUsers;
/// <summary>
/// panelRdsApplicationUsers 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.Panel panelRdsApplicationUsers;
/// <summary> /// <summary>
/// users control. /// users control.
@ -112,21 +139,12 @@ namespace WebsitePanel.Portal.RDS {
protected global::WebsitePanel.Portal.RDS.UserControls.RDSCollectionUsers users; protected global::WebsitePanel.Portal.RDS.UserControls.RDSCollectionUsers users;
/// <summary> /// <summary>
/// btnSave control. /// buttonPanel control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Button btnSave; protected global::WebsitePanel.Portal.ItemButtonPanel buttonPanel;
/// <summary>
/// valSummary 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.ValidationSummary valSummary;
} }
} }

View file

@ -42,7 +42,7 @@
<asp:TemplateField meta:resourcekey="gvUserName" HeaderText="gvUserName"> <asp:TemplateField meta:resourcekey="gvUserName" HeaderText="gvUserName">
<ItemStyle Width="30%" Wrap="false"/> <ItemStyle Width="30%" Wrap="false"/>
<ItemTemplate> <ItemTemplate>
<asp:Literal ID="litUserName" runat="server" Text='<%# string.Format("{0}\\{1}", Eval("DomainName"), Eval("UserName")) %>'/> <asp:Literal ID="litUserName" runat="server" Text='<%# Eval("UserName") %>'/>
<asp:HiddenField ID="hfUnifiedSessionId" runat="server" Value='<%# Eval("UnifiedSessionId") %>'/> <asp:HiddenField ID="hfUnifiedSessionId" runat="server" Value='<%# Eval("UnifiedSessionId") %>'/>
</ItemTemplate> </ItemTemplate>
</asp:TemplateField> </asp:TemplateField>

View file

@ -153,4 +153,7 @@
<data name="headerAddApps.Text" xml:space="preserve"> <data name="headerAddApps.Text" xml:space="preserve">
<value>Available Remote Applications</value> <value>Available Remote Applications</value>
</data> </data>
<data name="lnkDisplayName" xml:space="preserve">
<value>ShowProgressDialog('Loading ...');</value>
</data>
</root> </root>

View file

@ -24,16 +24,11 @@
<ItemStyle Width="90%" Wrap="false"> <ItemStyle Width="90%" Wrap="false">
</ItemStyle> </ItemStyle>
<ItemTemplate> <ItemTemplate>
<asp:Literal ID="litDisplayName" runat="server" Text='<%# Eval("DisplayName") %>'></asp:Literal> <asp:hyperlink id="lnkDisplayName" meta:resourcekey="lnkDisplayName" runat="server" Text='<%# Eval("DisplayName") %>' NavigateUrl='<%# GetCollectionUsersEditUrl(Eval("Alias").ToString()) %>'/>
<asp:HiddenField ID="hfFilePath" runat="server" Value='<%# Eval("FilePath") %>'/> <asp:HiddenField ID="hfFilePath" runat="server" Value='<%# Eval("FilePath") %>'/>
<asp:HiddenField ID="hfRequiredCommandLine" runat="server" Value='<%# Eval("RequiredCommandLine") %>'/> <asp:HiddenField ID="hfRequiredCommandLine" runat="server" Value='<%# Eval("RequiredCommandLine") %>'/>
</ItemTemplate> </ItemTemplate>
</asp:TemplateField> </asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:hyperlink id="lnkUsers" meta:resourcekey="lnkUsers" runat="server" NavigateUrl='<%# GetCollectionUsersEditUrl(Eval("DisplayName").ToString()) %>'>Users</asp:hyperlink>
</ItemTemplate>
</asp:TemplateField>
</Columns> </Columns>
</asp:GridView> </asp:GridView>
<br /> <br />

View file

@ -113,8 +113,8 @@ namespace WebsitePanel.Portal.RDS.UserControls
var sessionHosts = ES.Services.RDS.GetRdsCollectionSessionHosts(PanelRequest.CollectionID); var sessionHosts = ES.Services.RDS.GetRdsCollectionSessionHosts(PanelRequest.CollectionID);
var addedApplications = GetApps(); var addedApplications = GetApps();
var displayNames = addedApplications.Select(p => p.DisplayName); var aliases = addedApplications.Select(p => p.Alias);
apps = apps.Where(x => !displayNames.Contains(x.DisplayName)).ToList(); apps = apps.Where(x => !aliases.Contains(x.Alias)).ToList();
if (Direction == SortDirection.Ascending) if (Direction == SortDirection.Ascending)
{ {
@ -140,6 +140,15 @@ namespace WebsitePanel.Portal.RDS.UserControls
RequiredCommandLine = string.Format("/v:{0}", host.ToLower()) RequiredCommandLine = string.Format("/v:{0}", host.ToLower())
}; };
var sessionHost = collection.Servers.Where(s => s.FqdName.Equals(host, StringComparison.CurrentCultureIgnoreCase)).First();
if (sessionHost != null)
{
fullRemote.DisplayName = string.Format("Full Desktop - {0}", sessionHost.Name.ToLower());
}
fullRemote.Alias = fullRemote.DisplayName.Replace(" ", "");
if (apps.Count > 0) if (apps.Count > 0)
{ {
apps.Insert(0, fullRemote); apps.Insert(0, fullRemote);
@ -201,7 +210,7 @@ namespace WebsitePanel.Portal.RDS.UserControls
RemoteApplication app = new RemoteApplication(); RemoteApplication app = new RemoteApplication();
app.Alias = (string)gvApps.DataKeys[i][0]; app.Alias = (string)gvApps.DataKeys[i][0];
app.DisplayName = ((Literal)row.FindControl("litDisplayName")).Text; app.DisplayName = ((HyperLink)row.FindControl("lnkDisplayName")).Text;
app.FilePath = ((HiddenField)row.FindControl("hfFilePath")).Value; app.FilePath = ((HiddenField)row.FindControl("hfFilePath")).Value;
app.RequiredCommandLine = ((HiddenField)row.FindControl("hfRequiredCommandLine")).Value; app.RequiredCommandLine = ((HiddenField)row.FindControl("hfRequiredCommandLine")).Value;