diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/System/SystemSettings.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/System/SystemSettings.cs index 76778a16..d41e70b9 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/System/SystemSettings.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/System/SystemSettings.cs @@ -42,6 +42,7 @@ namespace WebsitePanel.EnterpriseServer public const string BACKUP_SETTINGS = "BackupSettings"; public const string SETUP_SETTINGS = "SetupSettings"; public const string WPI_SETTINGS = "WpiSettings"; + public const string FILEMANAGER_SETTINGS = "FileManagerSettings"; // key to access to wpi main & custom feed in wpi settings public const string WPI_MAIN_FEED_KEY = "WpiMainFeedUrl"; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/FilesProxy.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/FilesProxy.cs index 984321d9..7064e1c4 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/FilesProxy.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/FilesProxy.cs @@ -58,7 +58,9 @@ namespace WebsitePanel.EnterpriseServer { [System.Web.Services.WebServiceBindingAttribute(Name="esFilesSoap", Namespace="http://smbsaas/websitepanel/enterpriseserver")] [System.Xml.Serialization.XmlIncludeAttribute(typeof(ServiceProviderItem))] public partial class esFiles : Microsoft.Web.Services3.WebServicesClientProtocol { - + + private System.Threading.SendOrPostCallback GetFileManagerSettingsOperationCompleted; + private System.Threading.SendOrPostCallback GetFilesOperationCompleted; private System.Threading.SendOrPostCallback GetFilesByMaskOperationCompleted; @@ -110,6 +112,9 @@ namespace WebsitePanel.EnterpriseServer { this.Url = "http://localhost/EnterpriseServer/esFiles.asmx"; } + /// + public event GetFileManagerSettingsCompletedEventHandler GetFileManagerSettingsCompleted; + /// public event GetFilesCompletedEventHandler GetFilesCompleted; @@ -178,6 +183,52 @@ namespace WebsitePanel.EnterpriseServer { /// public event ExecuteSyncActionsCompletedEventHandler ExecuteSyncActionsCompleted; + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetFileManagerSettings", RequestNamespace = "http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace = "http://smbsaas/websitepanel/enterpriseserver", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public SystemSettings GetFileManagerSettings() + { + object[] results = this.Invoke("GetFileManagerSettings", new Object[] {}); + return ((SystemSettings)(results[0])); + } + + /// + public System.IAsyncResult BeginGetFileManagerSettings(System.AsyncCallback callback, object asyncState) + { + return this.BeginInvoke("GetFileManagerSettings", new Object[] {}, callback, asyncState); + } + + /// + public SystemSettings EndGetFileManagerSettings(System.IAsyncResult asyncResult) + { + object[] results = this.EndInvoke(asyncResult); + return ((SystemSettings)(results[0])); + } + + /// + public void GetFileManagerSettingsAsync() + { + this.GetFileManagerSettingsAsync(null); + } + + /// + public void GetFileManagerSettingsAsync(object userState) + { + if ((this.GetFileManagerSettingsOperationCompleted == null)) + { + this.GetFileManagerSettingsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetFileManagerSettingsOperationCompleted); + } + this.InvokeAsync("GetFileManagerSettings", new Object[] {}, this.GetFileManagerSettingsOperationCompleted, userState); + } + + private void OnGetFileManagerSettingsOperationCompleted(object arg) + { + if ((this.GetFileManagerSettingsCompleted != null)) + { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetFileManagerSettingsCompleted(this, new GetFileManagerSettingsCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } /// [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetFiles", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] @@ -1260,7 +1311,33 @@ namespace WebsitePanel.EnterpriseServer { - + public delegate void GetFileManagerSettingsCompletedEventHandler(object sender, GetFileManagerSettingsCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetFileManagerSettingsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs + { + + private object[] results; + + internal GetFileManagerSettingsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public SystemSettings Result + { + get + { + this.RaiseExceptionIfNecessary(); + return ((SystemSettings)(this.results[0])); + } + } + } /// diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Files/FilesController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Files/FilesController.cs index 74dd8d78..913941f1 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Files/FilesController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Files/FilesController.cs @@ -45,6 +45,11 @@ namespace WebsitePanel.EnterpriseServer { public class FilesController { + public static SystemSettings GetFileManagerSettings() + { + return SystemController.GetSystemSettingsInternal(SystemSettings.FILEMANAGER_SETTINGS, false); + } + public static OS.OperatingSystem GetOS(int packageId) { int sid = PackageController.GetPackageServiceId(packageId, ResourceGroups.Os); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs index b3a6199a..2b5d7b95 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs @@ -2341,7 +2341,7 @@ namespace WebsitePanel.EnterpriseServer foreach (ExchangeAccount user in securityGroup.MembersAccounts) { - OrganizationUser userAccount = GetAccountByAccountName(itemId, user.SamAccountName); + OrganizationUser userAccount = GetAccountByAccountName(itemId, user.AccountName); if (userAccount != null) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esFiles.asmx.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esFiles.asmx.cs index 14b2b455..7663d4a8 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esFiles.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esFiles.asmx.cs @@ -50,6 +50,12 @@ namespace WebsitePanel.EnterpriseServer [ToolboxItem(false)] public class esFiles : System.Web.Services.WebService { + [WebMethod] + public SystemSettings GetFileManagerSettings() + { + return FilesController.GetFileManagerSettings(); + } + [WebMethod] public static string GetHomeFolder(int packageId) { diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/ActiveDirectoryUtils.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/ActiveDirectoryUtils.cs index 27b223eb..ed0332dc 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/ActiveDirectoryUtils.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/ActiveDirectoryUtils.cs @@ -255,6 +255,18 @@ namespace WebsitePanel.Providers.HostedSolution return ret != null ? ret.ToString() : string.Empty; } + public static string GetCNFromADPath(string path) + { + string[] parts = path.Substring(path.ToUpper().IndexOf("CN=")).Split(','); + + if (parts.Length > 0) + { + return parts[0].Substring(3); + } + + return null; + } + public static string ConvertADPathToCanonicalName(string name) { diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/OrganizationProvider.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/OrganizationProvider.cs index 09089959..0bae0a80 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/OrganizationProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/OrganizationProvider.cs @@ -928,8 +928,10 @@ namespace WebsitePanel.Providers.HostedSolution securityGroup.Notes = ActiveDirectoryUtils.GetADObjectStringProperty(entry, ADAttributes.Notes); - securityGroup.AccountName = ActiveDirectoryUtils.GetADObjectStringProperty(entry, ADAttributes.SAMAccountName); - securityGroup.SAMAccountName = ActiveDirectoryUtils.GetADObjectStringProperty(entry, ADAttributes.SAMAccountName); + string samAccountName = ActiveDirectoryUtils.GetADObjectStringProperty(entry, ADAttributes.SAMAccountName); + + securityGroup.AccountName = samAccountName; + securityGroup.SAMAccountName = samAccountName; List members = new List(); @@ -939,7 +941,7 @@ namespace WebsitePanel.Providers.HostedSolution members.Add(new ExchangeAccount { - AccountName = tmpUser.AccountName, + AccountName = ActiveDirectoryUtils.GetCNFromADPath(userPath), SamAccountName = tmpUser.SamAccountName }); } @@ -948,10 +950,12 @@ namespace WebsitePanel.Providers.HostedSolution { DirectoryEntry groupEntry = ActiveDirectoryUtils.GetADObject(groupPath); + string tmpSamAccountName = ActiveDirectoryUtils.GetADObjectStringProperty(groupEntry, ADAttributes.SAMAccountName); + members.Add(new ExchangeAccount { - AccountName = ActiveDirectoryUtils.GetADObjectStringProperty(groupEntry, ADAttributes.SAMAccountName), - SamAccountName = ActiveDirectoryUtils.GetADObjectStringProperty(groupEntry, ADAttributes.SAMAccountName) + AccountName = tmpSamAccountName, + SamAccountName = tmpSamAccountName }); } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/SystemSettings.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/SystemSettings.ascx.resx index feb70193..d0dd8013 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/SystemSettings.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/SystemSettings.ascx.resx @@ -112,10 +112,10 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Save Settings @@ -153,4 +153,13 @@ Custom feeds: + + File Manager + + + Editable Extensions: + + + (One (1) extension per line) + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeDistributionListMemberOf.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeDistributionListMemberOf.ascx.cs index ec9a8933..39f21c95 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeDistributionListMemberOf.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeDistributionListMemberOf.ascx.cs @@ -45,14 +45,37 @@ namespace WebsitePanel.Portal.ExchangeServer { public partial class ExchangeDistributionListMemberOf : WebsitePanelModuleBase { + protected PackageContext cntx; + + protected PackageContext Cntx + { + get + { + if (cntx == null) + { + cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId); + } + + return cntx; + } + } + + protected bool EnableSecurityGroups + { + get + { + return Utils.CheckQouta(Quotas.ORGANIZATION_SECURITYGROUPMANAGEMENT, Cntx); + } + } + protected void Page_Load(object sender, EventArgs e) { + groups.SecurityGroupsEnabled = EnableSecurityGroups; + if (!IsPostBack) { BindSettings(); } - - } private void BindSettings() @@ -67,17 +90,20 @@ namespace WebsitePanel.Portal.ExchangeServer ExchangeAccount[] dLists = ES.Services.ExchangeServer.GetDistributionListsByMember(PanelRequest.ItemID, PanelRequest.AccountID); - ExchangeAccount[] secGroups = ES.Services.Organizations.GetSecurityGroupsByMember(PanelRequest.ItemID, PanelRequest.AccountID); - List groupsList = new List(); foreach (ExchangeAccount distList in dLists) { groupsList.Add(distList); } - foreach (ExchangeAccount secGroup in secGroups) + if (EnableSecurityGroups) { - groupsList.Add(secGroup); + ExchangeAccount[] secGroups = ES.Services.Organizations.GetSecurityGroupsByMember(PanelRequest.ItemID, PanelRequest.AccountID); + + foreach (ExchangeAccount secGroup in secGroups) + { + groupsList.Add(secGroup); + } } groups.SetAccounts(groupsList.ToArray()); @@ -96,18 +122,24 @@ namespace WebsitePanel.Portal.ExchangeServer try { - ExchangeAccount[] oldSecGroups = ES.Services.Organizations.GetSecurityGroupsByMember(PanelRequest.ItemID, PanelRequest.AccountID); - ExchangeAccount[] oldDistLists = ES.Services.ExchangeServer.GetDistributionListsByMember(PanelRequest.ItemID, PanelRequest.AccountID); - IList oldGroups = new List(); - foreach (ExchangeAccount distList in oldSecGroups) + + if (EnableSecurityGroups) { - oldGroups.Add(distList); + ExchangeAccount[] oldSecGroups = ES.Services.Organizations.GetSecurityGroupsByMember(PanelRequest.ItemID, PanelRequest.AccountID); + + + foreach (ExchangeAccount secGroup in oldSecGroups) + { + oldGroups.Add(secGroup); + } } - foreach (ExchangeAccount secGroup in oldDistLists) + ExchangeAccount[] oldDistLists = ES.Services.ExchangeServer.GetDistributionListsByMember(PanelRequest.ItemID, PanelRequest.AccountID); + + foreach (ExchangeAccount distList in oldDistLists) { - oldGroups.Add(secGroup); + oldGroups.Add(distList); } IDictionary newGroups = groups.GetFullAccounts(); diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMemberOf.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMemberOf.ascx.cs index 90250d87..7d80ff2a 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMemberOf.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMemberOf.ascx.cs @@ -35,8 +35,33 @@ namespace WebsitePanel.Portal.ExchangeServer { public partial class ExchangeMailboxMemberOf : WebsitePanelModuleBase { + protected PackageContext cntx; + + protected PackageContext Cntx + { + get + { + if (cntx == null) + { + cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId); + } + + return cntx; + } + } + + protected bool EnableSecurityGroups + { + get + { + return Utils.CheckQouta(Quotas.ORGANIZATION_SECURITYGROUPMANAGEMENT, Cntx); + } + } + protected void Page_Load(object sender, EventArgs e) { + groups.SecurityGroupsEnabled = EnableSecurityGroups; + if (!IsPostBack) { PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId); @@ -44,9 +69,7 @@ namespace WebsitePanel.Portal.ExchangeServer BindSettings(); UserInfo user = UsersHelper.GetUser(PanelSecurity.EffectiveUserId); - } - } private void BindSettings() @@ -59,21 +82,25 @@ namespace WebsitePanel.Portal.ExchangeServer // title litDisplayName.Text = mailbox.DisplayName; - //Distribution Lists - ExchangeAccount[] dLists = ES.Services.ExchangeServer.GetDistributionListsByMember(PanelRequest.ItemID, PanelRequest.AccountID); - - //Security Groups - ExchangeAccount[] securGroups = ES.Services.Organizations.GetSecurityGroupsByMember(PanelRequest.ItemID, PanelRequest.AccountID); List groupsList = new List(); + + //Distribution Lists + ExchangeAccount[] dLists = ES.Services.ExchangeServer.GetDistributionListsByMember(PanelRequest.ItemID, PanelRequest.AccountID); foreach (ExchangeAccount distList in dLists) { groupsList.Add(distList); } - foreach (ExchangeAccount secGroup in securGroups) + if (EnableSecurityGroups) { - groupsList.Add(secGroup); + //Security Groups + ExchangeAccount[] securGroups = ES.Services.Organizations.GetSecurityGroupsByMember(PanelRequest.ItemID, PanelRequest.AccountID); + + foreach (ExchangeAccount secGroup in securGroups) + { + groupsList.Add(secGroup); + } } groups.SetAccounts(groupsList.ToArray()); @@ -92,18 +119,23 @@ namespace WebsitePanel.Portal.ExchangeServer try { - ExchangeAccount[] oldSecGroups = ES.Services.Organizations.GetSecurityGroupsByMember(PanelRequest.ItemID, PanelRequest.AccountID); - ExchangeAccount[] oldDistLists = ES.Services.ExchangeServer.GetDistributionListsByMember(PanelRequest.ItemID, PanelRequest.AccountID); - IList oldGroups = new List(); - foreach (ExchangeAccount distList in oldSecGroups) + + if (EnableSecurityGroups) { - oldGroups.Add(distList); + ExchangeAccount[] oldSecGroups = ES.Services.Organizations.GetSecurityGroupsByMember(PanelRequest.ItemID, PanelRequest.AccountID); + + foreach (ExchangeAccount secGroup in oldSecGroups) + { + oldGroups.Add(secGroup); + } } - foreach (ExchangeAccount secGroup in oldDistLists) + ExchangeAccount[] oldDistLists = ES.Services.ExchangeServer.GetDistributionListsByMember(PanelRequest.ItemID, PanelRequest.AccountID); + + foreach (ExchangeAccount distList in oldDistLists) { - oldGroups.Add(secGroup); + oldGroups.Add(distList); } IDictionary newGroups = groups.GetFullAccounts(); diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationSecurityGroupMemberOf.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationSecurityGroupMemberOf.ascx.cs index 9b7fc8fa..cd8a0d03 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationSecurityGroupMemberOf.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationSecurityGroupMemberOf.ascx.cs @@ -37,8 +37,41 @@ namespace WebsitePanel.Portal.HostedSolution { public partial class OrganizationSecurityGroupMemberOf : WebsitePanelModuleBase { + protected PackageContext cntx; + + protected PackageContext Cntx + { + get + { + if (cntx == null) + { + cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId); + } + + return cntx; + } + } + + protected bool EnableDistributionLists + { + get + { + return Cntx.Groups.ContainsKey(ResourceGroups.Exchange) & Utils.CheckQouta(Quotas.EXCHANGE2007_DISTRIBUTIONLISTS, Cntx); + } + } + + protected bool EnableSecurityGroups + { + get + { + return Utils.CheckQouta(Quotas.ORGANIZATION_SECURITYGROUPMANAGEMENT, Cntx); + } + } + protected void Page_Load(object sender, EventArgs e) { + groups.DistributionListsEnabled = EnableDistributionLists; + if (!IsPostBack) { BindSettings(); @@ -53,22 +86,29 @@ namespace WebsitePanel.Portal.HostedSolution OrganizationSecurityGroup group = ES.Services.Organizations.GetSecurityGroupGeneralSettings(PanelRequest.ItemID, PanelRequest.AccountID); litDisplayName.Text = group.DisplayName; - - //Distribution Lists - ExchangeAccount[] dLists = ES.Services.ExchangeServer.GetDistributionListsByMember(PanelRequest.ItemID, PanelRequest.AccountID); - - //Security Groups - ExchangeAccount[] securGroups = ES.Services.Organizations.GetSecurityGroupsByMember(PanelRequest.ItemID, PanelRequest.AccountID); List groupsList = new List(); - foreach (ExchangeAccount distList in dLists) + + if (EnableDistributionLists) { - groupsList.Add(distList); + //Distribution Lists + ExchangeAccount[] dLists = ES.Services.ExchangeServer.GetDistributionListsByMember(PanelRequest.ItemID, PanelRequest.AccountID); + + foreach (ExchangeAccount distList in dLists) + { + groupsList.Add(distList); + } } - foreach (ExchangeAccount secGroup in securGroups) + if (EnableSecurityGroups) { - groupsList.Add(secGroup); + //Security Groups + ExchangeAccount[] securGroups = ES.Services.Organizations.GetSecurityGroupsByMember(PanelRequest.ItemID, PanelRequest.AccountID); + + foreach (ExchangeAccount secGroup in securGroups) + { + groupsList.Add(secGroup); + } } groups.SetAccounts(groupsList.ToArray()); @@ -87,21 +127,30 @@ namespace WebsitePanel.Portal.HostedSolution try { - ExchangeAccount[] oldSecGroups = ES.Services.Organizations.GetSecurityGroupsByMember(PanelRequest.ItemID, PanelRequest.AccountID); - ExchangeAccount[] oldDistLists = ES.Services.ExchangeServer.GetDistributionListsByMember(PanelRequest.ItemID, PanelRequest.AccountID); - IList oldGroups = new List(); - foreach (ExchangeAccount distList in oldSecGroups) + + if (EnableDistributionLists) { - oldGroups.Add(distList); + ExchangeAccount[] oldDistLists = ES.Services.ExchangeServer.GetDistributionListsByMember(PanelRequest.ItemID, PanelRequest.AccountID); + + foreach (ExchangeAccount distList in oldDistLists) + { + oldGroups.Add(distList); + } } - foreach (ExchangeAccount secGroup in oldDistLists) + if (EnableSecurityGroups) { - oldGroups.Add(secGroup); + ExchangeAccount[] oldSecGroups = ES.Services.Organizations.GetSecurityGroupsByMember(PanelRequest.ItemID, PanelRequest.AccountID); + + foreach (ExchangeAccount secGroup in oldSecGroups) + { + oldGroups.Add(secGroup); + } } IDictionary newGroups = groups.GetFullAccounts(); + foreach (ExchangeAccount oldGroup in oldGroups) { if (newGroups.ContainsKey(oldGroup.AccountName)) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserMemberOf.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserMemberOf.ascx.cs index 72cbe1dc..e5846c99 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserMemberOf.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserMemberOf.ascx.cs @@ -37,8 +37,42 @@ namespace WebsitePanel.Portal.HostedSolution { public partial class UserMemberOf : WebsitePanelModuleBase { + protected PackageContext cntx; + + protected PackageContext Cntx + { + get + { + if (cntx == null) + { + cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId); + } + + return cntx; + } + } + + protected bool EnableDistributionLists + { + get + { + return Cntx.Groups.ContainsKey(ResourceGroups.Exchange) & Utils.CheckQouta(Quotas.EXCHANGE2007_DISTRIBUTIONLISTS, Cntx); + } + } + + protected bool EnableSecurityGroups + { + get + { + return Utils.CheckQouta(Quotas.ORGANIZATION_SECURITYGROUPMANAGEMENT, Cntx); + } + } + protected void Page_Load(object sender, EventArgs e) { + groups.DistributionListsEnabled = EnableDistributionLists; + groups.SecurityGroupsEnabled = EnableSecurityGroups; + if (!IsPostBack) { BindSettings(); @@ -61,22 +95,29 @@ namespace WebsitePanel.Portal.HostedSolution || user.AccountType == ExchangeAccountType.Equipment); litDisplayName.Text = user.DisplayName; - - //Distribution Lists - ExchangeAccount[] dLists = ES.Services.ExchangeServer.GetDistributionListsByMember(PanelRequest.ItemID, PanelRequest.AccountID); - - //Security Groups - ExchangeAccount[] securGroups = ES.Services.Organizations.GetSecurityGroupsByMember(PanelRequest.ItemID, PanelRequest.AccountID); List groupsList = new List(); - foreach (ExchangeAccount distList in dLists) + + if (EnableDistributionLists) { - groupsList.Add(distList); + //Distribution Lists + ExchangeAccount[] dLists = ES.Services.ExchangeServer.GetDistributionListsByMember(PanelRequest.ItemID, PanelRequest.AccountID); + + foreach (ExchangeAccount distList in dLists) + { + groupsList.Add(distList); + } } - foreach (ExchangeAccount secGroup in securGroups) + if (EnableSecurityGroups) { - groupsList.Add(secGroup); + //Security Groups + ExchangeAccount[] securGroups = ES.Services.Organizations.GetSecurityGroupsByMember(PanelRequest.ItemID, PanelRequest.AccountID); + + foreach (ExchangeAccount secGroup in securGroups) + { + groupsList.Add(secGroup); + } } groups.SetAccounts(groupsList.ToArray()); @@ -95,21 +136,30 @@ namespace WebsitePanel.Portal.HostedSolution try { - ExchangeAccount[] oldSecGroups = ES.Services.Organizations.GetSecurityGroupsByMember(PanelRequest.ItemID, PanelRequest.AccountID); - ExchangeAccount[] oldDistLists = ES.Services.ExchangeServer.GetDistributionListsByMember(PanelRequest.ItemID, PanelRequest.AccountID); - IList oldGroups = new List(); - foreach (ExchangeAccount distList in oldSecGroups) + + if (EnableDistributionLists) { - oldGroups.Add(distList); + ExchangeAccount[] oldDistLists = ES.Services.ExchangeServer.GetDistributionListsByMember(PanelRequest.ItemID, PanelRequest.AccountID); + + foreach (ExchangeAccount distList in oldDistLists) + { + oldGroups.Add(distList); + } } - foreach (ExchangeAccount secGroup in oldDistLists) + if (EnableSecurityGroups) { - oldGroups.Add(secGroup); + ExchangeAccount[] oldSecGroups = ES.Services.Organizations.GetSecurityGroupsByMember(PanelRequest.ItemID, PanelRequest.AccountID); + + foreach (ExchangeAccount secGroup in oldSecGroups) + { + oldGroups.Add(secGroup); + } } IDictionary newGroups = groups.GetFullAccounts(); + foreach (ExchangeAccount oldGroup in oldGroups) { if (newGroups.ContainsKey(oldGroup.AccountName)) @@ -145,7 +195,6 @@ namespace WebsitePanel.Portal.HostedSolution messageBox.ShowSuccessMessage("ORGANIZATION_UPDATE_USER_SETTINGS"); - BindSettings(); } catch (Exception ex) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/UserControls/UserTabs.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/UserControls/UserTabs.ascx.cs index 99d73a43..4c314966 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/UserControls/UserTabs.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/UserControls/UserTabs.ascx.cs @@ -31,6 +31,7 @@ using System.Collections.Generic; using WebsitePanel.Portal.Code.UserControls; using WebsitePanel.WebPortal; using WebsitePanel.EnterpriseServer; +using WebsitePanel.Providers.HostedSolution; namespace WebsitePanel.Portal.ExchangeServer.UserControls { @@ -59,8 +60,23 @@ namespace WebsitePanel.Portal.ExchangeServer.UserControls PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId); - if (Utils.CheckQouta(Quotas.ORGANIZATION_SECURITYGROUPMANAGEMENT, cntx) || Utils.CheckQouta(Quotas.EXCHANGE2007_DISTRIBUTIONLISTS, cntx)) + bool bSuccess = Utils.CheckQouta(Quotas.ORGANIZATION_SECURITYGROUPMANAGEMENT, cntx); + + if (!bSuccess) + { + // get user settings + OrganizationUser user = ES.Services.Organizations.GetUserGeneralSettings(PanelRequest.ItemID, PanelRequest.AccountID); + + bSuccess = (Utils.CheckQouta(Quotas.EXCHANGE2007_DISTRIBUTIONLISTS, cntx) + && (user.AccountType == ExchangeAccountType.Mailbox + || user.AccountType == ExchangeAccountType.Room + || user.AccountType == ExchangeAccountType.Equipment)); + } + + if (bSuccess) + { tabsList.Add(CreateTab("user_memberof", "Tab.MemberOf")); + } // find selected menu item int idx = 0; diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/FileManager.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/FileManager.ascx.cs index b8fe38e6..301c869f 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/FileManager.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/FileManager.ascx.cs @@ -33,12 +33,14 @@ using System.Text; using System.Web; using System.Web.UI.WebControls; using WebsitePanel.Providers.OS; +using System.Linq; +using System.Text.RegularExpressions; namespace WebsitePanel.Portal { public partial class FileManager : WebsitePanelModuleBase { - string ALLOWED_EDIT_EXTENSIONS = ".txt.htm.html.php.pl.sql.cs.vb.ascx.aspx.inc.asp.config.xml.xsl.xslt.xsd.Master.htaccess.htpasswd.cshtml.vbhtml"; + public static string ALLOWED_EDIT_EXTENSIONS = ".txt,.htm,.html,.php,.pl,.sql,.cs,.vb,.ascx,.aspx,.inc,.asp,.config,.xml,.xsl,.xslt,.xsd,.master,.htaccess,.htpasswd,.cshtml,.vbhtml,.ini,.config"; protected void Page_Load(object sender, EventArgs e) { @@ -204,12 +206,16 @@ function SetCreateZipFocus() if (file.IsDirectory) return false; + // Get the Editable Extensions from the System Settings + // If it has not yet been set, we will use the original WebsitePanel allowed editable extensions + EnterpriseServer.SystemSettings settings = ES.Services.Files.GetFileManagerSettings(); + if (!String.IsNullOrEmpty(settings["EditableExtensions"])) + { + ALLOWED_EDIT_EXTENSIONS = settings["EditableExtensions"]; + } + string ext = Path.GetExtension(file.Name); - //allow to edit Master pages - if (ext == ".Master") - return true; - else - return ALLOWED_EDIT_EXTENSIONS.IndexOf(ext.ToLower()) != -1; + return ALLOWED_EDIT_EXTENSIONS.Split(',').ToArray().Contains(ext); } #region Path methods diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SystemSettings.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SystemSettings.ascx index 55b85a1a..24542dbe 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SystemSettings.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SystemSettings.ascx @@ -58,6 +58,18 @@ + + + + + + + + + +
+
protected global::WebsitePanel.Portal.UserControls.EditFeedsList wpiEditFeedsList; + /// + /// HeaderFileManagerSettings control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::WebsitePanel.Portal.CollapsiblePanel HeaderFileManagerSettings; + + /// + /// PanelFileManagereSettings control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Panel PanelFileManagereSettings; + + /// + /// lblFileManagerEditableExtensions control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Localize lblFileManagerEditableExtensions; + + /// + /// txtFileManagerEditableExtensions control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtFileManagerEditableExtensions; + + /// + /// litFileManagerEditableExtensions control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Literal litFileManagerEditableExtensions; + /// /// btnSaveSettings control. ///