This commit is contained in:
dev_amdtel 2014-03-13 14:10:34 +04:00
commit 1410f1b39c
40 changed files with 865 additions and 268 deletions

View file

@ -3098,6 +3098,17 @@ namespace WebsitePanel.EnterpriseServer
);
}
public static IDataReader GetOrganizationGroupsByDisplayName(int itemId, string displayName)
{
return SqlHelper.ExecuteReader(
ConnectionString,
CommandType.StoredProcedure,
"GetOrganizationGroupsByDisplayName",
new SqlParameter("@ItemID", itemId),
new SqlParameter("@DisplayName", displayName)
);
}
public static IDataReader SearchOrganizationAccounts(int actorId, int itemId,
string filterColumn, string filterValue, string sortColumn, bool includeMailboxes)
{
@ -4164,7 +4175,7 @@ namespace WebsitePanel.EnterpriseServer
#region Enterprise Storage
public static int AddEntepriseFolder(int itemId, string folderName)
public static int AddEntepriseFolder(int itemId, string folderName, int folderQuota, string locationDrive, string homeFolder, string domain)
{
SqlParameter prmId = new SqlParameter("@FolderID", SqlDbType.Int);
prmId.Direction = ParameterDirection.Output;
@ -4175,7 +4186,12 @@ namespace WebsitePanel.EnterpriseServer
"AddEnterpriseFolder",
prmId,
new SqlParameter("@ItemID", itemId),
new SqlParameter("@FolderName", folderName));
new SqlParameter("@FolderName", folderName),
new SqlParameter("@FolderQuota", folderQuota),
new SqlParameter("@LocationDrive", locationDrive),
new SqlParameter("@HomeFolder", homeFolder),
new SqlParameter("@Domain", domain)
);
// read identity
return Convert.ToInt32(prmId.Value);
@ -4203,6 +4219,27 @@ namespace WebsitePanel.EnterpriseServer
new SqlParameter("@FolderQuota", folderQuota));
}
public static IDataReader GetEnterpriseFolders(int itemId)
{
return SqlHelper.ExecuteReader(
ConnectionString,
CommandType.StoredProcedure,
"GetEnterpriseFolders",
new SqlParameter("@ItemID", itemId)
);
}
public static IDataReader GetEnterpriseFolder(int itemId, string folderName)
{
return SqlHelper.ExecuteReader(
ConnectionString,
CommandType.StoredProcedure,
"GetEnterpriseFolder",
new SqlParameter("@ItemID", itemId),
new SqlParameter("@FolderName", folderName)
);
}
#endregion
}
}

View file

@ -87,12 +87,12 @@ namespace WebsitePanel.EnterpriseServer
public static ResultObject CreateFolder(int itemId)
{
return CreateFolder(itemId, string.Empty);
return CreateFolder(itemId, string.Empty, 0, QuotaType.Soft, false);
}
public static ResultObject CreateFolder(int itemId, string folderName)
public static ResultObject CreateFolder(int itemId, string folderName, int quota, QuotaType quotaType, bool addDefaultGroup)
{
return CreateFolderInternal(itemId, folderName);
return CreateFolderInternal(itemId, folderName, quota, quotaType, addDefaultGroup);
}
public static ResultObject DeleteFolder(int itemId)
@ -354,7 +354,10 @@ namespace WebsitePanel.EnterpriseServer
EnterpriseStorage es = GetEnterpriseStorage(serviceId);
return es.GetFolders(org.OrganizationId);
var webDavSettings = ObjectUtils.CreateListFromDataReader<WebDavSetting>(
DataProvider.GetEnterpriseFolders(itemId)).ToArray();
return es.GetFolders(org.OrganizationId, webDavSettings);
}
catch (Exception ex)
{
@ -375,7 +378,10 @@ namespace WebsitePanel.EnterpriseServer
EnterpriseStorage es = GetEnterpriseStorage(GetEnterpriseStorageServiceID(org.PackageId));
return es.GetFolder(org.OrganizationId, folderName);
var webDavSetting = ObjectUtils.FillObjectFromDataReader<WebDavSetting>(
DataProvider.GetEnterpriseFolder(itemId, folderName));
return es.GetFolder(org.OrganizationId, folderName, webDavSetting);
}
catch (Exception ex)
{
@ -396,9 +402,12 @@ namespace WebsitePanel.EnterpriseServer
EnterpriseStorage es = GetEnterpriseStorage(GetEnterpriseStorageServiceID(org.PackageId));
if (es.GetFolder(org.OrganizationId, newFolder) == null)
var webDavSetting = ObjectUtils.FillObjectFromDataReader<WebDavSetting>(
DataProvider.GetEnterpriseFolder(itemId, oldFolder));
if (webDavSetting == null)
{
SystemFile folder = es.RenameFolder(org.OrganizationId, oldFolder, newFolder);
SystemFile folder = es.RenameFolder(org.OrganizationId, oldFolder, newFolder, webDavSetting);
DataProvider.UpdateEnterpriseFolder(itemId, oldFolder, newFolder, folder.FRSMQuotaGB);
@ -413,7 +422,7 @@ namespace WebsitePanel.EnterpriseServer
}
}
protected static ResultObject CreateFolderInternal(int itemId, string folderName)
protected static ResultObject CreateFolderInternal(int itemId, string folderName, int quota, QuotaType quotaType, bool addDefaultGroup)
{
ResultObject result = TaskManager.StartResultTask<ResultObject>("ENTERPRISE_STORAGE", "CREATE_FOLDER");
@ -430,11 +439,56 @@ namespace WebsitePanel.EnterpriseServer
EnterpriseStorage es = GetEnterpriseStorage(GetEnterpriseStorageServiceID(org.PackageId));
if (es.GetFolder(org.OrganizationId, folderName) == null)
{
es.CreateFolder(org.OrganizationId, folderName);
var webDavSetting = ObjectUtils.FillObjectFromDataReader<WebDavSetting>(
DataProvider.GetEnterpriseFolder(itemId, folderName));
DataProvider.AddEntepriseFolder(itemId, folderName);
if (webDavSetting == null)
{
int esId = PackageController.GetPackageServiceId(org.PackageId, ResourceGroups.EnterpriseStorage);
StringDictionary esSesstings = ServerController.GetServiceSettings(esId);
var setting = ObjectUtils.CreateListFromDataReader<WebDavSetting>(
DataProvider.GetEnterpriseFolders(itemId)).LastOrDefault(x => !x.IsEmpty())
?? new WebDavSetting(esSesstings["LocationDrive"], esSesstings["UsersHome"], esSesstings["UsersDomain"]);
es.CreateFolder(org.OrganizationId, folderName, setting);
DataProvider.AddEntepriseFolder(itemId, folderName, quota,
setting.LocationDrive, setting.HomeFolder, setting.Domain);
SetFolderQuota(org.PackageId, org.OrganizationId, folderName, quota, quotaType, setting);
DataProvider.UpdateEnterpriseFolder(itemId, folderName, folderName, quota);
if (addDefaultGroup)
{
var groupName = string.Format("{0} Folder Users", folderName);
var account = ObjectUtils.CreateListFromDataReader<ExchangeAccount>(
DataProvider.GetOrganizationGroupsByDisplayName(itemId, groupName)).FirstOrDefault();
var accountId = account == null
? OrganizationController.CreateSecurityGroup(itemId, groupName)
: account.AccountId;
var securityGroup = OrganizationController.GetSecurityGroupGeneralSettings(itemId, accountId);
var rules = new List<WebDavFolderRule>() {
new WebDavFolderRule
{
Roles = new List<string>() { securityGroup.AccountName },
Read = true,
Write = true,
Source = true,
Pathes = new List<string>() { "*" }
}
};
es.SetFolderWebDavRules(org.OrganizationId, folderName, webDavSetting, rules.ToArray());
}
}
else
{
@ -475,14 +529,13 @@ namespace WebsitePanel.EnterpriseServer
return;
}
EnterpriseStorage es = GetEnterpriseStorage(GetEnterpriseStorageServiceID(org.PackageId));
es.CreateFolder(org.OrganizationId, folderName);
// check if it's not root folder
if (!string.IsNullOrEmpty(folderName))
{
SetFolderQuota(org.PackageId, org.OrganizationId, folderName, quota, quotaType);
var webDavSetting = ObjectUtils.FillObjectFromDataReader<WebDavSetting>(
DataProvider.GetEnterpriseFolder(itemId, folderName));
SetFolderQuota(org.PackageId, org.OrganizationId, folderName, quota, quotaType, webDavSetting);
DataProvider.UpdateEnterpriseFolder(itemId, folderName, folderName, quota);
}
@ -519,7 +572,10 @@ namespace WebsitePanel.EnterpriseServer
EnterpriseStorage es = GetEnterpriseStorage(GetEnterpriseStorageServiceID(org.PackageId));
es.DeleteFolder(org.OrganizationId, folderName);
var webDavSetting = ObjectUtils.FillObjectFromDataReader<WebDavSetting>(
DataProvider.GetEnterpriseFolder(itemId, folderName));
es.DeleteFolder(org.OrganizationId, folderName, webDavSetting);
DataProvider.DeleteEnterpriseFolder(itemId, folderName);
}
@ -562,21 +618,23 @@ namespace WebsitePanel.EnterpriseServer
DataProvider.SearchExchangeAccountsByTypes(SecurityContext.User.UserId, itemId,
accountTypes, filterColumn, filterValue, sortColumn));
return tmpAccounts;
List<ExchangeAccount> exAccounts = new List<ExchangeAccount>();
// on large lists is very slow
foreach (ExchangeAccount tmpAccount in tmpAccounts.ToArray())
{
if (tmpAccount.AccountType == ExchangeAccountType.SecurityGroup || tmpAccount.AccountType == ExchangeAccountType.DefaultSecurityGroup
? OrganizationController.GetSecurityGroupGeneralSettings(itemId, tmpAccount.AccountId) == null
: OrganizationController.GetUserGeneralSettings(itemId, tmpAccount.AccountId) == null)
continue;
//List<ExchangeAccount> exAccounts = new List<ExchangeAccount>();
exAccounts.Add(tmpAccount);
}
//foreach (ExchangeAccount tmpAccount in tmpAccounts.ToArray())
//{
// if (tmpAccount.AccountType == ExchangeAccountType.SecurityGroup || tmpAccount.AccountType == ExchangeAccountType.DefaultSecurityGroup
// ? OrganizationController.GetSecurityGroupGeneralSettings(itemId, tmpAccount.AccountId) == null
// : OrganizationController.GetUserGeneralSettings(itemId, tmpAccount.AccountId) == null)
// continue;
return exAccounts;
// exAccounts.Add(tmpAccount);
//}
//return exAccounts;
}
protected static SystemFilesPaged GetEnterpriseFoldersPagedInternal(int itemId, string filterValue, string sortColumn, int startRow, int maximumRows)
@ -595,7 +653,11 @@ namespace WebsitePanel.EnterpriseServer
if (CheckUsersDomainExistsInternal(itemId, org.PackageId))
{
EnterpriseStorage es = GetEnterpriseStorage(GetEnterpriseStorageServiceID(org.PackageId));
List<SystemFile> folders = es.GetFolders(org.OrganizationId).Where(x => x.Name.Contains(filterValue)).ToList();
var webDavSettings = ObjectUtils.CreateListFromDataReader<WebDavSetting>(
DataProvider.GetEnterpriseFolders(itemId)).ToArray();
List<SystemFile> folders = es.GetFolders(org.OrganizationId, webDavSettings).Where(x => x.Name.Contains(filterValue)).ToList();
switch (sortColumn)
{
@ -720,7 +782,10 @@ namespace WebsitePanel.EnterpriseServer
EnterpriseStorage es = GetEnterpriseStorage(GetEnterpriseStorageServiceID(org.PackageId));
es.SetFolderWebDavRules(org.OrganizationId, folder, rules);
var webDavSetting = ObjectUtils.FillObjectFromDataReader<WebDavSetting>(
DataProvider.GetEnterpriseFolder(itemId, folder));
es.SetFolderWebDavRules(org.OrganizationId, folder, webDavSetting, rules);
}
catch (Exception ex)
{
@ -754,7 +819,10 @@ namespace WebsitePanel.EnterpriseServer
EnterpriseStorage es = GetEnterpriseStorage(GetEnterpriseStorageServiceID(org.PackageId));
return es.GetFolderWebDavRules(org.OrganizationId, folder);
var webDavSetting = ObjectUtils.FillObjectFromDataReader<WebDavSetting>(
DataProvider.GetEnterpriseFolder(itemId, folder));
return es.GetFolderWebDavRules(org.OrganizationId, folder, webDavSetting);
}
catch (Exception ex)
{
@ -831,15 +899,17 @@ namespace WebsitePanel.EnterpriseServer
if (permission.Access.ToLower().Contains("read-only"))
{
rule.Read = true;
rule.Source = true;
}
if (permission.Access.ToLower().Contains("read-write"))
{
rule.Write = true;
rule.Read = true;
rule.Source = true;
}
rule.Source = true;
rule.Pathes.Add("*");
rules.Add(rule);
@ -901,8 +971,11 @@ namespace WebsitePanel.EnterpriseServer
}
private static void SetFolderQuota(int packageId, string orgId, string folderName, int quotaSize, QuotaType quotaType)
private static void SetFolderQuota(int packageId, string orgId, string folderName, int quotaSize, QuotaType quotaType, WebDavSetting setting)
{
if (quotaSize == 0)
return;
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (accountCheck < 0)
return;
@ -915,13 +988,16 @@ namespace WebsitePanel.EnterpriseServer
if (esServiceId != 0)
{
StringDictionary esSesstings = ServerController.GetServiceSettings(esServiceId);
var curSetting = setting;
string usersHome = esSesstings["UsersHome"];
string usersDomain = esSesstings["UsersDomain"];
string locationDrive = esSesstings["LocationDrive"];
if (curSetting == null || curSetting.IsEmpty())
{
StringDictionary esSesstings = ServerController.GetServiceSettings(esServiceId);
var orgFolder = Path.Combine(usersHome, orgId, folderName);
curSetting = new WebDavSetting(esSesstings["LocationDrive"], esSesstings["UsersHome"], esSesstings["UsersDomain"]);
}
var orgFolder = Path.Combine(curSetting.HomeFolder, orgId, folderName);
var os = GetOS(packageId);
@ -946,7 +1022,7 @@ namespace WebsitePanel.EnterpriseServer
#endregion
os.SetQuotaLimitOnFolder(orgFolder, locationDrive, quotaType, quotaSize.ToString() + unit, 0, String.Empty, String.Empty);
os.SetQuotaLimitOnFolder(orgFolder, curSetting.LocationDrive, quotaType, quotaSize.ToString() + unit, 0, String.Empty, String.Empty);
}
catch (Exception ex)
{

View file

@ -2867,33 +2867,36 @@ namespace WebsitePanel.EnterpriseServer
DataProvider.SearchExchangeAccountsByTypes(SecurityContext.User.UserId, itemId,
accountTypes, filterColumn, filterValue, sortColumn));
return tmpAccounts;
List<ExchangeAccount> accounts = new List<ExchangeAccount>();
// on large lists is very slow
foreach (ExchangeAccount tmpAccount in tmpAccounts.ToArray())
{
bool bSuccess = false;
//List<ExchangeAccount> accounts = new List<ExchangeAccount>();
switch (tmpAccount.AccountType)
{
case ExchangeAccountType.SecurityGroup:
bSuccess = GetSecurityGroupGeneralSettings(itemId, tmpAccount.AccountId) != null;
break;
case ExchangeAccountType.DistributionList:
bSuccess = ExchangeServerController.GetDistributionListGeneralSettings(itemId, tmpAccount.AccountId) != null;
break;
default:
bSuccess = GetUserGeneralSettings(itemId, tmpAccount.AccountId) != null;
break;
}
//foreach (ExchangeAccount tmpAccount in tmpAccounts.ToArray())
//{
// bool bSuccess = false;
if (bSuccess)
{
accounts.Add(tmpAccount);
}
}
// switch (tmpAccount.AccountType)
// {
// case ExchangeAccountType.SecurityGroup:
// bSuccess = GetSecurityGroupGeneralSettings(itemId, tmpAccount.AccountId) != null;
// break;
// case ExchangeAccountType.DistributionList:
// bSuccess = ExchangeServerController.GetDistributionListGeneralSettings(itemId, tmpAccount.AccountId) != null;
// break;
// default:
// bSuccess = GetUserGeneralSettings(itemId, tmpAccount.AccountId) != null;
// break;
// }
return accounts;
// if (bSuccess)
// {
// accounts.Add(tmpAccount);
// }
//}
//return accounts;
}
}
}