diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/EnterpriseStorageProxy.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/EnterpriseStorageProxy.cs
index ef29192f..761f7449 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/EnterpriseStorageProxy.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/EnterpriseStorageProxy.cs
@@ -47,6 +47,8 @@ namespace WebsitePanel.EnterpriseServer {
private System.Threading.SendOrPostCallback GetEnterpriseFoldersOperationCompleted;
+ private System.Threading.SendOrPostCallback GetUserRootFoldersOperationCompleted;
+
private System.Threading.SendOrPostCallback GetEnterpriseFolderOperationCompleted;
private System.Threading.SendOrPostCallback CreateEnterpriseFolderOperationCompleted;
@@ -128,6 +130,9 @@ namespace WebsitePanel.EnterpriseServer {
///
public event GetEnterpriseFoldersCompletedEventHandler GetEnterpriseFoldersCompleted;
+ ///
+ public event GetUserRootFoldersCompletedEventHandler GetUserRootFoldersCompleted;
+
///
public event GetEnterpriseFolderCompletedEventHandler GetEnterpriseFolderCompleted;
@@ -456,6 +461,56 @@ namespace WebsitePanel.EnterpriseServer {
}
}
+ ///
+ [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetUserRootFolders", 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 SystemFile[] GetUserRootFolders(int itemId, int accountId, string userName, string displayName) {
+ object[] results = this.Invoke("GetUserRootFolders", new object[] {
+ itemId,
+ accountId,
+ userName,
+ displayName});
+ return ((SystemFile[])(results[0]));
+ }
+
+ ///
+ public System.IAsyncResult BeginGetUserRootFolders(int itemId, int accountId, string userName, string displayName, System.AsyncCallback callback, object asyncState) {
+ return this.BeginInvoke("GetUserRootFolders", new object[] {
+ itemId,
+ accountId,
+ userName,
+ displayName}, callback, asyncState);
+ }
+
+ ///
+ public SystemFile[] EndGetUserRootFolders(System.IAsyncResult asyncResult) {
+ object[] results = this.EndInvoke(asyncResult);
+ return ((SystemFile[])(results[0]));
+ }
+
+ ///
+ public void GetUserRootFoldersAsync(int itemId, int accountId, string userName, string displayName) {
+ this.GetUserRootFoldersAsync(itemId, accountId, userName, displayName, null);
+ }
+
+ ///
+ public void GetUserRootFoldersAsync(int itemId, int accountId, string userName, string displayName, object userState) {
+ if ((this.GetUserRootFoldersOperationCompleted == null)) {
+ this.GetUserRootFoldersOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetUserRootFoldersOperationCompleted);
+ }
+ this.InvokeAsync("GetUserRootFolders", new object[] {
+ itemId,
+ accountId,
+ userName,
+ displayName}, this.GetUserRootFoldersOperationCompleted, userState);
+ }
+
+ private void OnGetUserRootFoldersOperationCompleted(object arg) {
+ if ((this.GetUserRootFoldersCompleted != null)) {
+ System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
+ this.GetUserRootFoldersCompleted(this, new GetUserRootFoldersCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
+ }
+ }
+
///
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetEnterpriseFolder", 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 SystemFile GetEnterpriseFolder(int itemId, string folderName) {
@@ -1933,6 +1988,32 @@ namespace WebsitePanel.EnterpriseServer {
}
}
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ public delegate void GetUserRootFoldersCompletedEventHandler(object sender, GetUserRootFoldersCompletedEventArgs e);
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ public partial class GetUserRootFoldersCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+
+ private object[] results;
+
+ internal GetUserRootFoldersCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
+ base(exception, cancelled, userState) {
+ this.results = results;
+ }
+
+ ///
+ public SystemFile[] Result {
+ get {
+ this.RaiseExceptionIfNecessary();
+ return ((SystemFile[])(this.results[0]));
+ }
+ }
+ }
+
///
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void GetEnterpriseFolderCompletedEventHandler(object sender, GetEnterpriseFolderCompletedEventArgs e);
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/EnterpriseStorage/EnterpriseStorageController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/EnterpriseStorage/EnterpriseStorageController.cs
index 6402a7b0..7398203b 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/EnterpriseStorage/EnterpriseStorageController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/EnterpriseStorage/EnterpriseStorageController.cs
@@ -76,6 +76,11 @@ namespace WebsitePanel.EnterpriseServer
return GetFoldersInternal(itemId);
}
+ public static SystemFile[] GetUserRootFolders(int itemId, int accountId, string userName, string displayName)
+ {
+ return GetUserRootFoldersInternal(itemId, accountId, userName, displayName);
+ }
+
public static SystemFile GetFolder(int itemId, string folderName)
{
return GetFolderInternal(itemId, folderName);
@@ -554,6 +559,57 @@ namespace WebsitePanel.EnterpriseServer
}
}
+ protected static SystemFile[] GetUserRootFoldersInternal(int itemId, int accountId, string userName, string displayName)
+ {
+ try
+ {
+ var rootFolders = new List();
+
+ // load organization
+ Organization org = OrganizationController.GetOrganization(itemId);
+ if (org == null)
+ {
+ return new SystemFile[0];
+ }
+
+ int serviceId = GetEnterpriseStorageServiceID(org.PackageId);
+
+ if (serviceId == 0)
+ {
+ return new SystemFile[0];
+ }
+
+ EnterpriseStorage es = GetEnterpriseStorage(serviceId);
+
+ var webDavSettings = ObjectUtils.CreateListFromDataReader(
+ DataProvider.GetEnterpriseFolders(itemId)).ToArray();
+
+ var userGroups = OrganizationController.GetSecurityGroupsByMember(itemId, accountId);
+
+ foreach (var folder in es.GetFolders(org.OrganizationId, webDavSettings))
+ {
+ var permissions = ConvertToESPermission(itemId,folder.Rules);
+
+ foreach (var permission in permissions)
+ {
+ if ((!permission.IsGroup
+ && (permission.DisplayName == userName || permission.DisplayName == displayName))
+ || (permission.IsGroup && userGroups.Any(x => x.DisplayName == permission.DisplayName)))
+ {
+ rootFolders.Add(folder);
+ break;
+ }
+ }
+ }
+
+ return rootFolders.ToArray();
+ }
+ catch (Exception ex)
+ {
+ throw ex;
+ }
+ }
+
protected static SystemFile GetFolderInternal(int itemId, string folderName)
{
try
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esEnterpriseStorage.asmx.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esEnterpriseStorage.asmx.cs
index f5ba338b..eab4e26b 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esEnterpriseStorage.asmx.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esEnterpriseStorage.asmx.cs
@@ -92,6 +92,12 @@ namespace WebsitePanel.EnterpriseServer
return EnterpriseStorageController.GetFolders(itemId);
}
+ [WebMethod]
+ public SystemFile[] GetUserRootFolders(int itemId, int accountId, string userName, string displayName)
+ {
+ return EnterpriseStorageController.GetUserRootFolders(itemId, accountId, userName, displayName);
+ }
+
[WebMethod]
public SystemFile GetEnterpriseFolder(int itemId, string folderName)
{
diff --git a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Managers/WebDavManager.cs b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Managers/WebDavManager.cs
index de3626fd..ceb0beb8 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Managers/WebDavManager.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Managers/WebDavManager.cs
@@ -47,7 +47,7 @@ namespace WebsitePanel.WebDav.Core.Managers
if (string.IsNullOrWhiteSpace(pathPart))
{
- children = ConnectToWebDavServer().Select(x => new WebDavResource
+ children = GetWebDavRootItems().Select(x => new WebDavResource
{
Href = new Uri(x.Url),
ItemType = ItemType.Folder,
@@ -82,10 +82,9 @@ namespace WebsitePanel.WebDav.Core.Managers
SystemFile[] items;
-
if (string.IsNullOrWhiteSpace(pathPart))
{
- var rootItems = ConnectToWebDavServer().Select(x => x.Name).ToList();
+ var rootItems = GetWebDavRootItems().Select(x => x.Name).ToList();
rootItems.Insert(0, string.Empty);
items = WspContext.Services.EnterpriseStorage.SearchFiles(itemId, rootItems.ToArray(), searchValue, uesrPrincipalName, recursive);
@@ -285,28 +284,11 @@ namespace WebsitePanel.WebDav.Core.Managers
}
}
- private IList ConnectToWebDavServer()
+ private IList GetWebDavRootItems()
{
- var rootFolders = new List();
var user = WspContext.User;
- var userGroups = WSP.Services.Organizations.GetSecurityGroupsByMember(user.ItemId, user.AccountId);
-
- foreach (var folder in WSP.Services.EnterpriseStorage.GetEnterpriseFolders(WspContext.User.ItemId))
- {
- var permissions = WSP.Services.EnterpriseStorage.GetEnterpriseFolderPermissions(WspContext.User.ItemId, folder.Name);
-
- foreach (var permission in permissions)
- {
- if ((!permission.IsGroup
- && (permission.DisplayName == user.UserName || permission.DisplayName == user.DisplayName))
- || (permission.IsGroup && userGroups.Any(x => x.DisplayName == permission.DisplayName)))
- {
- rootFolders.Add(folder);
- break;
- }
- }
- }
+ var rootFolders = WspContext.Services.EnterpriseStorage.GetUserRootFolders(user.ItemId, user.AccountId,user.UserName, user.DisplayName);
return rootFolders;
}