diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index 30e79afd..ae5cd486 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -8603,4 +8603,31 @@ LEFT OUTER JOIN ExchangeMailboxPlans AS AP ON E.ArchivingMailboxPlanId = AP.Mail WHERE E.UserPrincipalName = @UserPrincipalName RETURN -GO \ No newline at end of file +GO + +-- Service items count by name and serviceid + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetServiceItemsCountByNameAndServiceId') +DROP PROCEDURE GetServiceItemsCountByNameAndServiceId +GO + +CREATE PROCEDURE [dbo].[GetServiceItemsCountByNameAndServiceId] +( + @ActorID int, + @ServiceId int, + @ItemName nvarchar(500), + @GroupName nvarchar(100) = NULL, + @ItemTypeName nvarchar(200) +) +AS +SELECT Count(*) +FROM ServiceItems AS SI +INNER JOIN ServiceItemTypes AS SIT ON SI.ItemTypeID = SIT.ItemTypeID +INNER JOIN ResourceGroups AS RG ON SIT.GroupID = RG.GroupID +INNER JOIN Services AS S ON SI.ServiceID = S.ServiceID +WHERE S.ServiceID = @ServiceId +AND SIT.TypeName = @ItemTypeName +AND SI.ItemName = @ItemName +AND ((@GroupName IS NULL) OR (@GroupName IS NOT NULL AND RG.GroupName = @GroupName)) +RETURN +GO diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs index 1ef34bd0..7eac871a 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs @@ -1197,6 +1197,24 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@itemName", itemName)); } + public static int GetServiceItemsCountByNameAndServiceId(int actorId, int serviceId, string groupName, + string itemName, string itemTypeName) + { + int res = 0; + + object obj = SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetServiceItemsCountByNameAndServiceId", + new SqlParameter("@ActorID", actorId), + new SqlParameter("@ServiceId", serviceId), + new SqlParameter("@ItemName", itemName), + new SqlParameter("@GroupName", groupName), + new SqlParameter("@ItemTypeName", itemTypeName)); + + if (!int.TryParse(obj.ToString(), out res)) return -1; + + return res; + } + public static int AddServiceItem(int actorId, int serviceId, int packageId, string itemName, string itemTypeName, string xmlProperties) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DatabaseServers/DatabaseServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DatabaseServers/DatabaseServerController.cs index 246b6155..afbb2652 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DatabaseServers/DatabaseServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DatabaseServers/DatabaseServerController.cs @@ -125,8 +125,8 @@ namespace WebsitePanel.EnterpriseServer if (serviceId == 0) return BusinessErrorCodes.ERROR_MSSQL_RESOURCE_UNAVAILABLE; - // check package items - if (PackageController.GetPackageItemByName(item.PackageId, groupName, item.Name, typeof(SqlDatabase)) != null) + // check service items + if (PackageController.GetServiceItemsCountByNameAndServiceId(serviceId, groupName, item.Name, typeof(SqlDatabase)) > 0) return BusinessErrorCodes.ERROR_MSSQL_DATABASES_PACKAGE_ITEM_EXISTS; // place log record diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs index 19508ce5..292abb2a 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs @@ -1380,6 +1380,14 @@ namespace WebsitePanel.EnterpriseServer return CreateServiceItem(dvItem[0], dsItem.Tables[1].DefaultView); } + public static int GetServiceItemsCountByNameAndServiceId(int serviceId, string groupName, string itemName, Type itemType) + { + string itemTypeName = ObjectUtils.GetTypeFullName(itemType); + + return DataProvider.GetServiceItemsCountByNameAndServiceId(SecurityContext.User.UserId, + serviceId, groupName, itemName, itemTypeName); + } + public static bool CheckServiceItemExists(string itemName, Type itemType) { return CheckServiceItemExists(itemName, null, itemType);