From f34ff4f2c5366909b51179f4bcfe5ee82846fc3c Mon Sep 17 00:00:00 2001 From: McMak Date: Tue, 19 May 2015 14:15:06 +0300 Subject: [PATCH 01/16] Installer: old to new update #1 --- .../Sources/Setup.WIXInstaller/Product.wxs | 6 +- .../WebsitePanel.Setup/Internal/Adapter.cs | 17 +- .../Internal/XmlDocumentMerge.cs | 146 +- WebsitePanel/Database/wix_install_db.sql | 8 +- WebsitePanel/Database/wix_update_db.sql | 2388 +++++++++++++---- 5 files changed, 2056 insertions(+), 509 deletions(-) diff --git a/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs b/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs index 6d4f921b..ebf7abe3 100644 --- a/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs +++ b/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs @@ -596,13 +596,13 @@ - + - + - + diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs index ea1913ec..1c873917 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs @@ -3928,6 +3928,13 @@ namespace WebsitePanel.Setup.Internal { try { + XmlDocumentMerge.KeyAttributes = new List { "name", "id", "key", "pageID", "localName", "xmlns", "privatePath", "moduleDefinitionID", "ref", "verb;path", "controlRenderingCompatibilityVersion;clientIDMode" }; + XmlDocumentMerge.FrozenAttributes = new List + { + new XmlDocumentMerge.FrozenAttrTag() { Path="configuration/microsoft.web.services3/security/securityTokenManager/add", Attributes = new List() {"localName"} }, + new XmlDocumentMerge.FrozenAttrTag(true) { Path="compilation", Attributes = new List() {"targetFramework"} }, + new XmlDocumentMerge.FrozenAttrTag() { Path="configuration/startup/supportedRuntime", Attributes = new List() {"version", "sku" } } + }; Log.WriteStart("RestoreXmlConfigs"); var Backup = BackupRestore.Find(Ctx.InstallerFolder, Global.DefaultProductName, Ctx.ComponentName); switch(Ctx.ComponentCode) @@ -3940,21 +3947,13 @@ namespace WebsitePanel.Setup.Internal case Global.EntServer.ComponentCode: { Backup.XmlFiles.Add("Web.config"); + Backup.XmlFiles.Add(@"bin\WebsitePanel.SchedulerService.exe.config"); } break; case Global.WebPortal.ComponentCode: { Backup.XmlFiles.Add("Web.config"); - Backup.XmlFiles.Add(@"App_Data\Countries.config"); - Backup.XmlFiles.Add(@"App_Data\CountryStates.config"); - Backup.XmlFiles.Add(@"App_Data\Ecommerce_Modules.config"); - Backup.XmlFiles.Add(@"App_Data\Ecommerce_Pages.config"); - Backup.XmlFiles.Add(@"App_Data\ESModule_ControlsHierarchy.config"); - Backup.XmlFiles.Add(@"App_Data\ModulesData.config"); Backup.XmlFiles.Add(@"App_Data\SiteSettings.config"); - Backup.XmlFiles.Add(@"App_Data\SupportedLocales.config"); - Backup.XmlFiles.Add(@"App_Data\SupportedThemes.config"); - Backup.XmlFiles.Add(@"App_Data\WebsitePanel_Modules.config"); Backup.XmlFiles.Add(@"App_Data\WebsitePanel_Pages.config"); } break; diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/XmlDocumentMerge.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/XmlDocumentMerge.cs index 4c4511c4..50a10dce 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/XmlDocumentMerge.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/XmlDocumentMerge.cs @@ -8,14 +8,46 @@ namespace WebsitePanel.Setup.Internal { public static class XmlDocumentMerge { + public class AttrTag + { + public AttrTag() + : this(null) + { + + } + public AttrTag(params string[] Attributes) + { + this.Attributes = Attributes; + Priority = Attributes == null ? 0 : (ulong)Attributes.LongLength; + } + public ulong Priority { get; private set; } + public string[] Attributes; + } + public class FrozenAttrTag + { + public FrozenAttrTag() + : this(false) + { + + } + public FrozenAttrTag(bool Relative) + { + IsRelative = Relative; + } + public string Path { get; set; } + public IList Attributes { get; set; } + public bool IsRelative { get; private set; } + } const string SuccessFormat = "Success: {0}."; const string ErrorFormat = "Error: {0}."; const string MergeCompleted = "XmlDocumentMerge completed"; static XmlDocumentMerge() { - KeyAttributes = new List { "name", "id", "key" }; + KeyAttributes = new List(); + FrozenAttributes = new List(); } - public static List KeyAttributes { get; set; } + public static IList KeyAttributes { get; set; } + public static IList FrozenAttributes { get; set; } public static string Process(string Src, string Dst, string SaveTo = "") { var Result = string.Empty; @@ -83,57 +115,97 @@ namespace WebsitePanel.Setup.Internal } private static string NodeView(XPathNavigator Navi) { - foreach (var Attr in KeyAttributes) + foreach (var Item in GetProcessingChain(KeyAttributes)) { - var Value = Navi.GetAttribute(Attr, string.Empty); - if (!string.IsNullOrWhiteSpace(Value)) - return string.Format("{0}[@{1}='{2}']", Navi.Name, Attr, Value); + string Result = string.Empty; + foreach (var Attr in Item.Attributes) + { + var Value = Navi.GetAttribute(Attr, string.Empty); + if (string.IsNullOrWhiteSpace(Value)) + { + Result = string.Empty; + continue; + } + else + { + if (string.IsNullOrWhiteSpace(Result)) + Result = string.Format("@{0}='{1}'", Attr, Value); + else + Result = string.Format("{0} and @{1}='{2}'", Result, Attr, Value); + } + } + if (!string.IsNullOrWhiteSpace(Result)) + return string.Format("{0}[{1}]", Navi.Name, Result); } return Navi.Name; } private static void Merge(XPathNavigator DstNavi, XmlDocument SrcDoc, string Parent) { - if (DstNavi.NodeType == XPathNodeType.Element) + var Current = NodePath(Parent, NodeView(DstNavi)); + if (!string.IsNullOrWhiteSpace(Current)) { - var SrcElem = SrcDoc.SelectSingleNode(NodePath(Parent, NodeView(DstNavi))); - if (SrcElem != null) + if (DstNavi.NodeType == XPathNodeType.Element) { - if (DstNavi.MoveToFirstAttribute()) + var SrcElem = SrcDoc.SelectSingleNode(Current); + if (SrcElem != null) { - do + var Frozen = GetFrozenAttributes(Current, FrozenAttributes); + if (DstNavi.MoveToFirstAttribute()) { - var SrcElemAttr = SrcElem.Attributes[DstNavi.LocalName]; - if (SrcElemAttr != null) - DstNavi.SetValue(SrcElemAttr.Value); + do + { + var SrcElemAttr = SrcElem.Attributes[DstNavi.LocalName]; + if (SrcElemAttr != null && CanProcess(DstNavi.LocalName, Frozen)) + DstNavi.SetValue(SrcElemAttr.Value); + } + while (DstNavi.MoveToNextAttribute()); + DstNavi.MoveToParent(); } - while (DstNavi.MoveToNextAttribute()); - DstNavi.MoveToParent(); } } - } - else if (DstNavi.NodeType == XPathNodeType.Text) - { - var SrcElem = SrcDoc.SelectSingleNode(NodePath(Parent, NodeView(DstNavi))); - if (SrcElem != null) - DstNavi.SetValue(SrcElem.InnerText); - } - var Here = NodeView(DstNavi); - if (DstNavi.MoveToFirstChild()) - { - do + else if (DstNavi.NodeType == XPathNodeType.Text) { - Merge(DstNavi, SrcDoc, NodePath(Parent, Here)); + var SrcElem = SrcDoc.SelectSingleNode(Current); + if (SrcElem != null) + DstNavi.SetValue(SrcElem.InnerText); + } + if (DstNavi.MoveToFirstChild()) + { + do + { + Merge(DstNavi, SrcDoc, Current); + } + while (DstNavi.MoveToNext()); + DstNavi.MoveToParent(); + } + else if (DstNavi.NodeType == XPathNodeType.Element) + { + var SrcElem = SrcDoc.SelectSingleNode(Current); + if (SrcElem != null && !string.IsNullOrWhiteSpace(SrcElem.InnerXml)) + foreach (XmlNode Child in SrcElem.ChildNodes) + DstNavi.AppendChild(Child.CloneNode(true).CreateNavigator()); } - while (DstNavi.MoveToNext()); - DstNavi.MoveToParent(); - } - else if (DstNavi.NodeType == XPathNodeType.Element) - { - var SrcElem = SrcDoc.SelectSingleNode(NodePath(Parent, Here)); - if (SrcElem != null && !string.IsNullOrWhiteSpace(SrcElem.InnerXml)) - foreach (XmlNode Child in SrcElem.ChildNodes) - DstNavi.AppendChild(Child.CloneNode(true).CreateNavigator()); } } + private static IList GetProcessingChain(IEnumerable Attributes) + { + var Delimiter = ";"; + var Chain = new List(); + foreach (var Attribute in Attributes) + Chain.Add(new AttrTag(Attribute.Split(new string[] { Delimiter }, StringSplitOptions.RemoveEmptyEntries))); + Chain.Sort(delegate(AttrTag a, AttrTag b) { return a.Priority == b.Priority ? 0 : a.Priority > b.Priority ? -1 : 1; }); + return Chain; + } + private static FrozenAttrTag GetFrozenAttributes(string Path, IEnumerable Frozens) + { + foreach (var Frozen in Frozens) + if (Frozen.IsRelative ? Path.IndexOf(Frozen.Path, 1) == -1 : Path.StartsWith(Frozen.Path)) + return Frozen; + return null; + } + private static bool CanProcess(string Name, FrozenAttrTag Frozen) + { + return Frozen == null ? true : !Frozen.Attributes.Contains(Name); + } } } diff --git a/WebsitePanel/Database/wix_install_db.sql b/WebsitePanel/Database/wix_install_db.sql index a058e413..01122d13 100644 --- a/WebsitePanel/Database/wix_install_db.sql +++ b/WebsitePanel/Database/wix_install_db.sql @@ -44364,7 +44364,7 @@ Hello #user.FirstName#,

-Please, find below details of your control panel account. +Please, find below details of your control panel account. The one time password was generated for you. You should change the password after login.

Control Panel URL

@@ -44373,7 +44373,7 @@ Please, find below details of your control panel account. Control Panel URL Username - Password + One Time Password @@ -44411,11 +44411,11 @@ INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [Property Hello #user.FirstName#, -Please, find below details of your control panel account. +Please, find below details of your control panel account. The one time password was generated for you. You should change the password after login. Control Panel URL: http://panel.AcmeHosting.com Username: #user.Username# -Password: #user.Password# +One Time Password: #user.Password# If you have any questions regarding your hosting account, feel free to contact our support department at any time. diff --git a/WebsitePanel/Database/wix_update_db.sql b/WebsitePanel/Database/wix_update_db.sql index 4131b41b..deb9d711 100644 --- a/WebsitePanel/Database/wix_update_db.sql +++ b/WebsitePanel/Database/wix_update_db.sql @@ -73,7 +73,7 @@ GO -ALTER PROCEDURE [dbo].[AddExchangeMailboxPlan] +ALTER PROCEDURE [dbo].[AddExchangeMailboxPlan] ( @MailboxPlanId int OUTPUT, @ItemID int, @@ -181,7 +181,7 @@ GO -ALTER PROCEDURE [dbo].[UpdateExchangeMailboxPlan] +ALTER PROCEDURE [dbo].[UpdateExchangeMailboxPlan] ( @MailboxPlanId int, @MailboxPlan nvarchar(300), @@ -229,19 +229,19 @@ UPDATE ExchangeMailboxPlans SET MailboxPlanType = @MailboxPlanType, AllowLitigationHold = @AllowLitigationHold, RecoverableItemsWarningPct = @RecoverableItemsWarningPct, - RecoverableItemsSpace = @RecoverableItemsSpace, + RecoverableItemsSpace = @RecoverableItemsSpace, LitigationHoldUrl = @LitigationHoldUrl, LitigationHoldMsg = @LitigationHoldMsg WHERE MailboxPlanId = @MailboxPlanId RETURN - + GO -ALTER PROCEDURE [dbo].[GetExchangeMailboxPlan] +ALTER PROCEDURE [dbo].[GetExchangeMailboxPlan] ( @MailboxPlanId int ) @@ -281,7 +281,7 @@ GO -ALTER PROCEDURE [dbo].[GetExchangeOrganizationStatistics] +ALTER PROCEDURE [dbo].[GetExchangeOrganizationStatistics] ( @ItemID int ) @@ -296,7 +296,7 @@ SELECT (SELECT COUNT(*) FROM ExchangeAccounts WHERE AccountType = 4 AND ItemID = @ItemID) AS CreatedPublicFolders, (SELECT COUNT(*) FROM ExchangeOrganizationDomains WHERE ItemID = @ItemID) AS CreatedDomains, (SELECT MIN(B.MailboxSizeMB) FROM ExchangeAccounts AS A INNER JOIN ExchangeMailboxPlans AS B ON A.MailboxPlanId = B.MailboxPlanId WHERE A.ItemID=@ItemID) AS UsedDiskSpace, - (SELECT MIN(B.RecoverableItemsSpace) FROM ExchangeAccounts AS A INNER JOIN ExchangeMailboxPlans AS B ON A.MailboxPlanId = B.MailboxPlanId WHERE A.ItemID=@ItemID) AS UsedLitigationHoldSpace + (SELECT MIN(B.RecoverableItemsSpace) FROM ExchangeAccounts AS A INNER JOIN ExchangeMailboxPlans AS B ON A.MailboxPlanId = B.MailboxPlanId WHERE A.ItemID=@ItemID) AS UsedLitigationHoldSpace END ELSE BEGIN @@ -307,7 +307,7 @@ SELECT (SELECT COUNT(*) FROM ExchangeAccounts WHERE AccountType = 4 AND ItemID = @ItemID) AS CreatedPublicFolders, (SELECT COUNT(*) FROM ExchangeOrganizationDomains WHERE ItemID = @ItemID) AS CreatedDomains, (SELECT SUM(B.MailboxSizeMB) FROM ExchangeAccounts AS A INNER JOIN ExchangeMailboxPlans AS B ON A.MailboxPlanId = B.MailboxPlanId WHERE A.ItemID=@ItemID) AS UsedDiskSpace, - (SELECT SUM(B.RecoverableItemsSpace) FROM ExchangeAccounts AS A INNER JOIN ExchangeMailboxPlans AS B ON A.MailboxPlanId = B.MailboxPlanId WHERE A.ItemID=@ItemID) AS UsedLitigationHoldSpace + (SELECT SUM(B.RecoverableItemsSpace) FROM ExchangeAccounts AS A INNER JOIN ExchangeMailboxPlans AS B ON A.MailboxPlanId = B.MailboxPlanId WHERE A.ItemID=@ItemID) AS UsedLitigationHoldSpace END @@ -384,7 +384,7 @@ EXEC sp_xml_preparedocument @idoc OUTPUT, @xml -- Execute a SELECT statement that uses the OPENXML rowset provider. DELETE FROM ServiceProperties -WHERE ServiceID = @ServiceID +WHERE ServiceID = @ServiceID AND PropertyName COLLATE Latin1_General_CI_AS IN ( SELECT PropertyName @@ -402,7 +402,7 @@ SELECT @ServiceID, PropertyName, PropertyValue -FROM OPENXML(@idoc, '/properties/property',1) WITH +FROM OPENXML(@idoc, '/properties/property',1) WITH ( PropertyName nvarchar(50) '@name', PropertyValue nvarchar(1000) '@value' @@ -412,7 +412,7 @@ FROM OPENXML(@idoc, '/properties/property',1) WITH exec sp_xml_removedocument @idoc COMMIT TRAN -RETURN +RETURN GO IF NOT EXISTS (SELECT * FROM [dbo].[Providers] WHERE [DisplayName] = 'Hosted MS CRM 2011') @@ -462,8 +462,8 @@ END GO -------------------------------- Scheduler Service------------------------------------------------------ -IF EXISTS( SELECT * FROM INFORMATION_SCHEMA.COLUMNS - WHERE TABLE_NAME = 'Schedule' +IF EXISTS( SELECT * FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_NAME = 'Schedule' AND COLUMN_NAME = 'LastFinish') ALTER TABLE Schedule DROP COLUMN LastFinish @@ -583,7 +583,7 @@ SELECT FROM Schedule AS S INNER JOIN PackagesTree(@PackageID, @Recursive) AS PT ON S.PackageID = PT.PackageID ORDER BY S.Enabled DESC, S.NextRun - + -- select schedules SELECT @@ -653,9 +653,17 @@ RAISERROR('You are not allowed to access this package', 16, 1) DECLARE @condition nvarchar(400) SET @condition = ' 1 = 1 ' -IF @FilterColumn <> '' AND @FilterColumn IS NOT NULL -AND @FilterValue <> '' AND @FilterValue IS NOT NULL -SET @condition = @condition + ' AND ' + @FilterColumn + ' LIKE ''' + @FilterValue + '''' +IF @FilterValue <> '' AND @FilterValue IS NOT NULL +BEGIN + IF @FilterColumn <> '' AND @FilterColumn IS NOT NULL + SET @condition = @condition + ' AND ' + @FilterColumn + ' LIKE ''' + @FilterValue + '''' + ELSE + SET @condition = @condition + ' + AND (ScheduleName LIKE ''' + @FilterValue + ''' + OR Username LIKE ''' + @FilterValue + ''' + OR FullName LIKE ''' + @FilterValue + ''' + OR Email LIKE ''' + @FilterValue + ''')' +END IF @SortColumn IS NULL OR @SortColumn = '' SET @SortColumn = 'S.ScheduleName ASC' @@ -711,7 +719,7 @@ SELECT -- packages P.PackageID, P.PackageName, - + -- user P.UserID, U.Username, @@ -783,7 +791,7 @@ SET WeekMonthDay = @WeekMonthDay WHERE ScheduleID = @ScheduleID - + DECLARE @idoc int --Create an internal representation of the XML document. EXEC sp_xml_preparedocument @idoc OUTPUT, @XmlParameters @@ -802,7 +810,7 @@ SELECT @ScheduleID, ParameterID, ParameterValue -FROM OPENXML(@idoc, '/parameters/parameter',1) WITH +FROM OPENXML(@idoc, '/parameters/parameter',1) WITH ( ParameterID nvarchar(50) '@id', ParameterValue nvarchar(3000) '@value' @@ -1008,7 +1016,7 @@ SELECT TOP 1 FROM BackgroundTasks AS T INNER JOIN BackgroundTaskStack AS TS ON TS.TaskId = T.ID -WHERE T.TaskID = @TaskID +WHERE T.TaskID = @TaskID GO IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTasks') @@ -1031,7 +1039,7 @@ AS inner join Users C on P.id = C.OwnerID ) -SELECT +SELECT T.ID, T.Guid, T.TaskID, @@ -1381,7 +1389,7 @@ DROP PROCEDURE GetProcessBackgroundTasks GO CREATE PROCEDURE [dbo].[GetProcessBackgroundTasks] -( +( @Status INT ) AS @@ -1507,7 +1515,7 @@ SELECT FROM ExchangeDisclaimers WHERE - ItemID = @ItemID + ItemID = @ItemID ORDER BY DisclaimerName RETURN' END @@ -1533,7 +1541,7 @@ GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE type_desc = N'SQL_STORED_PROCEDURE' AND name = N'UpdateExchangeDisclaimer') BEGIN -EXEC sp_executesql N' CREATE PROCEDURE [dbo].[UpdateExchangeDisclaimer] +EXEC sp_executesql N' CREATE PROCEDURE [dbo].[UpdateExchangeDisclaimer] ( @ExchangeDisclaimerId int, @DisclaimerName nvarchar(300), @@ -1555,7 +1563,7 @@ GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE type_desc = N'SQL_STORED_PROCEDURE' AND name = N'AddExchangeDisclaimer') BEGIN -EXEC sp_executesql N'CREATE PROCEDURE [dbo].[AddExchangeDisclaimer] +EXEC sp_executesql N'CREATE PROCEDURE [dbo].[AddExchangeDisclaimer] ( @ExchangeDisclaimerId int OUTPUT, @ItemID int, @@ -1588,7 +1596,7 @@ GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE type_desc = N'SQL_STORED_PROCEDURE' AND name = N'GetExchangeDisclaimer') BEGIN -EXEC sp_executesql N'CREATE PROCEDURE [dbo].[GetExchangeDisclaimer] +EXEC sp_executesql N'CREATE PROCEDURE [dbo].[GetExchangeDisclaimer] ( @ExchangeDisclaimerId int ) @@ -1621,7 +1629,7 @@ Go IF NOT EXISTS (SELECT * FROM sys.objects WHERE type_desc = N'SQL_STORED_PROCEDURE' AND name = N'SetExchangeAccountDisclaimerId') BEGIN -EXEC sp_executesql N' CREATE PROCEDURE [dbo].[SetExchangeAccountDisclaimerId] +EXEC sp_executesql N' CREATE PROCEDURE [dbo].[SetExchangeAccountDisclaimerId] ( @AccountID int, @ExchangeDisclaimerId int @@ -1637,7 +1645,7 @@ GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE type_desc = N'SQL_STORED_PROCEDURE' AND name = N'GetExchangeAccountDisclaimerId') BEGIN -EXEC sp_executesql N'CREATE PROCEDURE [dbo].[GetExchangeAccountDisclaimerId] +EXEC sp_executesql N'CREATE PROCEDURE [dbo].[GetExchangeAccountDisclaimerId] ( @AccountID int ) @@ -1653,10 +1661,10 @@ END GO --- add Disclaimers Quota +-- add Disclaimers Quota IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE ([QuotaName] = N'Exchange2007.DisclaimersAllowed')) BEGIN -INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) VALUES (422, 12, 26, N'Exchange2007.DisclaimersAllowed', N'Disclaimers Allowed', 1, 0, NULL, NULL) +INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) VALUES (422, 12, 26, N'Exchange2007.DisclaimersAllowed', N'Disclaimers Allowed', 1, 0, NULL, NULL) END GO @@ -1665,13 +1673,13 @@ GO --BEGIN --INSERT [dbo].[Quotas] ([QuotaID], [GroupID],[QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) VALUES (423, 13, 5, N'HostedSolution.SecurityGroupManagement', N'Allow Security Group Management', 1, 0, NULL, NULL) --END ---GO +--GO -- Lync Enterprise Voice IF NOT EXISTS(select 1 from sys.columns COLS INNER JOIN sys.objects OBJS ON OBJS.object_id=COLS.object_id and OBJS.type='U' AND OBJS.name='LyncUserPlans' AND COLS.name='TelephonyVoicePolicy') BEGIN -ALTER TABLE [dbo].[LyncUserPlans] ADD +ALTER TABLE [dbo].[LyncUserPlans] ADD [RemoteUserAccess] [bit] NOT NULL DEFAULT 0, [PublicIMConnectivity] [bit] NOT NULL DEFAULT 0, @@ -1690,7 +1698,7 @@ ALTER TABLE [dbo].[LyncUserPlans] ADD END Go --- +-- DROP PROCEDURE GetLyncUserPlan; @@ -1722,7 +1730,7 @@ GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE type_desc = N'SQL_STORED_PROCEDURE' AND name = N'UpdateLyncUserPlan') BEGIN -EXEC sp_executesql N' CREATE PROCEDURE [dbo].[UpdateLyncUserPlan] +EXEC sp_executesql N' CREATE PROCEDURE [dbo].[UpdateLyncUserPlan] ( @LyncUserPlanId int, @LyncUserPlanName nvarchar(300), @@ -1744,9 +1752,9 @@ EXEC sp_executesql N' CREATE PROCEDURE [dbo].[UpdateLyncUserPlan] @Telephony int, @ServerURI nvarchar(300), - + @ArchivePolicy nvarchar(300), - + @TelephonyDialPlanPolicy nvarchar(300), @TelephonyVoicePolicy nvarchar(300) ) @@ -1772,7 +1780,7 @@ UPDATE LyncUserPlans SET Telephony = @Telephony, ServerURI = @ServerURI, - + ArchivePolicy = @ArchivePolicy, TelephonyDialPlanPolicy = @TelephonyDialPlanPolicy, TelephonyVoicePolicy = @TelephonyVoicePolicy @@ -1788,7 +1796,7 @@ GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE type_desc = N'SQL_STORED_PROCEDURE' AND name = N'AddLyncUserPlan') BEGIN -EXEC sp_executesql N'CREATE PROCEDURE [dbo].[AddLyncUserPlan] +EXEC sp_executesql N'CREATE PROCEDURE [dbo].[AddLyncUserPlan] ( @LyncUserPlanId int OUTPUT, @ItemID int, @@ -1811,7 +1819,7 @@ EXEC sp_executesql N'CREATE PROCEDURE [dbo].[AddLyncUserPlan] @Telephony int, @ServerURI nvarchar(300), - + @ArchivePolicy nvarchar(300), @TelephonyDialPlanPolicy nvarchar(300), @TelephonyVoicePolicy nvarchar(300) @@ -1856,7 +1864,7 @@ INSERT INTO LyncUserPlans Telephony, ServerURI, - + ArchivePolicy, TelephonyDialPlanPolicy, TelephonyVoicePolicy @@ -1884,7 +1892,7 @@ VALUES @Telephony, @ServerURI, - + @ArchivePolicy, @TelephonyDialPlanPolicy, @TelephonyVoicePolicy @@ -1893,7 +1901,7 @@ VALUES SET @LyncUserPlanId = SCOPE_IDENTITY() -RETURN' +RETURN' END GO @@ -1902,7 +1910,7 @@ GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE type_desc = N'SQL_STORED_PROCEDURE' AND name = N'GetLyncUserPlan') BEGIN -EXEC sp_executesql N'CREATE PROCEDURE [dbo].[GetLyncUserPlan] +EXEC sp_executesql N'CREATE PROCEDURE [dbo].[GetLyncUserPlan] ( @LyncUserPlanId int ) @@ -1929,7 +1937,7 @@ SELECT Telephony, ServerURI, - + ArchivePolicy, TelephonyDialPlanPolicy, TelephonyVoicePolicy @@ -1946,7 +1954,7 @@ GO -ALTER PROCEDURE [dbo].[GetLyncUserPlan] +ALTER PROCEDURE [dbo].[GetLyncUserPlan] ( @LyncUserPlanId int ) @@ -1973,7 +1981,7 @@ SELECT Telephony, ServerURI, - + ArchivePolicy, TelephonyDialPlanPolicy, TelephonyVoicePolicy @@ -2068,13 +2076,13 @@ AS INNER JOIN PackagesTreeCache AS PT ON PIP.PackageID = PT.PackageID WHERE PT.ParentPackageID = @PackageID AND IP.PoolID = 3) ELSE IF @QuotaID = 319 -- BB Users - SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea + SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea INNER JOIN BlackBerryUsers bu ON ea.AccountID = bu.AccountID INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID WHERE pt.ParentPackageID = @PackageID) ELSE IF @QuotaID = 320 -- OCS Users - SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea + SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea INNER JOIN OCSUsers ocs ON ea.AccountID = ocs.AccountID INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID @@ -2088,12 +2096,12 @@ AS SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts AS ea INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID - WHERE pt.ParentPackageID = @PackageID + WHERE pt.ParentPackageID = @PackageID AND ea.AccountType IN (1) AND ea.MailboxPlanId IS NOT NULL) ELSE IF @QuotaID = 77 -- Exchange2007.DiskSpace - SET @Result = (SELECT SUM(B.MailboxSizeMB) FROM ExchangeAccounts AS ea - INNER JOIN ExchangeMailboxPlans AS B ON ea.MailboxPlanId = B.MailboxPlanId + SET @Result = (SELECT SUM(B.MailboxSizeMB) FROM ExchangeAccounts AS ea + INNER JOIN ExchangeMailboxPlans AS B ON ea.MailboxPlanId = B.MailboxPlanId INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID WHERE pt.ParentPackageID = @PackageID) @@ -2255,11 +2263,11 @@ IF @FilterColumn <> '' AND @FilterColumn IS NOT NULL AND @FilterValue <> '' AND @FilterValue IS NOT NULL BEGIN IF @FilterColumn = 'PrimaryEmailAddress' AND @AccountTypes <> '2' - BEGIN + BEGIN SET @condition = @condition + ' AND EA.AccountID IN (SELECT EAEA.AccountID FROM ExchangeAccountEmailAddresses EAEA WHERE EAEA.EmailAddress LIKE ''' + @FilterValue + ''')' END ELSE - BEGIN + BEGIN SET @condition = @condition + ' AND ' + @FilterColumn + ' LIKE ''' + @FilterValue + '''' END END @@ -2278,7 +2286,7 @@ SELECT EA.PrimaryEmailAddress, EA.MailEnabledPublicFolder, EA.MailboxPlanId, - P.MailboxPlan, + P.MailboxPlan, EA.SubscriberNumber, EA.UserPrincipalName FROM @@ -2418,7 +2426,7 @@ GO IF NOT EXISTS (SELECT * FROM [dbo].[Providers] WHERE [DisplayName] = 'Remote Desktop Services Windows 2012') BEGIN -INSERT [dbo].[Providers] ([ProviderId], [GroupId], [ProviderName], [DisplayName], [ProviderType], [EditorControl], [DisableAutoDiscovery]) +INSERT [dbo].[Providers] ([ProviderId], [GroupId], [ProviderName], [DisplayName], [ProviderType], [EditorControl], [DisableAutoDiscovery]) VALUES(1501, 45, N'RemoteDesktopServices2012', N'Remote Desktop Services Windows 2012', N'WebsitePanel.Providers.RemoteDesktopServices.Windows2012,WebsitePanel.Providers.RemoteDesktopServices.Windows2012', N'RDS', 1) END GO @@ -2450,7 +2458,7 @@ BEGIN -- delete DELETE FROM PackageIPAddresses FROM PackageIPAddresses AS PIP - INNER JOIN OPENXML(@idoc, '/items/item', 1) WITH + INNER JOIN OPENXML(@idoc, '/items/item', 1) WITH ( AddressID int '@id' ) as PV ON PIP.AddressID = PV.AddressID @@ -2458,17 +2466,17 @@ BEGIN -- insert INSERT INTO dbo.PackageIPAddresses - ( + ( PackageID, OrgID, - AddressID + AddressID ) - SELECT + SELECT @PackageID, @OrgID, AddressID - FROM OPENXML(@idoc, '/items/item', 1) WITH + FROM OPENXML(@idoc, '/items/item', 1) WITH ( AddressID int '@id' ) as PV @@ -2504,9 +2512,18 @@ AND (@PoolID = 0 OR @PoolID <> 0 AND IP.PoolID = @PoolID) AND (@OrgID = 0 OR @OrgID <> 0 AND PA.OrgID = @OrgID) ' -IF @FilterColumn <> '' AND @FilterColumn IS NOT NULL -AND @FilterValue <> '' AND @FilterValue IS NOT NULL -SET @condition = @condition + ' AND ' + @FilterColumn + ' LIKE ''' + @FilterValue + '''' +IF @FilterValue <> '' AND @FilterValue IS NOT NULL +BEGIN + IF @FilterColumn <> '' AND @FilterColumn IS NOT NULL + SET @condition = @condition + ' AND ' + @FilterColumn + ' LIKE ''' + @FilterValue + '''' + ELSE + SET @condition = @condition + ' + AND (ExternalIP LIKE ''' + @FilterValue + ''' + OR InternalIP LIKE ''' + @FilterValue + ''' + OR DefaultGateway LIKE ''' + @FilterValue + ''' + OR ItemName LIKE ''' + @FilterValue + ''' + OR Username LIKE ''' + @FilterValue + ''')' +END IF @SortColumn IS NULL OR @SortColumn = '' SET @SortColumn = 'IP.ExternalIP ASC' @@ -2650,13 +2667,13 @@ GO BEGIN UPDATE [dbo].[CRMUsers] - SET - CALType = 0 WHERE CALType IS NULL + SET + CALType = 0 WHERE CALType IS NULL END GO -ALTER PROCEDURE [dbo].[InsertCRMUser] +ALTER PROCEDURE [dbo].[InsertCRMUser] ( @ItemID int, @CrmUserID uniqueidentifier, @@ -2675,14 +2692,14 @@ INSERT INTO BusinessUnitID, CALType ) -VALUES +VALUES ( - @ItemID, + @ItemID, @CrmUserID, @BusinessUnitID, @CALType ) - + END GO @@ -2701,15 +2718,15 @@ BEGIN UPDATE [dbo].[CRMUsers] - SET + SET CALType = @CALType WHERE AccountID = @ItemID - + END GO -ALTER PROCEDURE [dbo].[GetCRMUsersCount] +ALTER PROCEDURE [dbo].[GetCRMUsersCount] ( @ItemID int, @Name nvarchar(400), @@ -2729,15 +2746,15 @@ BEGIN SET @Email = '%' END -SELECT - COUNT(ea.AccountID) -FROM - ExchangeAccounts ea -INNER JOIN - CRMUsers cu -ON +SELECT + COUNT(ea.AccountID) +FROM + ExchangeAccounts ea +INNER JOIN + CRMUsers cu +ON ea.AccountID = cu.AccountID -WHERE +WHERE ea.ItemID = @ItemID AND ea.DisplayName LIKE @Name AND ea.PrimaryEmailAddress LIKE @Email AND ((cu.CALType = @CALType) OR (@CALType = -1)) END @@ -2783,17 +2800,17 @@ CREATE PROCEDURE [dbo].[GetPackageIPAddressesCount] AS BEGIN -SELECT +SELECT COUNT(PA.PackageAddressID) -FROM +FROM dbo.PackageIPAddresses PA -INNER JOIN +INNER JOIN dbo.IPAddresses AS IP ON PA.AddressID = IP.AddressID -INNER JOIN +INNER JOIN dbo.Packages P ON PA.PackageID = P.PackageID -INNER JOIN +INNER JOIN dbo.Users U ON U.UserID = P.UserID -LEFT JOIN +LEFT JOIN ServiceItems SI ON PA.ItemId = SI.ItemID WHERE (@PoolID = 0 OR @PoolID <> 0 AND IP.PoolID = @PoolID) @@ -2901,13 +2918,13 @@ AS INNER JOIN PackagesTreeCache AS PT ON PIP.PackageID = PT.PackageID WHERE PT.ParentPackageID = @PackageID AND IP.PoolID = 3) ELSE IF @QuotaID = 319 -- BB Users - SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea + SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea INNER JOIN BlackBerryUsers bu ON ea.AccountID = bu.AccountID INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID WHERE pt.ParentPackageID = @PackageID) ELSE IF @QuotaID = 320 -- OCS Users - SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea + SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea INNER JOIN OCSUsers ocs ON ea.AccountID = ocs.AccountID INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID @@ -2921,12 +2938,12 @@ AS SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts AS ea INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID - WHERE pt.ParentPackageID = @PackageID + WHERE pt.ParentPackageID = @PackageID AND ea.AccountType IN (1) AND ea.MailboxPlanId IS NOT NULL) ELSE IF @QuotaID = 77 -- Exchange2007.DiskSpace - SET @Result = (SELECT SUM(B.MailboxSizeMB) FROM ExchangeAccounts AS ea - INNER JOIN ExchangeMailboxPlans AS B ON ea.MailboxPlanId = B.MailboxPlanId + SET @Result = (SELECT SUM(B.MailboxSizeMB) FROM ExchangeAccounts AS ea + INNER JOIN ExchangeMailboxPlans AS B ON ea.MailboxPlanId = B.MailboxPlanId INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID WHERE pt.ParentPackageID = @PackageID) @@ -3213,17 +3230,17 @@ GO IF EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'HostedSolution.SecurityGroupManagement' AND [QuotaID] = 423) BEGIN - UPDATE [dbo].[Quotas] - SET [QuotaDescription] = N'Security Groups', + UPDATE [dbo].[Quotas] + SET [QuotaDescription] = N'Security Groups', [QuotaName] = N'HostedSolution.SecurityGroups', [QuotaTypeID] = 2 WHERE [QuotaID] = 423 - UPDATE [dbo].[HostingPlanQuotas] + UPDATE [dbo].[HostingPlanQuotas] SET [QuotaValue] = -1 WHERE [QuotaID] = 423 - UPDATE [dbo].[PackageQuotas] + UPDATE [dbo].[PackageQuotas] SET [QuotaValue] = -1 WHERE [QuotaID] = 423 END @@ -3231,7 +3248,7 @@ ELSE BEGIN --add Security Groups Quota IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'HostedSolution.SecurityGroups') - INSERT [dbo].[Quotas] ([QuotaID], [GroupID],[QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) VALUES (423, 13, 5, N'HostedSolution.SecurityGroups', N'Security Groups', 2, 0, NULL, NULL) + INSERT [dbo].[Quotas] ([QuotaID], [GroupID],[QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) VALUES (423, 13, 5, N'HostedSolution.SecurityGroups', N'Security Groups', 2, 0, NULL, NULL) END GO @@ -3326,13 +3343,13 @@ AS INNER JOIN PackagesTreeCache AS PT ON PIP.PackageID = PT.PackageID WHERE PT.ParentPackageID = @PackageID AND IP.PoolID = 3) ELSE IF @QuotaID = 319 -- BB Users - SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea + SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea INNER JOIN BlackBerryUsers bu ON ea.AccountID = bu.AccountID INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID WHERE pt.ParentPackageID = @PackageID) ELSE IF @QuotaID = 320 -- OCS Users - SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea + SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea INNER JOIN OCSUsers ocs ON ea.AccountID = ocs.AccountID INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID @@ -3346,12 +3363,12 @@ AS SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts AS ea INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID - WHERE pt.ParentPackageID = @PackageID + WHERE pt.ParentPackageID = @PackageID AND ea.AccountType IN (1) AND ea.MailboxPlanId IS NOT NULL) ELSE IF @QuotaID = 77 -- Exchange2007.DiskSpace - SET @Result = (SELECT SUM(B.MailboxSizeMB) FROM ExchangeAccounts AS ea - INNER JOIN ExchangeMailboxPlans AS B ON ea.MailboxPlanId = B.MailboxPlanId + SET @Result = (SELECT SUM(B.MailboxSizeMB) FROM ExchangeAccounts AS ea + INNER JOIN ExchangeMailboxPlans AS B ON ea.MailboxPlanId = B.MailboxPlanId INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID WHERE pt.ParentPackageID = @PackageID) @@ -3414,7 +3431,7 @@ GO IF NOT EXISTS (SELECT * FROM [dbo].[Providers] WHERE [DisplayName] = 'Hosted MS CRM 2013') BEGIN -INSERT [dbo].[Providers] ([ProviderId], [GroupId], [ProviderName], [DisplayName], [ProviderType], [EditorControl], [DisableAutoDiscovery]) +INSERT [dbo].[Providers] ([ProviderId], [GroupId], [ProviderName], [DisplayName], [ProviderType], [EditorControl], [DisableAutoDiscovery]) VALUES(1202, 24, N'CRM', N'Hosted MS CRM 2013', N'WebsitePanel.Providers.HostedSolution.CRMProvider2013, WebsitePanel.Providers.HostedSolution.Crm2013', N'CRM2011', NULL) END GO @@ -3423,35 +3440,35 @@ GO IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'HostedCRM2013.Organization') BEGIN -INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) +INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) VALUES (463, 24, 1, N'HostedCRM2013.Organization', N'CRM Organization', 1, 0, NULL, NULL) END GO IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'HostedCRM2013.MaxDatabaseSize') BEGIN -INSERT [dbo].[Quotas] ([QuotaID], [GroupID],[QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) +INSERT [dbo].[Quotas] ([QuotaID], [GroupID],[QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (464, 24, 5, N'HostedCRM2013.MaxDatabaseSize', N'Max Database Size, MB',3, 0 , NULL) END GO IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'HostedCRM2013.EssentialUsers') BEGIN -INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) +INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) VALUES (465, 24, 2, N'HostedCRM2013.EssentialUsers', N'Essential licenses per organization', 3, 0, NULL, NULL) END GO IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'HostedCRM2013.BasicUsers') BEGIN -INSERT [dbo].[Quotas] ([QuotaID], [GroupID],[QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) +INSERT [dbo].[Quotas] ([QuotaID], [GroupID],[QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (466, 24, 3, N'HostedCRM2013.BasicUsers', N'Basic licenses per organization',3, 0 , NULL) END GO IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'HostedCRM2013.ProfessionalUsers') BEGIN -INSERT [dbo].[Quotas] ([QuotaID], [GroupID],[QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) +INSERT [dbo].[Quotas] ([QuotaID], [GroupID],[QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (467, 24, 4, N'HostedCRM2013.ProfessionalUsers', N'Professional licenses per organization',3, 0 , NULL) END GO @@ -3479,14 +3496,14 @@ GO IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'Exchange2013.ArchivingStorage') BEGIN -INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) +INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) VALUES (425, 12, 29, N'Exchange2013.ArchivingStorage', N'Archiving storage, MB', 2, 0, NULL, NULL) END GO IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'Exchange2013.ArchivingMailboxes') BEGIN -INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) +INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) VALUES (426, 12, 28, N'Exchange2013.ArchivingMailboxes', N'Archiving Mailboxes per Organization', 2, 0, NULL, NULL) END GO @@ -3523,7 +3540,7 @@ END GO -ALTER PROCEDURE [dbo].[AddExchangeMailboxPlan] +ALTER PROCEDURE [dbo].[AddExchangeMailboxPlan] ( @MailboxPlanId int OUTPUT, @ItemID int, @@ -3635,7 +3652,7 @@ RETURN GO -ALTER PROCEDURE [dbo].[UpdateExchangeMailboxPlan] +ALTER PROCEDURE [dbo].[UpdateExchangeMailboxPlan] ( @MailboxPlanId int, @MailboxPlan nvarchar(300), @@ -3687,7 +3704,7 @@ UPDATE ExchangeMailboxPlans SET MailboxPlanType = @MailboxPlanType, AllowLitigationHold = @AllowLitigationHold, RecoverableItemsWarningPct = @RecoverableItemsWarningPct, - RecoverableItemsSpace = @RecoverableItemsSpace, + RecoverableItemsSpace = @RecoverableItemsSpace, LitigationHoldUrl = @LitigationHoldUrl, LitigationHoldMsg = @LitigationHoldMsg, Archiving = @Archiving, @@ -3697,7 +3714,7 @@ UPDATE ExchangeMailboxPlans SET WHERE MailboxPlanId = @MailboxPlanId RETURN - + GO @@ -3735,7 +3752,7 @@ SELECT FROM ExchangeMailboxPlans WHERE - ItemID = @ItemID + ItemID = @ItemID AND ((Archiving=@Archiving) OR ((@Archiving=0) AND (Archiving IS NULL))) ORDER BY MailboxPlan RETURN @@ -3743,7 +3760,7 @@ RETURN GO -ALTER PROCEDURE [dbo].[GetExchangeMailboxPlan] +ALTER PROCEDURE [dbo].[GetExchangeMailboxPlan] ( @MailboxPlanId int ) @@ -3802,7 +3819,7 @@ END GO -- Password column removed -ALTER PROCEDURE [dbo].[GetExchangeAccount] +ALTER PROCEDURE [dbo].[GetExchangeAccount] ( @ItemID int, @AccountID int @@ -3822,12 +3839,12 @@ SELECT P.MailboxPlan, E.SubscriberNumber, E.UserPrincipalName, - E.ArchivingMailboxPlanId, + E.ArchivingMailboxPlanId, AP.MailboxPlan as 'ArchivingMailboxPlan', E.EnableArchiving FROM ExchangeAccounts AS E -LEFT OUTER JOIN ExchangeMailboxPlans AS P ON E.MailboxPlanId = P.MailboxPlanId +LEFT OUTER JOIN ExchangeMailboxPlans AS P ON E.MailboxPlanId = P.MailboxPlanId LEFT OUTER JOIN ExchangeMailboxPlans AS AP ON E.ArchivingMailboxPlanId = AP.MailboxPlanId WHERE E.ItemID = @ItemID AND @@ -3837,7 +3854,7 @@ GO -- Password column removed -ALTER PROCEDURE [dbo].[GetExchangeAccountByAccountName] +ALTER PROCEDURE [dbo].[GetExchangeAccountByAccountName] ( @ItemID int, @AccountName nvarchar(300) @@ -3857,12 +3874,12 @@ SELECT P.MailboxPlan, E.SubscriberNumber, E.UserPrincipalName, - E.ArchivingMailboxPlanId, + E.ArchivingMailboxPlanId, AP.MailboxPlan as 'ArchivingMailboxPlan', E.EnableArchiving FROM ExchangeAccounts AS E -LEFT OUTER JOIN ExchangeMailboxPlans AS P ON E.MailboxPlanId = P.MailboxPlanId +LEFT OUTER JOIN ExchangeMailboxPlans AS P ON E.MailboxPlanId = P.MailboxPlanId LEFT OUTER JOIN ExchangeMailboxPlans AS AP ON E.ArchivingMailboxPlanId = AP.MailboxPlanId WHERE E.ItemID = @ItemID AND @@ -3875,7 +3892,7 @@ GO -- Password column removed -ALTER PROCEDURE [dbo].[GetExchangeAccountByMailboxPlanId] +ALTER PROCEDURE [dbo].[GetExchangeAccountByMailboxPlanId] ( @ItemID int, @MailboxPlanId int @@ -3898,17 +3915,17 @@ SELECT P.MailboxPlan, E.SubscriberNumber, E.UserPrincipalName, - E.ArchivingMailboxPlanId, + E.ArchivingMailboxPlanId, AP.MailboxPlan as 'ArchivingMailboxPlan', E.EnableArchiving FROM ExchangeAccounts AS E -LEFT OUTER JOIN ExchangeMailboxPlans AS P ON E.MailboxPlanId = P.MailboxPlanId +LEFT OUTER JOIN ExchangeMailboxPlans AS P ON E.MailboxPlanId = P.MailboxPlanId LEFT OUTER JOIN ExchangeMailboxPlans AS AP ON E.ArchivingMailboxPlanId = AP.MailboxPlanId WHERE E.ItemID = @ItemID AND E.MailboxPlanId IS NULL AND - E.AccountType IN (1,5) + E.AccountType IN (1,5) RETURN END @@ -3929,16 +3946,16 @@ SELECT P.MailboxPlan, E.SubscriberNumber, E.UserPrincipalName, - E.ArchivingMailboxPlanId, + E.ArchivingMailboxPlanId, AP.MailboxPlan as 'ArchivingMailboxPlan', E.EnableArchiving FROM ExchangeAccounts AS E -LEFT OUTER JOIN ExchangeMailboxPlans AS P ON E.MailboxPlanId = P.MailboxPlanId +LEFT OUTER JOIN ExchangeMailboxPlans AS P ON E.MailboxPlanId = P.MailboxPlanId LEFT OUTER JOIN ExchangeMailboxPlans AS AP ON E.ArchivingMailboxPlanId = AP.MailboxPlanId WHERE E.MailboxPlanId = @MailboxPlanId AND - E.AccountType IN (1,5) + E.AccountType IN (1,5) END ELSE BEGIN @@ -3956,17 +3973,17 @@ SELECT P.MailboxPlan, E.SubscriberNumber, E.UserPrincipalName, - E.ArchivingMailboxPlanId, + E.ArchivingMailboxPlanId, AP.MailboxPlan as 'ArchivingMailboxPlan', E.EnableArchiving FROM ExchangeAccounts AS E -LEFT OUTER JOIN ExchangeMailboxPlans AS P ON E.MailboxPlanId = P.MailboxPlanId +LEFT OUTER JOIN ExchangeMailboxPlans AS P ON E.MailboxPlanId = P.MailboxPlanId LEFT OUTER JOIN ExchangeMailboxPlans AS AP ON E.ArchivingMailboxPlanId = AP.MailboxPlanId WHERE E.ItemID = @ItemID AND E.MailboxPlanId = @MailboxPlanId AND - E.AccountType IN (1,5) + E.AccountType IN (1,5) RETURN END GO @@ -4007,18 +4024,18 @@ IF @FilterColumn <> '' AND @FilterColumn IS NOT NULL AND @FilterValue <> '' AND @FilterValue IS NOT NULL BEGIN IF @FilterColumn = 'PrimaryEmailAddress' AND @AccountTypes <> '2' - BEGIN + BEGIN SET @condition = @condition + ' AND EA.AccountID IN (SELECT EAEA.AccountID FROM ExchangeAccountEmailAddresses EAEA WHERE EAEA.EmailAddress LIKE ''' + @FilterValue + ''')' END ELSE - BEGIN + BEGIN SET @condition = @condition + ' AND ' + @FilterColumn + ' LIKE ''' + @FilterValue + '''' END END if @Archiving = 1 BEGIN - SET @condition = @condition + ' AND (EA.ArchivingMailboxPlanId > 0) ' + SET @condition = @condition + ' AND (EA.ArchivingMailboxPlanId > 0) ' END IF @SortColumn IS NULL OR @SortColumn = '' @@ -4058,12 +4075,12 @@ print @sql exec sp_executesql @sql, N'@ItemID int, @StartRow int, @MaximumRows int', @ItemID, @StartRow, @MaximumRows -RETURN +RETURN GO -ALTER PROCEDURE [dbo].[SetExchangeAccountMailboxplan] +ALTER PROCEDURE [dbo].[SetExchangeAccountMailboxplan] ( @AccountID int, @MailboxPlanId int, @@ -4084,7 +4101,7 @@ RETURN GO -- Password column removed -ALTER PROCEDURE [dbo].[UpdateExchangeAccount] +ALTER PROCEDURE [dbo].[UpdateExchangeAccount] ( @AccountID int, @AccountName nvarchar(300), @@ -4101,9 +4118,9 @@ ALTER PROCEDURE [dbo].[UpdateExchangeAccount] ) AS -BEGIN TRAN +BEGIN TRAN -IF (@MailboxPlanId = -1) +IF (@MailboxPlanId = -1) BEGIN SET @MailboxPlanId = NULL END @@ -4113,7 +4130,7 @@ UPDATE ExchangeAccounts SET DisplayName = @DisplayName, PrimaryEmailAddress = @PrimaryEmailAddress, MailEnabledPublicFolder = @MailEnabledPublicFolder, - MailboxManagerActions = @MailboxManagerActions, + MailboxManagerActions = @MailboxManagerActions, AccountType =@AccountType, SamAccountName = @SamAccountName, MailboxPlanId = @MailboxPlanId, @@ -4154,7 +4171,7 @@ IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddExchangeRet DROP PROCEDURE [dbo].[AddExchangeRetentionPolicyTag] GO -CREATE PROCEDURE [dbo].[AddExchangeRetentionPolicyTag] +CREATE PROCEDURE [dbo].[AddExchangeRetentionPolicyTag] ( @TagID int OUTPUT, @ItemID int, @@ -4195,7 +4212,7 @@ IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'UpdateExchange DROP PROCEDURE [dbo].[UpdateExchangeRetentionPolicyTag] GO -CREATE PROCEDURE [dbo].[UpdateExchangeRetentionPolicyTag] +CREATE PROCEDURE [dbo].[UpdateExchangeRetentionPolicyTag] ( @TagID int, @ItemID int, @@ -4215,7 +4232,7 @@ UPDATE ExchangeRetentionPolicyTags SET WHERE TagID = @TagID RETURN - + GO @@ -4238,7 +4255,7 @@ SELECT FROM ExchangeRetentionPolicyTags WHERE - ItemID = @ItemID + ItemID = @ItemID ORDER BY TagName RETURN @@ -4249,7 +4266,7 @@ IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetExchangeRet DROP PROCEDURE [dbo].[GetExchangeRetentionPolicyTag] GO -CREATE PROCEDURE [dbo].[GetExchangeRetentionPolicyTag] +CREATE PROCEDURE [dbo].[GetExchangeRetentionPolicyTag] ( @TagID int ) @@ -4317,10 +4334,10 @@ P.MailboxPlan, T.TagName FROM ExchangeMailboxPlanRetentionPolicyTags AS D -LEFT OUTER JOIN ExchangeMailboxPlans AS P ON P.MailboxPlanId = D.MailboxPlanId -LEFT OUTER JOIN ExchangeRetentionPolicyTags AS T ON T.TagID = D.TagID +LEFT OUTER JOIN ExchangeMailboxPlans AS P ON P.MailboxPlanId = D.MailboxPlanId +LEFT OUTER JOIN ExchangeRetentionPolicyTags AS T ON T.TagID = D.TagID WHERE - D.MailboxPlanId = @MailboxPlanId + D.MailboxPlanId = @MailboxPlanId RETURN GO @@ -4329,7 +4346,7 @@ IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddExchangeMai DROP PROCEDURE [dbo].[AddExchangeMailboxPlanRetentionPolicyTag] GO -CREATE PROCEDURE [dbo].[AddExchangeMailboxPlanRetentionPolicyTag] +CREATE PROCEDURE [dbo].[AddExchangeMailboxPlanRetentionPolicyTag] ( @PlanTagID int OUTPUT, @TagID int, @@ -4381,7 +4398,7 @@ GO -- Exchange2013 Archiving -ALTER PROCEDURE [dbo].[GetExchangeOrganizationStatistics] +ALTER PROCEDURE [dbo].[GetExchangeOrganizationStatistics] ( @ItemID int ) @@ -4454,7 +4471,7 @@ UPDATE [dbo].[ServiceItemTypes] SET [Suspendable] = 1 WHERE [ItemTypeID] = 38 AN END GO -/* ICE Warp */ +/* ICE Warp */ IF NOT EXISTS (SELECT * FROM [dbo].[Providers] WHERE [ProviderName] = 'IceWarp') BEGIN INSERT [dbo].[Providers] ([ProviderID], [GroupID], [ProviderName], [DisplayName], [ProviderType], [EditorControl], [DisableAutoDiscovery]) VALUES (160, 4, N'IceWarp', N'IceWarp Mail Server', N'WebsitePanel.Providers.Mail.IceWarp, WebsitePanel.Providers.Mail.IceWarp', N'IceWarp', NULL) @@ -4542,7 +4559,7 @@ AS SELECT * FROM SupportServiceLevels WHERE LevelID = @LevelID -RETURN +RETURN GO IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddSupportServiceLevel') @@ -4582,7 +4599,7 @@ BEGIN IF EXISTS (SELECT * FROM ResourceGroups WHERE GroupName = 'Service Levels') BEGIN - DECLARE @QuotaLastID int, @CurQuotaName nvarchar(100), + DECLARE @QuotaLastID int, @CurQuotaName nvarchar(100), @CurQuotaDescription nvarchar(1000), @QuotaOrderInGroup int SET @CurQuotaName = N'ServiceLevel.' + @LevelName @@ -4598,23 +4615,23 @@ BEGIN IF NOT EXISTS (SELECT * FROM Quotas WHERE QuotaName = @CurQuotaName) BEGIN - INSERT Quotas - (QuotaID, - GroupID, - QuotaOrder, - QuotaName, - QuotaDescription, - QuotaTypeID, - ServiceQuota, - ItemTypeID) - VALUES - (@QuotaLastID + 1, - @ResourseGroupID, - @QuotaOrderInGroup + 1, - @CurQuotaName, + INSERT Quotas + (QuotaID, + GroupID, + QuotaOrder, + QuotaName, + QuotaDescription, + QuotaTypeID, + ServiceQuota, + ItemTypeID) + VALUES + (@QuotaLastID + 1, + @ResourseGroupID, + @QuotaOrderInGroup + 1, + @CurQuotaName, @CurQuotaDescription, - 2, - 0, + 2, + 0, NULL) END END @@ -4659,7 +4676,7 @@ BEGIN END -RETURN +RETURN GO IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'UpdateSupportServiceLevel') @@ -4691,7 +4708,7 @@ BEGIN DECLARE @QuotaID INT SELECT @QuotaID = QuotaID FROM Quotas WHERE QuotaName = @PrevQuotaName - + UPDATE Quotas SET QuotaName = N'ServiceLevel.' + @LevelName, QuotaDescription = @LevelName + ', users' @@ -4700,12 +4717,12 @@ BEGIN END -RETURN +RETURN GO -IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type IN ('FN', 'IF', 'TF') AND name = 'GetPackageServiceLevelResource') +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type IN ('FN', 'IF', 'TF') AND name = 'GetPackageServiceLevelResource') DROP FUNCTION GetPackageServiceLevelResource GO @@ -4782,7 +4799,7 @@ BEGIN ) SET @GroupEnabled = 0 END - + -- check addons IF EXISTS( SELECT HPR.GroupID FROM PackageAddons AS PA @@ -4792,10 +4809,10 @@ BEGIN ) SET @GroupEnabled = 1 END - + IF @GroupEnabled = 0 RETURN 0 - + SET @PID = @ParentPackageID END -- end while @@ -4944,7 +4961,7 @@ SELECT END AS ParentEnabled, ISNULL(HPR.CalculateDiskSpace, 1) AS CalculateDiskSpace, ISNULL(HPR.CalculateBandwidth, 1) AS CalculateBandwidth -FROM ResourceGroups AS RG +FROM ResourceGroups AS RG LEFT OUTER JOIN HostingPlanResources AS HPR ON RG.GroupID = HPR.GroupID AND HPR.PlanID = @PlanID WHERE (RG.ShowGroup = 1) ORDER BY RG.GroupOrder @@ -5016,14 +5033,14 @@ WHERE ' + @condition print @sql -exec sp_executesql @sql, N'@ItemID int, @IncludeMailboxes bit', +exec sp_executesql @sql, N'@ItemID int, @IncludeMailboxes bit', @ItemID, @IncludeMailboxes RETURN GO -- Password column removed -ALTER PROCEDURE [dbo].[GetExchangeAccount] +ALTER PROCEDURE [dbo].[GetExchangeAccount] ( @ItemID int, @AccountID int @@ -5043,14 +5060,14 @@ SELECT P.MailboxPlan, E.SubscriberNumber, E.UserPrincipalName, - E.ArchivingMailboxPlanId, + E.ArchivingMailboxPlanId, AP.MailboxPlan as 'ArchivingMailboxPlan', E.EnableArchiving, E.LevelID, E.IsVIP FROM ExchangeAccounts AS E -LEFT OUTER JOIN ExchangeMailboxPlans AS P ON E.MailboxPlanId = P.MailboxPlanId +LEFT OUTER JOIN ExchangeMailboxPlans AS P ON E.MailboxPlanId = P.MailboxPlanId LEFT OUTER JOIN ExchangeMailboxPlans AS AP ON E.ArchivingMailboxPlanId = AP.MailboxPlanId WHERE E.ItemID = @ItemID AND @@ -5091,18 +5108,18 @@ IF @FilterColumn <> '' AND @FilterColumn IS NOT NULL AND @FilterValue <> '' AND @FilterValue IS NOT NULL BEGIN IF @FilterColumn = 'PrimaryEmailAddress' AND @AccountTypes <> '2' - BEGIN + BEGIN SET @condition = @condition + ' AND EA.AccountID IN (SELECT EAEA.AccountID FROM ExchangeAccountEmailAddresses EAEA WHERE EAEA.EmailAddress LIKE ''' + @FilterValue + ''')' END ELSE - BEGIN + BEGIN SET @condition = @condition + ' AND ' + @FilterColumn + ' LIKE ''' + @FilterValue + '''' END END if @Archiving = 1 BEGIN - SET @condition = @condition + ' AND (EA.ArchivingMailboxPlanId > 0) ' + SET @condition = @condition + ' AND (EA.ArchivingMailboxPlanId > 0) ' END IF @SortColumn IS NULL OR @SortColumn = '' @@ -5159,9 +5176,9 @@ CREATE PROCEDURE [dbo].[UpdateExchangeAccountSLSettings] ) AS -BEGIN TRAN +BEGIN TRAN - IF (@LevelID = -1) + IF (@LevelID = -1) BEGIN SET @LevelID = NULL END @@ -5178,7 +5195,7 @@ BEGIN TRAN RETURN -1 END COMMIT TRAN -RETURN +RETURN GO IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'CheckServiceLevelUsage') @@ -5194,12 +5211,12 @@ SELECT COUNT(EA.AccountID) FROM SupportServiceLevels AS SL INNER JOIN ExchangeAccounts AS EA ON SL.LevelID = EA.LevelID WHERE EA.LevelID = @LevelID -RETURN +RETURN GO --- Service Level Quotas, change type +-- Service Level Quotas, change type UPDATE Quotas -SET QuotaTypeID = 2 +SET QuotaTypeID = 2 WHERE QuotaName like 'ServiceLevel.%' GO @@ -5278,13 +5295,13 @@ AS INNER JOIN PackagesTreeCache AS PT ON PIP.PackageID = PT.PackageID WHERE PT.ParentPackageID = @PackageID AND IP.PoolID = 3) ELSE IF @QuotaID = 319 -- BB Users - SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea + SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea INNER JOIN BlackBerryUsers bu ON ea.AccountID = bu.AccountID INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID WHERE pt.ParentPackageID = @PackageID) ELSE IF @QuotaID = 320 -- OCS Users - SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea + SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea INNER JOIN OCSUsers ocs ON ea.AccountID = ocs.AccountID INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID @@ -5298,12 +5315,12 @@ AS SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts AS ea INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID - WHERE pt.ParentPackageID = @PackageID + WHERE pt.ParentPackageID = @PackageID AND ea.AccountType IN (1) AND ea.MailboxPlanId IS NOT NULL) ELSE IF @QuotaID = 77 -- Exchange2007.DiskSpace - SET @Result = (SELECT SUM(B.MailboxSizeMB) FROM ExchangeAccounts AS ea - INNER JOIN ExchangeMailboxPlans AS B ON ea.MailboxPlanId = B.MailboxPlanId + SET @Result = (SELECT SUM(B.MailboxSizeMB) FROM ExchangeAccounts AS ea + INNER JOIN ExchangeMailboxPlans AS B ON ea.MailboxPlanId = B.MailboxPlanId INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID WHERE pt.ParentPackageID = @PackageID) @@ -5370,14 +5387,14 @@ GO -- IIS80 Provider update for SNI and CCS support -- Add default serviceproperties for all existing IIS80 Services (if any). These properties are used as markers in the IIS70 Controls in WebPortal to know the version of the IIS Provider -declare c cursor read_only for +declare c cursor read_only for select ServiceID from Services where ProviderID in(select ProviderID from Providers where ProviderName='IIS80') declare @ServiceID int open c -fetch next from c +fetch next from c into @ServiceID while @@FETCH_STATUS = 0 @@ -5398,7 +5415,7 @@ begin insert into ServiceProperties(ServiceID, PropertyName, PropertyValue) values(@ServiceID, 'sslusesni', 'False') - fetch next from c + fetch next from c into @ServiceID end @@ -5417,8 +5434,8 @@ IF NOT EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'RDSCollectionUsers') CREATE TABLE RDSCollectionUsers ( ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY, - RDSCollectionId INT NOT NULL, - AccountID INT NOT NULL + RDSCollectionId INT NOT NULL, + AccountID INT NOT NULL ) GO @@ -5479,7 +5496,7 @@ CREATE TABLE [dbo].[RDSCollectionSettings]( [ClientPrinterAsDefault] [bit] NULL, [RDEasyPrintDriverEnabled] [bit] NULL, [MaxRedirectedMonitors] [int] NULL, - CONSTRAINT [PK_RDSCollectionSettings] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_RDSCollectionSettings] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] @@ -5487,21 +5504,21 @@ CREATE TABLE [dbo].[RDSCollectionSettings]( GO -IF NOT EXISTS(SELECT * FROM sys.columns +IF NOT EXISTS(SELECT * FROM sys.columns WHERE [name] = N'SecurityLayer' AND [object_id] = OBJECT_ID(N'RDSCollectionSettings')) BEGIN ALTER TABLE [dbo].[RDSCollectionSettings] ADD SecurityLayer NVARCHAR(20) null; END GO -IF NOT EXISTS(SELECT * FROM sys.columns +IF NOT EXISTS(SELECT * FROM sys.columns WHERE [name] = N'EncryptionLevel' AND [object_id] = OBJECT_ID(N'RDSCollectionSettings')) BEGIN ALTER TABLE [dbo].[RDSCollectionSettings] ADD EncryptionLevel NVARCHAR(20) null; END GO -IF NOT EXISTS(SELECT * FROM sys.columns +IF NOT EXISTS(SELECT * FROM sys.columns WHERE [name] = N'AuthenticateUsingNLA' AND [object_id] = OBJECT_ID(N'RDSCollectionSettings')) BEGIN ALTER TABLE [dbo].[RDSCollectionSettings] ADD AuthenticateUsingNLA BIT null; @@ -5519,7 +5536,7 @@ CREATE TABLE [dbo].[RDSCertificates]( [FileName] [nvarchar](255) NOT NULL, [ValidFrom] [datetime] NULL, [ExpiryDate] [datetime] NULL - CONSTRAINT [PK_RDSCertificates] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_RDSCertificates] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] @@ -5540,7 +5557,7 @@ IF EXISTS (SELECT * FROM sys.objects WHERE type = 'F' AND name = 'FK_RDSCollect BEGIN ALTER TABLE [dbo].[RDSCollectionUsers] DROP CONSTRAINT [FK_RDSCollectionUsers_UserId] -END +END ELSE PRINT 'FK_RDSCollectionUsers_UserId not EXISTS' GO @@ -5550,9 +5567,9 @@ IF EXISTS (SELECT * FROM sys.objects WHERE type = 'F' AND name = 'FK_RDSServers BEGIN ALTER TABLE [dbo].[RDSServers] DROP CONSTRAINT [FK_RDSServers_RDSCollectionId] -END +END ELSE - PRINT 'FK_RDSServers_RDSCollectionId not EXISTS' + PRINT 'FK_RDSServers_RDSCollectionId not EXISTS' GO ALTER TABLE [dbo].[RDSCollectionUsers] WITH CHECK ADD CONSTRAINT [FK_RDSCollectionUsers_RDSCollectionId] FOREIGN KEY([RDSCollectionId]) @@ -5602,7 +5619,7 @@ INSERT INTO RDSCertificates Hash, FileName, ValidFrom, - ExpiryDate + ExpiryDate ) VALUES ( @@ -5631,7 +5648,7 @@ AS SELECT TOP 1 Id, ServiceId, - Content, + Content, Hash, FileName, ValidFrom, @@ -5757,10 +5774,10 @@ CREATE PROCEDURE [dbo].[GetRDSServersByItemId] @ItemID INT ) AS -SELECT +SELECT RS.Id, RS.ItemID, - RS.Name, + RS.Name, RS.FqdName, RS.Description, RS.RdsCollectionId, @@ -5776,10 +5793,10 @@ DROP PROCEDURE GetRDSServers GO CREATE PROCEDURE [dbo].[GetRDSServers] AS -SELECT +SELECT RS.Id, RS.ItemID, - RS.Name, + RS.Name, RS.FqdName, RS.Description, RS.RdsCollectionId, @@ -5801,7 +5818,7 @@ AS SELECT TOP 1 RS.Id, RS.ItemID, - RS.Name, + RS.Name, RS.FqdName, RS.Description, RS.RdsCollectionId, @@ -5819,10 +5836,10 @@ CREATE PROCEDURE [dbo].[GetRDSServersByCollectionId] @RdsCollectionId INT ) AS -SELECT +SELECT RS.Id, RS.ItemID, - RS.Name, + RS.Name, RS.FqdName, RS.Description, RS.RdsCollectionId, @@ -5877,7 +5894,7 @@ INSERT INTO @RDSCollections (RDSCollectionId) SELECT S.ID FROM RDSCollections AS S -WHERE +WHERE ((@ItemID is Null AND S.ItemID is null) or (@ItemID is not Null AND S.ItemID = @ItemID))' @@ -5922,10 +5939,10 @@ CREATE PROCEDURE [dbo].[GetRDSCollectionsByItemId] @ItemID INT ) AS -SELECT +SELECT Id, ItemId, - Name, + Name, Description, DisplayName FROM RDSCollections @@ -5944,7 +5961,7 @@ AS SELECT TOP 1 Id, - Name, + Name, ItemId, Description, DisplayName @@ -5965,9 +5982,9 @@ AS SELECT TOP 1 Id, ItemId, - Name, + Name, Description, - DisplayName + DisplayName FROM RDSCollections WHERE ID = @ID GO @@ -6058,7 +6075,7 @@ CREATE PROCEDURE [dbo].[GetRDSCollectionUsersByRDSCollectionId] @ID INT ) AS -SELECT +SELECT [AccountID], [ItemID], [AccountType], @@ -6095,7 +6112,7 @@ AS INSERT INTO RDSCollectionUsers ( - RDSCollectionId, + RDSCollectionId, AccountID ) VALUES @@ -6183,7 +6200,7 @@ AS SELECT TOP 1 Id, RDSCollectionId, - DisconnectedSessionLimitMin, + DisconnectedSessionLimitMin, ActiveSessionLimitMin, IdleSessionLimitMin, BrokenConnectionAction, @@ -6207,7 +6224,7 @@ CREATE PROCEDURE [dbo].[AddRDSCollectionSettings] ( @RDSCollectionSettingsID INT OUTPUT, @RDSCollectionId INT, - @DisconnectedSessionLimitMin INT, + @DisconnectedSessionLimitMin INT, @ActiveSessionLimitMin INT, @IdleSessionLimitMin INT, @BrokenConnectionAction NVARCHAR(20), @@ -6225,7 +6242,7 @@ AS INSERT INTO RDSCollectionSettings ( RDSCollectionId, - DisconnectedSessionLimitMin, + DisconnectedSessionLimitMin, ActiveSessionLimitMin, IdleSessionLimitMin, BrokenConnectionAction, @@ -6241,7 +6258,7 @@ INSERT INTO RDSCollectionSettings VALUES ( @RDSCollectionId, - @DisconnectedSessionLimitMin, + @DisconnectedSessionLimitMin, @ActiveSessionLimitMin, @IdleSessionLimitMin, @BrokenConnectionAction, @@ -6268,7 +6285,7 @@ CREATE PROCEDURE [dbo].[UpdateRDSCollectionSettings] ( @ID INT, @RDSCollectionId INT, - @DisconnectedSessionLimitMin INT, + @DisconnectedSessionLimitMin INT, @ActiveSessionLimitMin INT, @IdleSessionLimitMin INT, @BrokenConnectionAction NVARCHAR(20), @@ -6329,24 +6346,24 @@ GO -- Exchange2013 Shared and resource mailboxes -- Exchange2013 Shared and resource mailboxes Quotas - + IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'Exchange2013.SharedMailboxes') BEGIN -INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) +INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) VALUES (429, 12, 30, N'Exchange2013.SharedMailboxes', N'Shared Mailboxes per Organization', 2, 0, NULL, NULL) END GO IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'Exchange2013.ResourceMailboxes') BEGIN -INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) +INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) VALUES (428, 12, 31, N'Exchange2013.ResourceMailboxes', N'Resource Mailboxes per Organization', 2, 0, NULL, NULL) END GO -- Exchange2013 Shared and resource mailboxes Organization statistics -ALTER PROCEDURE [dbo].[GetExchangeOrganizationStatistics] +ALTER PROCEDURE [dbo].[GetExchangeOrganizationStatistics] ( @ItemID int ) @@ -6442,8 +6459,19 @@ WHERE (D.IsInstantAlias = 0 AND D.IsDomainPointer = 0) AND AND (@ServerID = 0 OR (@ServerID > 0 AND S.ServerID = @ServerID)) ' -IF @FilterColumn <> '' AND @FilterValue <> '' -SET @sql = @sql + ' AND ' + @FilterColumn + ' LIKE @FilterValue ' +IF @FilterValue <> '' +BEGIN + IF @FilterColumn <> '' + BEGIN + SET @sql = @sql + ' AND ' + @FilterColumn + ' LIKE @FilterValue ' + END + ELSE + SET @sql = @sql + ' + AND (DomainName LIKE @FilterValue + OR Username LIKE @FilterValue + OR ServerName LIKE @FilterValue + OR PackageName LIKE @FilterValue) ' +END IF @SortColumn <> '' AND @SortColumn IS NOT NULL SET @sql = @sql + ' ORDER BY ' + @SortColumn + ' ' @@ -6463,16 +6491,16 @@ SET @sql = @sql + ' SELECT COUNT(DomainID) FROM @Domains;SELECT D.IsSubDomain, D.IsInstantAlias, D.IsDomainPointer, - + -- packages P.PackageName, - + -- server ISNULL(SRV.ServerID, 0) AS ServerID, ISNULL(SRV.ServerName, '''') AS ServerName, ISNULL(SRV.Comments, '''') AS ServerComments, ISNULL(SRV.VirtualServer, 0) AS VirtualServer, - + -- user P.UserID, U.Username, @@ -6613,21 +6641,21 @@ REFERENCES [dbo].[Domains] ([DomainID]) ON DELETE CASCADE GO -IF NOT EXISTS(SELECT * FROM sys.columns +IF NOT EXISTS(SELECT * FROM sys.columns WHERE [name] = N'CreationDate' AND [object_id] = OBJECT_ID(N'Domains')) BEGIN ALTER TABLE [dbo].[Domains] ADD CreationDate DateTime null; END GO -IF NOT EXISTS(SELECT * FROM sys.columns +IF NOT EXISTS(SELECT * FROM sys.columns WHERE [name] = N'ExpirationDate' AND [object_id] = OBJECT_ID(N'Domains')) BEGIN ALTER TABLE [dbo].[Domains] ADD ExpirationDate DateTime null; END GO -IF NOT EXISTS(SELECT * FROM sys.columns +IF NOT EXISTS(SELECT * FROM sys.columns WHERE [name] = N'LastUpdateDate' AND [object_id] = OBJECT_ID(N'Domains')) BEGIN ALTER TABLE [dbo].[Domains] ADD LastUpdateDate DateTime null; @@ -6660,7 +6688,7 @@ Set @DomainExpirationLetterHtmlBody = N' .Summary A { color: ##0153A4; } .Summary { font-family: Tahoma; font-size: 9pt; } .Summary H1 { font-size: 1.7em; color: ##1F4978; border-bottom: dotted 3px ##efefef; } - .Summary H2 { font-size: 1.3em; color: ##1F4978; } - .Summary H3 { font-size: 1em; color: ##1F4978; } + .Summary H2 { font-size: 1.3em; color: ##1F4978; } + .Summary H3 { font-size: 1em; color: ##1F4978; } .Summary TABLE { border: solid 1px ##e5e5e5; } .Summary TH, .Summary TD.Label { padding: 5px; font-size: 8pt; font-weight: bold; background-color: ##f5f5f5; } @@ -6881,7 +6909,7 @@ Please, find below details of MX and NS changes. - +

@@ -6968,7 +6996,7 @@ INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [Property .Summary A { color: ##0153A4; } .Summary { font-family: Tahoma; font-size: 9pt; } .Summary H1 { font-size: 1.7em; color: ##1F4978; border-bottom: dotted 3px ##efefef; } - .Summary H2 { font-size: 1.3em; color: ##1F4978; } + .Summary H2 { font-size: 1.3em; color: ##1F4978; } .Summary TABLE { border: solid 1px ##e5e5e5; } .Summary TH, .Summary TD.Label { padding: 5px; font-size: 8pt; font-weight: bold; background-color: ##f5f5f5; } @@ -7050,7 +7078,7 @@ DROP PROCEDURE GetScheduleTaskEmailTemplate GO CREATE PROCEDURE [dbo].GetScheduleTaskEmailTemplate ( - @TaskID [nvarchar](100) + @TaskID [nvarchar](100) ) AS SELECT @@ -7058,7 +7086,7 @@ SELECT [From] , [Subject] , [Template] - FROM [dbo].[ScheduleTasksEmailTemplates] where [TaskID] = @TaskID + FROM [dbo].[ScheduleTasksEmailTemplates] where [TaskID] = @TaskID GO IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetDomainDnsRecords') @@ -7097,7 +7125,7 @@ SELECT Value, Date FROM [dbo].[DomainDnsRecords] - WHERE [DomainId] = @DomainId + WHERE [DomainId] = @DomainId GO @@ -7194,7 +7222,7 @@ CREATE PROCEDURE [dbo].UpdateDomainDates @DomainId INT, @DomainCreationDate DateTime, @DomainExpirationDate DateTime, - @DomainLastUpdateDate DateTime + @DomainLastUpdateDate DateTime ) AS UPDATE [dbo].[Domains] SET [CreationDate] = @DomainCreationDate, [ExpirationDate] = @DomainExpirationDate, [LastUpdateDate] = @DomainLastUpdateDate WHERE [DomainID] = @DomainId @@ -7340,7 +7368,7 @@ LEFT OUTER JOIN Services AS S ON Z.ServiceID = S.ServiceID LEFT OUTER JOIN Servers AS SRV ON S.ServerID = SRV.ServerID WHERE SD.ItemPosition BETWEEN @StartRow + 1 AND @StartRow + @MaximumRows' -exec sp_executesql @sql, N'@StartRow int, @MaximumRows int, @PackageID int, @FilterValue nvarchar(50), @ServerID int, @Recursive bit', +exec sp_executesql @sql, N'@StartRow int, @MaximumRows int, @PackageID int, @FilterValue nvarchar(50), @ServerID int, @Recursive bit', @StartRow, @MaximumRows, @PackageID, @FilterValue, @ServerID, @Recursive @@ -7381,7 +7409,7 @@ INSERT INTO @RDSServer (RDSServerId) SELECT S.ID FROM RDSServers AS S -WHERE +WHERE ((((@ItemID is Null AND S.ItemID is null) or @IgnoreItemId = 1) or (@ItemID is not Null AND S.ItemID = @ItemID)) and @@ -7398,7 +7426,7 @@ SET @sql = @sql + ' SELECT COUNT(RDSServerId) FROM @RDSServer; SELECT ST.ID, ST.ItemID, - ST.Name, + ST.Name, ST.FqdName, ST.Description, ST.RdsCollectionId, @@ -7410,7 +7438,7 @@ LEFT OUTER JOIN ServiceItems AS SI ON SI.ItemId = ST.ItemId WHERE S.ItemPosition BETWEEN @StartRow AND @EndRow' exec sp_executesql @sql, N'@StartRow int, @MaximumRows int, @FilterValue nvarchar(50), @ItemID int, @RdsCollectionId int, @IgnoreItemId bit, @IgnoreRdsCollectionId bit', -@StartRow, @MaximumRows, @FilterValue, @ItemID, @RdsCollectionId, @IgnoreItemId , @IgnoreRdsCollectionId +@StartRow, @MaximumRows, @FilterValue, @ItemID, @RdsCollectionId, @IgnoreItemId , @IgnoreRdsCollectionId RETURN @@ -7452,7 +7480,7 @@ GO -- fix check domain used by HostedOrganization -ALTER PROCEDURE [dbo].[CheckDomainUsedByHostedOrganization] +ALTER PROCEDURE [dbo].[CheckDomainUsedByHostedOrganization] @DomainName nvarchar(100), @Result int OUTPUT AS @@ -7471,7 +7499,7 @@ AS BEGIN SET @Result = 1 END - + RETURN @Result GO @@ -7507,34 +7535,34 @@ SELECT eam.AccountID as OwnerID FROM ExchangeAccountEmailAddresses as eam -INNER JOIN +INNER JOIN ExchangeAccounts ea -ON +ON ea.AccountID = eam.AccountID WHERE (ea.PrimaryEmailAddress != eam.EmailAddress) AND (ea.UserPrincipalName != eam.EmailAddress) AND (eam.EmailAddress LIKE '%@'+ @DomainName) UNION -SELECT +SELECT 'LyncUsers' as ObjectName, ea.AccountID as ObjectID, ea.AccountType as ObjectType, ea.DisplayName as DisplayName, 0 as OwnerID -FROM - ExchangeAccounts ea -INNER JOIN +FROM + ExchangeAccounts ea +INNER JOIN LyncUsers ou -ON +ON ea.AccountID = ou.AccountID -WHERE +WHERE ou.SipAddress LIKE '%@'+ @DomainName -ORDER BY +ORDER BY DisplayName RETURN GO -IF NOT EXISTS(SELECT * FROM sys.columns +IF NOT EXISTS(SELECT * FROM sys.columns WHERE [name] = N'RegistrarName' AND [object_id] = OBJECT_ID(N'Domains')) BEGIN ALTER TABLE [dbo].[Domains] ADD RegistrarName nvarchar(max); @@ -7607,8 +7635,19 @@ WHERE (D.IsInstantAlias = 0 AND D.IsDomainPointer = 0) AND AND (@ServerID = 0 OR (@ServerID > 0 AND S.ServerID = @ServerID)) ' -IF @FilterColumn <> '' AND @FilterValue <> '' -SET @sql = @sql + ' AND ' + @FilterColumn + ' LIKE @FilterValue ' +IF @FilterValue <> '' +BEGIN + IF @FilterColumn <> '' + BEGIN + SET @sql = @sql + ' AND ' + @FilterColumn + ' LIKE @FilterValue ' + END + ELSE + SET @sql = @sql + ' + AND (DomainName LIKE @FilterValue + OR Username LIKE @FilterValue + OR ServerName LIKE @FilterValue + OR PackageName LIKE @FilterValue) ' +END IF @SortColumn <> '' AND @SortColumn IS NOT NULL SET @sql = @sql + ' ORDER BY ' + @SortColumn + ' ' @@ -7653,7 +7692,7 @@ LEFT OUTER JOIN Services AS S ON Z.ServiceID = S.ServiceID LEFT OUTER JOIN Servers AS SRV ON S.ServerID = SRV.ServerID WHERE SD.ItemPosition BETWEEN @StartRow + 1 AND @StartRow + @MaximumRows' -exec sp_executesql @sql, N'@StartRow int, @MaximumRows int, @PackageID int, @FilterValue nvarchar(50), @ServerID int, @Recursive bit', +exec sp_executesql @sql, N'@StartRow int, @MaximumRows int, @PackageID int, @FilterValue nvarchar(50), @ServerID int, @Recursive bit', @StartRow, @MaximumRows, @PackageID, @FilterValue, @ServerID, @Recursive @@ -7735,18 +7774,18 @@ SELECT P.StatusID, P.PlanID, P.PurchaseDate, - + dbo.GetItemComments(P.PackageID, 'PACKAGE', @ActorID) AS Comments, - + -- server ISNULL(P.ServerID, 0) AS ServerID, ISNULL(S.ServerName, 'None') AS ServerName, ISNULL(S.Comments, '') AS ServerComments, ISNULL(S.VirtualServer, 1) AS VirtualServer, - + -- hosting plan HP.PlanName, - + -- user P.UserID, U.Username, @@ -7781,17 +7820,17 @@ SELECT P.PackageName, P.StatusID, P.PurchaseDate, - + -- server ISNULL(P.ServerID, 0) AS ServerID, ISNULL(S.ServerName, 'None') AS ServerName, ISNULL(S.Comments, '') AS ServerComments, ISNULL(S.VirtualServer, 1) AS VirtualServer, - + -- hosting plan P.PlanID, HP.PlanName, - + -- user P.UserID, U.Username, @@ -7806,7 +7845,7 @@ INNER JOIN Users AS U ON P.UserID = U.UserID INNER JOIN Servers AS S ON P.ServerID = S.ServerID INNER JOIN HostingPlans AS HP ON P.PlanID = HP.PlanID WHERE - P.UserID = @UserID + P.UserID = @UserID RETURN GO @@ -7991,7 +8030,7 @@ CREATE PROCEDURE [dbo].[GetWebDavAccessTokenById] @Id int ) AS -SELECT +SELECT ID , FilePath , AuthData , @@ -7999,7 +8038,7 @@ SELECT ExpirationDate, AccountID, ItemId - FROM WebDavAccessTokens + FROM WebDavAccessTokens Where ID = @Id AND ExpirationDate > getdate() GO @@ -8012,7 +8051,7 @@ CREATE PROCEDURE [dbo].[GetWebDavAccessTokenByAccessToken] @AccessToken UNIQUEIDENTIFIER ) AS -SELECT +SELECT ID , FilePath , AuthData , @@ -8020,7 +8059,7 @@ SELECT ExpirationDate, AccountID, ItemId - FROM WebDavAccessTokens + FROM WebDavAccessTokens Where AccessToken = @AccessToken AND ExpirationDate > getdate() GO @@ -8037,7 +8076,7 @@ END GO IF NOT EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'ExchangeDeletedAccounts') -CREATE TABLE ExchangeDeletedAccounts +CREATE TABLE ExchangeDeletedAccounts ( ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY, AccountID INT NOT NULL, @@ -8106,7 +8145,7 @@ IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddOrganizatio DROP PROCEDURE [dbo].[AddOrganizationDeletedUser] GO -CREATE PROCEDURE [dbo].[AddOrganizationDeletedUser] +CREATE PROCEDURE [dbo].[AddOrganizationDeletedUser] ( @ID int OUTPUT, @AccountID int, @@ -8205,7 +8244,7 @@ AS DECLARE @Result2 int SET @Result2 = (SELECT SUM(CAST(SIP.PropertyValue AS int)) FROM ServiceItemProperties AS SIP INNER JOIN ServiceItems AS SI ON SIP.ItemID = SI.ItemID - INNER JOIN ServiceItemProperties AS SIP2 ON + INNER JOIN ServiceItemProperties AS SIP2 ON SIP2.ItemID = SI.ItemID AND SIP2.PropertyName = 'DynamicMemory.Enabled' AND SIP2.PropertyValue = 'True' INNER JOIN PackagesTreeCache AS PT ON SI.PackageID = PT.PackageID WHERE SIP.PropertyName = 'DynamicMemory.Maximum' AND PT.ParentPackageID = @PackageID) @@ -8242,13 +8281,13 @@ AS INNER JOIN PackagesTreeCache AS PT ON PIP.PackageID = PT.PackageID WHERE PT.ParentPackageID = @PackageID AND IP.PoolID = 3) ELSE IF @QuotaID = 319 -- BB Users - SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea + SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea INNER JOIN BlackBerryUsers bu ON ea.AccountID = bu.AccountID INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID WHERE pt.ParentPackageID = @PackageID) ELSE IF @QuotaID = 320 -- OCS Users - SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea + SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea INNER JOIN OCSUsers ocs ON ea.AccountID = ocs.AccountID INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID @@ -8262,12 +8301,12 @@ AS SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts AS ea INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID - WHERE pt.ParentPackageID = @PackageID + WHERE pt.ParentPackageID = @PackageID AND ea.AccountType IN (1) AND ea.MailboxPlanId IS NOT NULL) ELSE IF @QuotaID = 77 -- Exchange2007.DiskSpace - SET @Result = (SELECT SUM(B.MailboxSizeMB) FROM ExchangeAccounts AS ea - INNER JOIN ExchangeMailboxPlans AS B ON ea.MailboxPlanId = B.MailboxPlanId + SET @Result = (SELECT SUM(B.MailboxSizeMB) FROM ExchangeAccounts AS ea + INNER JOIN ExchangeMailboxPlans AS B ON ea.MailboxPlanId = B.MailboxPlanId INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID WHERE pt.ParentPackageID = @PackageID) @@ -8316,7 +8355,7 @@ AS INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID WHERE PT.ParentPackageID = @PackageID) ELSE IF @QuotaID = 451 - SET @Result = (SELECT COUNT(RS.[ID]) FROM [dbo].[RDSServers] RS + SET @Result = (SELECT COUNT(RS.[ID]) FROM [dbo].[RDSServers] RS INNER JOIN ServiceItems si ON RS.ItemID = si.ItemID INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID WHERE PT.ParentPackageID = @PackageID) @@ -8357,7 +8396,7 @@ BEGIN END GO -ALTER PROCEDURE [dbo].[AddExchangeMailboxPlan] +ALTER PROCEDURE [dbo].[AddExchangeMailboxPlan] ( @MailboxPlanId int OUTPUT, @ItemID int, @@ -8471,7 +8510,7 @@ SET @MailboxPlanId = SCOPE_IDENTITY() RETURN GO -ALTER PROCEDURE [dbo].[UpdateExchangeMailboxPlan] +ALTER PROCEDURE [dbo].[UpdateExchangeMailboxPlan] ( @MailboxPlanId int, @MailboxPlan nvarchar(300), @@ -8524,7 +8563,7 @@ UPDATE ExchangeMailboxPlans SET MailboxPlanType = @MailboxPlanType, AllowLitigationHold = @AllowLitigationHold, RecoverableItemsWarningPct = @RecoverableItemsWarningPct, - RecoverableItemsSpace = @RecoverableItemsSpace, + RecoverableItemsSpace = @RecoverableItemsSpace, LitigationHoldUrl = @LitigationHoldUrl, LitigationHoldMsg = @LitigationHoldMsg, Archiving = @Archiving, @@ -8537,7 +8576,7 @@ WHERE MailboxPlanId = @MailboxPlanId RETURN GO -ALTER PROCEDURE [dbo].[GetExchangeMailboxPlan] +ALTER PROCEDURE [dbo].[GetExchangeMailboxPlan] ( @MailboxPlanId int ) @@ -8613,7 +8652,7 @@ SELECT FROM ExchangeMailboxPlans WHERE - ItemID = @ItemID + ItemID = @ItemID AND ((Archiving=@Archiving) OR ((@Archiving=0) AND (Archiving IS NULL))) ORDER BY MailboxPlan RETURN @@ -8672,7 +8711,7 @@ SELECT @ItemID, PropertyName, PropertyValue -FROM OPENXML(@idoc, '/properties/property',1) WITH +FROM OPENXML(@idoc, '/properties/property',1) WITH ( PropertyName nvarchar(50) '@name', PropertyValue nvarchar(3000) '@value' @@ -8685,9 +8724,9 @@ INSERT INTO ServiceItemProperties PropertyName, PropertyValue ) -SELECT - ItemID, - PropertyName, +SELECT + ItemID, + PropertyName, PropertyValue FROM #TempTable @@ -8698,7 +8737,7 @@ exec sp_xml_removedocument @idoc COMMIT TRAN -RETURN +RETURN GO @@ -8706,7 +8745,7 @@ GO IF OBJECTPROPERTY(object_id('dbo.GetExchangeAccountByAccountNameWithoutItemId'), N'IsProcedure') = 1 DROP PROCEDURE [dbo].[GetExchangeAccountByAccountNameWithoutItemId] GO -CREATE PROCEDURE [dbo].[GetExchangeAccountByAccountNameWithoutItemId] +CREATE PROCEDURE [dbo].[GetExchangeAccountByAccountNameWithoutItemId] ( @UserPrincipalName nvarchar(300) ) @@ -8725,12 +8764,12 @@ SELECT P.MailboxPlan, E.SubscriberNumber, E.UserPrincipalName, - E.ArchivingMailboxPlanId, + E.ArchivingMailboxPlanId, AP.MailboxPlan as 'ArchivingMailboxPlan', E.EnableArchiving FROM ExchangeAccounts AS E -LEFT OUTER JOIN ExchangeMailboxPlans AS P ON E.MailboxPlanId = P.MailboxPlanId +LEFT OUTER JOIN ExchangeMailboxPlans AS P ON E.MailboxPlanId = P.MailboxPlanId LEFT OUTER JOIN ExchangeMailboxPlans AS AP ON E.ArchivingMailboxPlanId = AP.MailboxPlanId WHERE E.UserPrincipalName = @UserPrincipalName @@ -8855,11 +8894,11 @@ 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 +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 +RETURN GO -- Hyper-V 2012 R2 Provider @@ -8928,10 +8967,10 @@ UPDATE [dbo].[Providers] SET [EditorControl] = N'HyperV2012R2', [GroupID] = 33 W END GO -IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetVirtualMachinesPaged2012') -DROP PROCEDURE GetVirtualMachinesPaged2012 +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetVirtualMachinesPagedForPC') +DROP PROCEDURE GetVirtualMachinesPagedForPC GO -CREATE PROCEDURE [dbo].[GetVirtualMachinesPaged2012] +CREATE PROCEDURE [dbo].[GetVirtualMachinesPagedForPC] ( @ActorID int, @PackageID int, @@ -8943,21 +8982,34 @@ CREATE PROCEDURE [dbo].[GetVirtualMachinesPaged2012] @Recursive bit ) AS + + -- check rights IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0 -RAISERROR('You are not allowed to access this package', 16, 1) +BEGIN + RAISERROR('You are not allowed to access this package', 16, 1) + RETURN +END -- start DECLARE @condition nvarchar(700) SET @condition = ' -SI.ItemTypeID = 41 -- VPS2012 +SI.ItemTypeID = 35 -- VPS AND ((@Recursive = 0 AND P.PackageID = @PackageID) OR (@Recursive = 1 AND dbo.CheckPackageParent(@PackageID, P.PackageID) = 1)) ' -IF @FilterColumn <> '' AND @FilterColumn IS NOT NULL -AND @FilterValue <> '' AND @FilterValue IS NOT NULL -SET @condition = @condition + ' AND ' + @FilterColumn + ' LIKE ''' + @FilterValue + '''' +IF @FilterValue <> '' AND @FilterValue IS NOT NULL +BEGIN + IF @FilterColumn <> '' AND @FilterColumn IS NOT NULL + SET @condition = @condition + ' AND ' + @FilterColumn + ' LIKE ''' + @FilterValue + '''' + ELSE + SET @condition = @condition + ' + AND (ItemName LIKE ''' + @FilterValue + ''' + OR Username LIKE ''' + @FilterValue + ''' + OR ExternalIP LIKE ''' + @FilterValue + ''' + OR IPAddress LIKE ''' + @FilterValue + ''')' +END IF @SortColumn IS NULL OR @SortColumn = '' SET @SortColumn = 'SI.ItemName ASC' @@ -9030,6 +9082,227 @@ exec sp_executesql @sql, N'@PackageID int, @StartRow int, @MaximumRows int, @Rec RETURN GO +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetVirtualMachinesPaged2012') +DROP PROCEDURE GetVirtualMachinesPaged2012 +GO +CREATE PROCEDURE [dbo].[GetVirtualMachinesPaged2012] +( + @ActorID int, + @PackageID int, + @FilterColumn nvarchar(50) = '', + @FilterValue nvarchar(50) = '', + @SortColumn nvarchar(50), + @StartRow int, + @MaximumRows int, + @Recursive bit +) +AS +-- check rights +IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0 +RAISERROR('You are not allowed to access this package', 16, 1) + +-- start +DECLARE @condition nvarchar(700) +SET @condition = ' +SI.ItemTypeID = 41 -- VPS2012 +AND ((@Recursive = 0 AND P.PackageID = @PackageID) +OR (@Recursive = 1 AND dbo.CheckPackageParent(@PackageID, P.PackageID) = 1)) +' + +IF @FilterValue <> '' AND @FilterValue IS NOT NULL +BEGIN + IF @FilterColumn <> '' AND @FilterColumn IS NOT NULL + SET @condition = @condition + ' AND ' + @FilterColumn + ' LIKE ''' + @FilterValue + '''' + ELSE + SET @condition = @condition + ' + AND (ItemName LIKE ''' + @FilterValue + ''' + OR Username LIKE ''' + @FilterValue + ''' + OR ExternalIP LIKE ''' + @FilterValue + ''' + OR IPAddress LIKE ''' + @FilterValue + ''')' +END + +IF @SortColumn IS NULL OR @SortColumn = '' +SET @SortColumn = 'SI.ItemName ASC' + +DECLARE @sql nvarchar(3500) + +set @sql = ' +SELECT COUNT(SI.ItemID) FROM Packages AS P +INNER JOIN ServiceItems AS SI ON P.PackageID = SI.PackageID +INNER JOIN Users AS U ON P.UserID = U.UserID +LEFT OUTER JOIN ( + SELECT PIP.ItemID, IP.ExternalIP FROM PackageIPAddresses AS PIP + INNER JOIN IPAddresses AS IP ON PIP.AddressID = IP.AddressID + WHERE PIP.IsPrimary = 1 AND IP.PoolID = 3 -- external IP addresses +) AS EIP ON SI.ItemID = EIP.ItemID +LEFT OUTER JOIN PrivateIPAddresses AS PIP ON PIP.ItemID = SI.ItemID AND PIP.IsPrimary = 1 +WHERE ' + @condition + ' + +DECLARE @Items AS TABLE +( + ItemID int +); + +WITH TempItems AS ( + SELECT ROW_NUMBER() OVER (ORDER BY ' + @SortColumn + ') as Row, + SI.ItemID + FROM Packages AS P + INNER JOIN ServiceItems AS SI ON P.PackageID = SI.PackageID + INNER JOIN Users AS U ON P.UserID = U.UserID + LEFT OUTER JOIN ( + SELECT PIP.ItemID, IP.ExternalIP FROM PackageIPAddresses AS PIP + INNER JOIN IPAddresses AS IP ON PIP.AddressID = IP.AddressID + WHERE PIP.IsPrimary = 1 AND IP.PoolID = 3 -- external IP addresses + ) AS EIP ON SI.ItemID = EIP.ItemID + LEFT OUTER JOIN PrivateIPAddresses AS PIP ON PIP.ItemID = SI.ItemID AND PIP.IsPrimary = 1 + WHERE ' + @condition + ' +) + +INSERT INTO @Items +SELECT ItemID FROM TempItems +WHERE TempItems.Row BETWEEN @StartRow + 1 and @StartRow + @MaximumRows + +SELECT + SI.ItemID, + SI.ItemName, + SI.PackageID, + P.PackageName, + P.UserID, + U.Username, + + EIP.ExternalIP, + PIP.IPAddress +FROM @Items AS TSI +INNER JOIN ServiceItems AS SI ON TSI.ItemID = SI.ItemID +INNER JOIN Packages AS P ON SI.PackageID = P.PackageID +INNER JOIN Users AS U ON P.UserID = U.UserID +LEFT OUTER JOIN ( + SELECT PIP.ItemID, IP.ExternalIP FROM PackageIPAddresses AS PIP + INNER JOIN IPAddresses AS IP ON PIP.AddressID = IP.AddressID + WHERE PIP.IsPrimary = 1 AND IP.PoolID = 3 -- external IP addresses +) AS EIP ON SI.ItemID = EIP.ItemID +LEFT OUTER JOIN PrivateIPAddresses AS PIP ON PIP.ItemID = SI.ItemID AND PIP.IsPrimary = 1 +' + +--print @sql + +exec sp_executesql @sql, N'@PackageID int, @StartRow int, @MaximumRows int, @Recursive bit', +@PackageID, @StartRow, @MaximumRows, @Recursive + +RETURN +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetVirtualMachinesPaged') +DROP PROCEDURE GetVirtualMachinesPaged +GO +CREATE PROCEDURE [dbo].[GetVirtualMachinesPaged] +( + @ActorID int, + @PackageID int, + @FilterColumn nvarchar(50) = '', + @FilterValue nvarchar(50) = '', + @SortColumn nvarchar(50), + @StartRow int, + @MaximumRows int, + @Recursive bit +) +AS + + +-- check rights +IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0 +RAISERROR('You are not allowed to access this package', 16, 1) + +-- start +DECLARE @condition nvarchar(700) +SET @condition = ' +SI.ItemTypeID = 33 -- VPS +AND ((@Recursive = 0 AND P.PackageID = @PackageID) +OR (@Recursive = 1 AND dbo.CheckPackageParent(@PackageID, P.PackageID) = 1)) +' + +IF @FilterValue <> '' AND @FilterValue IS NOT NULL +BEGIN + IF @FilterColumn <> '' AND @FilterColumn IS NOT NULL + SET @condition = @condition + ' AND ' + @FilterColumn + ' LIKE ''' + @FilterValue + '''' + ELSE + SET @condition = @condition + ' + AND (ItemName LIKE ''' + @FilterValue + ''' + OR Username LIKE ''' + @FilterValue + ''' + OR ExternalIP LIKE ''' + @FilterValue + ''' + OR IPAddress LIKE ''' + @FilterValue + ''')' +END + +IF @SortColumn IS NULL OR @SortColumn = '' +SET @SortColumn = 'SI.ItemName ASC' + +DECLARE @sql nvarchar(3500) + +set @sql = ' +SELECT COUNT(SI.ItemID) FROM Packages AS P +INNER JOIN ServiceItems AS SI ON P.PackageID = SI.PackageID +INNER JOIN Users AS U ON P.UserID = U.UserID +LEFT OUTER JOIN ( + SELECT PIP.ItemID, IP.ExternalIP FROM PackageIPAddresses AS PIP + INNER JOIN IPAddresses AS IP ON PIP.AddressID = IP.AddressID + WHERE PIP.IsPrimary = 1 AND IP.PoolID = 3 -- external IP addresses +) AS EIP ON SI.ItemID = EIP.ItemID +LEFT OUTER JOIN PrivateIPAddresses AS PIP ON PIP.ItemID = SI.ItemID AND PIP.IsPrimary = 1 +WHERE ' + @condition + ' + +DECLARE @Items AS TABLE +( + ItemID int +); + +WITH TempItems AS ( + SELECT ROW_NUMBER() OVER (ORDER BY ' + @SortColumn + ') as Row, + SI.ItemID + FROM Packages AS P + INNER JOIN ServiceItems AS SI ON P.PackageID = SI.PackageID + INNER JOIN Users AS U ON P.UserID = U.UserID + LEFT OUTER JOIN ( + SELECT PIP.ItemID, IP.ExternalIP FROM PackageIPAddresses AS PIP + INNER JOIN IPAddresses AS IP ON PIP.AddressID = IP.AddressID + WHERE PIP.IsPrimary = 1 AND IP.PoolID = 3 -- external IP addresses + ) AS EIP ON SI.ItemID = EIP.ItemID + LEFT OUTER JOIN PrivateIPAddresses AS PIP ON PIP.ItemID = SI.ItemID AND PIP.IsPrimary = 1 + WHERE ' + @condition + ' +) + +INSERT INTO @Items +SELECT ItemID FROM TempItems +WHERE TempItems.Row BETWEEN @StartRow + 1 and @StartRow + @MaximumRows + +SELECT + SI.ItemID, + SI.ItemName, + SI.PackageID, + P.PackageName, + P.UserID, + U.Username, + + EIP.ExternalIP, + PIP.IPAddress +FROM @Items AS TSI +INNER JOIN ServiceItems AS SI ON TSI.ItemID = SI.ItemID +INNER JOIN Packages AS P ON SI.PackageID = P.PackageID +INNER JOIN Users AS U ON P.UserID = U.UserID +LEFT OUTER JOIN ( + SELECT PIP.ItemID, IP.ExternalIP FROM PackageIPAddresses AS PIP + INNER JOIN IPAddresses AS IP ON PIP.AddressID = IP.AddressID + WHERE PIP.IsPrimary = 1 AND IP.PoolID = 3 -- external IP addresses +) AS EIP ON SI.ItemID = EIP.ItemID +LEFT OUTER JOIN PrivateIPAddresses AS PIP ON PIP.ItemID = SI.ItemID AND PIP.IsPrimary = 1 +' + +--print @sql + +exec sp_executesql @sql, N'@PackageID int, @StartRow int, @MaximumRows int, @Recursive bit', +@PackageID, @StartRow, @MaximumRows, @Recursive + +RETURN +GO --ES OWA Editing IF NOT EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'EnterpriseFoldersOwaPermissions') @@ -9037,8 +9310,8 @@ CREATE TABLE EnterpriseFoldersOwaPermissions ( ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY, ItemID INT NOT NULL, - FolderID INT NOT NULL, - AccountID INT NOT NULL + FolderID INT NOT NULL, + AccountID INT NOT NULL ) GO @@ -9088,21 +9361,21 @@ CREATE PROCEDURE [dbo].[AddEnterpriseFolderOwaUser] ( @ESOwsaUserId INT OUTPUT, @ItemID INT, - @FolderID INT, - @AccountID INT + @FolderID INT, + @AccountID INT ) AS INSERT INTO EnterpriseFoldersOwaPermissions ( ItemID , - FolderID, + FolderID, AccountID ) VALUES ( @ItemID, - @FolderID, - @AccountID + @FolderID, + @AccountID ) SET @ESOwsaUserId = SCOPE_IDENTITY() @@ -9121,7 +9394,7 @@ CREATE PROCEDURE [dbo].[GetEnterpriseFolderOwaUsers] @FolderID INT ) AS -SELECT +SELECT EA.AccountID, EA.ItemID, EA.AccountType, @@ -9131,7 +9404,7 @@ SELECT EA.MailEnabledPublicFolder, EA.MailboxPlanId, EA.SubscriberNumber, - EA.UserPrincipalName + EA.UserPrincipalName FROM EnterpriseFoldersOwaPermissions AS EFOP LEFT JOIN ExchangeAccounts AS EA ON EA.AccountID = EFOP.AccountID WHERE EFOP.ItemID = @ItemID AND EFOP.FolderID = @FolderID @@ -9167,7 +9440,7 @@ CREATE PROCEDURE [dbo].[GetUserEnterpriseFolderWithOwaEditPermission] @AccountID INT ) AS -SELECT +SELECT EF.FolderName FROM EnterpriseFoldersOwaPermissions AS EFOP LEFT JOIN [dbo].[EnterpriseFolders] AS EF ON EF.EnterpriseFolderID = EFOP.FolderID @@ -9179,7 +9452,7 @@ GO IF NOT EXISTS (SELECT * FROM [dbo].[Providers] WHERE [DisplayName] = 'Hosted MS CRM 2015') BEGIN -INSERT [dbo].[Providers] ([ProviderId], [GroupId], [ProviderName], [DisplayName], [ProviderType], [EditorControl], [DisableAutoDiscovery]) +INSERT [dbo].[Providers] ([ProviderId], [GroupId], [ProviderName], [DisplayName], [ProviderType], [EditorControl], [DisableAutoDiscovery]) VALUES(1205, 24, N'CRM', N'Hosted MS CRM 2015', N'WebsitePanel.Providers.HostedSolution.CRMProvider2015, WebsitePanel.Providers.HostedSolution.Crm2015', N'CRM2011', NULL) END GO @@ -9208,7 +9481,7 @@ Set @RDSSetupLetterHtmlBody = N' .Summary A { color: ##0153A4; } .Summary { font-family: Tahoma; font-size: 9pt; } .Summary H1 { font-size: 1.7em; color: ##1F4978; border-bottom: dotted 3px ##efefef; } - .Summary H2 { font-size: 1.3em; color: ##1F4978; } + .Summary H2 { font-size: 1.3em; color: ##1F4978; } .Summary TABLE { border: solid 1px ##e5e5e5; } .Summary TH, .Summary TD.Label { padding: 5px; font-size: 8pt; font-weight: bold; background-color: ##f5f5f5; } @@ -9271,14 +9544,14 @@ UPDATE [dbo].[UserSettings] SET [PropertyValue] = @RDSSetupLetterTextBody WHERE GO IF NOT EXISTS (SELECT * FROM [dbo].[ResourceGroups] WHERE GroupName = 'Sharepoint Foundation Server') -BEGIN +BEGIN DECLARE @group_order AS INT DECLARE @group_controller AS NVARCHAR(1000) DECLARE @group_id AS INT DECLARE @provider_id AS INT UPDATE [dbo].[ResourceGroups] SET GroupName = 'Sharepoint Foundation Server' WHERE GroupName = 'Hosted Sharepoint' - SELECT @group_order = GroupOrder, @group_controller = GroupController FROM [dbo].[ResourceGroups] WHERE GroupName = 'Sharepoint Foundation Server' + SELECT @group_order = GroupOrder, @group_controller = GroupController FROM [dbo].[ResourceGroups] WHERE GroupName = 'Sharepoint Foundation Server' SELECT TOP 1 @group_id = GroupId + 1 From [dbo].[ResourceGroups] ORDER BY GroupID DESC SELECT TOP 1 @provider_id = ProviderId + 1 From [dbo].[Providers] ORDER BY ProviderID DESC UPDATE [dbo].[ResourceGroups] SET GroupOrder = GroupOrder + 1 WHERE GroupOrder > @group_order @@ -9311,22 +9584,22 @@ CREATE PROCEDURE [dbo].[GetLyncUsers] @SortColumn nvarchar(40), @SortDirection nvarchar(20), @StartRow int, - @Count int + @Count int ) AS -CREATE TABLE #TempLyncUsers -( +CREATE TABLE #TempLyncUsers +( [ID] [int] IDENTITY(1,1) NOT NULL, - [AccountID] [int], + [AccountID] [int], [ItemID] [int] NOT NULL, [AccountName] [nvarchar](300) NOT NULL, [DisplayName] [nvarchar](300) NOT NULL, [UserPrincipalName] [nvarchar](300) NULL, [SipAddress] [nvarchar](300) NULL, [SamAccountName] [nvarchar](100) NULL, - [LyncUserPlanId] [int] NOT NULL, - [LyncUserPlanName] [nvarchar] (300) NOT NULL, + [LyncUserPlanId] [int] NOT NULL, + [LyncUserPlanName] [nvarchar] (300) NOT NULL, ) DECLARE @condition nvarchar(700) @@ -9355,9 +9628,9 @@ END DECLARE @sql nvarchar(3500) set @sql = ' - INSERT INTO - #TempLyncUsers - SELECT + INSERT INTO + #TempLyncUsers + SELECT ea.AccountID, ea.ItemID, ea.AccountName, @@ -9366,29 +9639,29 @@ set @sql = ' ou.SipAddress, ea.SamAccountName, ou.LyncUserPlanId, - lp.LyncUserPlanName - FROM - ExchangeAccounts ea - INNER JOIN + lp.LyncUserPlanName + FROM + ExchangeAccounts ea + INNER JOIN LyncUsers ou INNER JOIN - LyncUserPlans lp - ON - ou.LyncUserPlanId = lp.LyncUserPlanId + LyncUserPlans lp ON + ou.LyncUserPlanId = lp.LyncUserPlanId + ON ea.AccountID = ou.AccountID - WHERE + WHERE ea.ItemID = @ItemID ' + @condition exec sp_executesql @sql, N'@ItemID int',@ItemID DECLARE @RetCount int -SELECT @RetCount = COUNT(ID) FROM #TempLyncUsers +SELECT @RetCount = COUNT(ID) FROM #TempLyncUsers IF (@SortDirection = 'ASC') BEGIN - SELECT * FROM #TempLyncUsers - WHERE ID > @StartRow AND ID <= (@StartRow + @Count) + SELECT * FROM #TempLyncUsers + WHERE ID > @StartRow AND ID <= (@StartRow + @Count) END ELSE BEGIN @@ -9396,32 +9669,32 @@ BEGIN BEGIN IF (@SortColumn = 'DisplayName') BEGIN - SELECT * FROM #TempLyncUsers + SELECT * FROM #TempLyncUsers WHERE ID >@RetCount - @Count - @StartRow AND ID <= @RetCount- @StartRow ORDER BY DisplayName DESC END IF (@SortColumn = 'UserPrincipalName') BEGIN - SELECT * FROM #TempLyncUsers + SELECT * FROM #TempLyncUsers WHERE ID >@RetCount - @Count - @StartRow AND ID <= @RetCount- @StartRow ORDER BY UserPrincipalName DESC END IF (@SortColumn = 'SipAddress') BEGIN - SELECT * FROM #TempLyncUsers + SELECT * FROM #TempLyncUsers WHERE ID >@RetCount - @Count - @StartRow AND ID <= @RetCount- @StartRow ORDER BY SipAddress DESC END IF (@SortColumn = 'LyncUserPlanName') BEGIN - SELECT * FROM #TempLyncUsers + SELECT * FROM #TempLyncUsers WHERE ID >@RetCount - @Count - @StartRow AND ID <= @RetCount- @StartRow ORDER BY LyncUserPlanName DESC END END ELSE BEGIN - SELECT * FROM #TempLyncUsers + SELECT * FROM #TempLyncUsers WHERE ID >@RetCount - @Count - @StartRow AND ID <= @RetCount- @StartRow ORDER BY UserPrincipalName DESC - END + END END DROP TABLE #TempLyncUsers @@ -9488,10 +9761,10 @@ WHERE ' + @condition print @sql -exec sp_executesql @sql, N'@ItemID int, @IncludeMailboxes bit', +exec sp_executesql @sql, N'@ItemID int, @IncludeMailboxes bit', @ItemID, @IncludeMailboxes -RETURN +RETURN GO @@ -9506,7 +9779,7 @@ CREATE TABLE [dbo].[RDSServerSettings]( [PropertyValue] [ntext] COLLATE Latin1_General_CI_AS NULL, [ApplyUsers] [BIT] NOT NULL, [ApplyAdministrators] [BIT] NOT NULL - CONSTRAINT [PK_RDSServerSettings] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_RDSServerSettings] PRIMARY KEY CLUSTERED ( [RdsServerId] ASC, [SettingsName] ASC, @@ -9528,7 +9801,7 @@ CREATE PROCEDURE GetRDSServerSettings AS SELECT RDSServerId, PropertyName, PropertyValue, ApplyUsers, ApplyAdministrators FROM RDSServerSettings - WHERE RDSServerId = @ServerId AND SettingsName = @SettingsName + WHERE RDSServerId = @ServerId AND SettingsName = @SettingsName GO IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteRDSServerSettings') @@ -9568,7 +9841,7 @@ INSERT INTO RDSServerSettings ApplyUsers, ApplyAdministrators, PropertyName, - PropertyValue + PropertyValue ) SELECT @ServerId, @@ -9577,7 +9850,7 @@ SELECT ApplyAdministrators, PropertyName, PropertyValue -FROM OPENXML(@idoc, '/properties/property',1) WITH +FROM OPENXML(@idoc, '/properties/property',1) WITH ( PropertyName nvarchar(50) '@name', PropertyValue ntext '@value', @@ -9589,7 +9862,7 @@ exec sp_xml_removedocument @idoc COMMIT TRAN -RETURN +RETURN GO @@ -9608,24 +9881,27 @@ BEGIN DELETE FROM Providers WHERE GroupID = @group_id DELETE FROM Quotas WHERE GroupID = @group_id DELETE FROM VirtualGroups WHERE GroupID = @group_id - DELETE FROM ServiceItemTypes WHERE GroupID = @group_id + DELETE FROM ServiceItemTypes WHERE GroupID = @group_id DELETE FROM ResourceGroups WHERE GroupID = @group_id END GO IF NOT EXISTS (SELECT * FROM [dbo].[ServiceItemTypes] WHERE DisplayName = 'SharePointFoundationSiteCollection') -BEGIN +BEGIN DECLARE @group_id AS INT DECLARE @item_type_id INT SELECT TOP 1 @item_type_id = ItemTypeId + 1 FROM [dbo].[ServiceItemTypes] ORDER BY ItemTypeId DESC UPDATE [dbo].[ServiceItemTypes] SET DisplayName = 'SharePointFoundationSiteCollection' WHERE DisplayName = 'SharePointSiteCollection' - SELECT @group_id = GroupId FROM [dbo].[ResourceGroups] WHERE GroupName = 'Sharepoint Server' + SELECT @group_id = GroupId FROM [dbo].[ResourceGroups] WHERE GroupName = 'Sharepoint Server' - INSERT INTO [dbo].[ServiceItemTypes] (ItemTypeId, GroupId, DisplayName, TypeName, TypeOrder, CalculateDiskSpace, CalculateBandwidth, Suspendable, Disposable, Searchable, Importable, Backupable) + INSERT INTO [dbo].[ServiceItemTypes] (ItemTypeId, GroupId, DisplayName, TypeName, TypeOrder, CalculateDiskSpace, CalculateBandwidth, Suspendable, Disposable, Searchable, Importable, Backupable) (SELECT TOP 1 @item_type_id, @group_id, 'SharePointSiteCollection', TypeName, 100, CalculateDiskSpace, CalculateBandwidth, Suspendable, Disposable, Searchable, Importable, Backupable FROM [dbo].[ServiceItemTypes] WHERE DisplayName = 'SharePointFoundationSiteCollection') END + + + GO UPDATE [dbo].[Quotas] SET GroupID = 45 WHERE QuotaName = 'EnterpriseStorage.DriveMaps' @@ -9671,7 +9947,7 @@ END GO - + ALTER PROCEDURE [dbo].[AddServiceItem] ( @ActorID int, @@ -9710,9 +9986,9 @@ BEGIN BEGIN INSERT INTO ServiceItems (PackageID, ItemTypeID,ServiceID,ItemName,CreatedDate) VALUES(1, @ItemTypeID, @ServiceID, 'System', @CreatedDate) - + DECLARE @TempItemID int - + SET @TempItemID = SCOPE_IDENTITY() INSERT INTO ExchangeOrganizations (ItemID, OrganizationID) VALUES(@TempItemID, 'System') @@ -9720,7 +9996,7 @@ BEGIN END - + -- add item INSERT INTO ServiceItems ( @@ -9759,7 +10035,7 @@ SELECT @ItemID, PropertyName, PropertyValue -FROM OPENXML(@idoc, '/properties/property',1) WITH +FROM OPENXML(@idoc, '/properties/property',1) WITH ( PropertyName nvarchar(50) '@name', PropertyValue nvarchar(3000) '@value' @@ -9772,9 +10048,9 @@ INSERT INTO ServiceItemProperties PropertyName, PropertyValue ) -SELECT - ItemID, - PropertyName, +SELECT + ItemID, + PropertyName, PropertyValue FROM #TempTable @@ -9784,7 +10060,7 @@ DROP TABLE #TempTable exec sp_xml_removedocument @idoc COMMIT TRAN -RETURN +RETURN GO UPDATE [dbo].[ServiceItemTypes] SET TypeName ='WebsitePanel.Providers.SharePoint.SharePointEnterpriseSiteCollection, WebsitePanel.Providers.Base' WHERE DisplayName = 'SharePointEnterpriseSiteCollection' @@ -9830,7 +10106,7 @@ Set @UserPasswordExpirationLetterHtmlBody = N' + + Password request notification + + + +

+
+ +
+

Password request notification

+ + +

+Hello #user.FirstName#, +

+
+ +

+Your account have been created. In order to create a password for your account, please follow next link: +

+ +#passwordResetLink# + +

+If you have any questions regarding your hosting account, feel free to contact our support department at any time. +

+ +

+Best regards +

+
+'; + +IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'OrganizationUserPasswordRequestLetter' AND [PropertyName]= N'HtmlBody' ) +BEGIN +INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'OrganizationUserPasswordRequestLetter', N'HtmlBody', @OrganizationUserPasswordRequestLetterHtmlBody) +END +GO + + +IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'OrganizationUserPasswordRequestLetter' AND [PropertyName]= N'Priority' ) +BEGIN +INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'OrganizationUserPasswordRequestLetter', N'Priority', N'Normal') +END +GO +IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'OrganizationUserPasswordRequestLetter' AND [PropertyName]= N'Subject' ) +BEGIN +INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'OrganizationUserPasswordRequestLetter', N'Subject', N'Password request notification') +END +GO +IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'OrganizationUserPasswordRequestLetter' AND [PropertyName]= N'LogoUrl' ) +BEGIN +INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'OrganizationUserPasswordRequestLetter', N'LogoUrl', N'') +END +GO + + +DECLARE @OrganizationUserPasswordRequestLetterTextBody nvarchar(2500) + +Set @OrganizationUserPasswordRequestLetterTextBody = N'========================================= + Password request notification +========================================= + + +Hello #user.FirstName#, + + +Your account have been created. In order to create a password for your account, please follow next link: + +#passwordResetLink# + +If you have any questions regarding your hosting account, feel free to contact our support department at any time. + +Best regards' + +IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'OrganizationUserPasswordRequestLetter' AND [PropertyName]= N'TextBody' ) +BEGIN +INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'OrganizationUserPasswordRequestLetter', N'TextBody', @OrganizationUserPasswordRequestLetterTextBody) +END +GO + +DECLARE @OrganizationUserPasswordRequestLetterSMSBody nvarchar(2500) + +Set @OrganizationUserPasswordRequestLetterSMSBody = N' +User have been created. Password request url: +#passwordResetLink#' + +IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'OrganizationUserPasswordRequestLetter' AND [PropertyName]= N'SMSBody' ) +BEGIN +INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'OrganizationUserPasswordRequestLetter', N'SMSBody', @OrganizationUserPasswordRequestLetterSMSBody) +END +GO + + + -- Exchange setup EMAIL TEMPLATE IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'ExchangeMailboxSetupLetter' AND [PropertyName]= N'From' ) BEGIN -INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'ExchangeMailboxSetupLetter', N'From', N'orders@virtuworks.com') +INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'ExchangeMailboxSetupLetter', N'From', N'') END GO @@ -10197,7 +10577,7 @@ Set @ExchangeMailboxSetupLetterHtmlBody = N' -VirtuWorks: Run Your Business In The Cloud + @@ -10231,11 +10611,11 @@ Set @ExchangeMailboxSetupLetterHtmlBody = N' -Visit VirtuWorks.com -Account Management -Control Panel -Support -Contact Us + + + + + @@ -10267,7 +10647,7 @@ Set @ExchangeMailboxSetupLetterHtmlBody = N' @@ -10306,38 +10686,38 @@ Set @ExchangeMailboxSetupLetterHtmlBody = N'https://mail.virtuworks.net/owa +

Outlook (Windows Clients)

- To configure Outlook 2013 to work with the VirtuWorks servers, please reference: + To configure Outlook 2013 to work with the servers, please reference:

- http://www.virtuworks.com/how-to-configure-my-outlook-2010-client-to-work-with-my-velum-hosted-exchange-account/ +

If you need to download and install the Outlook client:

- + - + - + - +
Outlook 2013 Client
Download URL:Outlook 2013 - 32bit
Outlook 2013 - 64bit
KEY:HPN4P-JKC89-VCCWD-24CD2-9P8H7
- +

ActiveSync, iPhone, iPad

@@ -10358,17 +10738,17 @@ Set @ExchangeMailboxSetupLetterHtmlBody = N'Control Panel.

+ Passwords can be changed at any time using Webmail or the Control Panel.

Control Panel

- If you need to change the details of your account, you can easily do this using Control Panel.

+ If you need to change the details of your account, you can easily do this using Control Panel.

Support

- You have 2 options, email help@virtuworks.com or use the web interface at http://www.virtuworks.com/support

- + You have 2 options, email or use the web interface at

+
@@ -10395,9 +10775,9 @@ Set @ExchangeMailboxSetupLetterHtmlBody = N' - - - + + +
Visit VirtuWorks.com
Learn more about the services VirtuWorks can provide to improve your business.
Privacy Policy
VirtuWorks follows strict guidelines in protecting your privacy. Learn about our Privacy Policy.
Contact Us
Questions? For more information, contact us.

Learn more about the services can provide to improve your business.
Privacy Policy
follows strict guidelines in protecting your privacy. Learn about our Privacy Policy.
Contact Us
Questions? For more information, contact us.
@@ -10436,7 +10816,7 @@ END GO IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'ExchangeMailboxSetupLetter' AND [PropertyName]= N'Subject' ) BEGIN -INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'ExchangeMailboxSetupLetter', N'Subject', N'Virtuworks Hosted Exchange Mailbox Setup') +INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'ExchangeMailboxSetupLetter', N'Subject', N' Hosted Exchange Mailbox Setup') END GO @@ -10446,7 +10826,7 @@ DECLARE @ExchangeMailboxSetupLetterTextBody nvarchar(2500) Set @ExchangeMailboxSetupLetterTextBody = N' Hello #Account.DisplayName#, -Thanks for choosing VirtuWorks as your Exchange hosting provider. +Thanks for choosing as your Exchange hosting provider. User Accounts @@ -10472,22 +10852,21 @@ In order for us to accept mail for your domain, you will need to point your MX r Webmail (OWA, Outlook Web Access) ================================= -https://mail.virtuworks.net/owa + ================================= Outlook (Windows Clients) ================================= -To configure Outlook 2010 to work with VirtuWorks servers, please reference: +To configure Outlook 2010 to work with servers, please reference: + -https://portal.virtuworks.net/whmcs/knowledgebase.php?action=displayarticle&id=2 If you need to download and install the Outlook 2010 client: Outlook 2010 Download URL: -32 Bit - http://www.virtuworks.net/downloads/Outlook2010-32bit.zip -64 Bit - http://www.virtuworks.net/downloads/Outlook2010-64bit.zip -KEY: HXGFV-DY3HM-4W2BQ-3R7KQ-K8P49 + +KEY: ================================= ActiveSync, iPhone, iPad @@ -10502,21 +10881,21 @@ Your username: #SamUsername# Password Changes ================================= -Passwords can be changed at any time using Webmail or the Control Panel (https://controlpanel.virtuworks.net). +Passwords can be changed at any time using Webmail or the Control Panel ================================= Control Panel ================================= -If you need to change the details of your account, you can easily do this using the Control Panel (https://controlpanel.virtuworks.net). +If you need to change the details of your account, you can easily do this using the Control Panel ================================= Support ================================= -You have 2 options, email help@virtuworks.com or use the web interface at http://www.virtuworks.com/contact/' +You have 2 options, email or use the web interface at ' IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'ExchangeMailboxSetupLetter' AND [PropertyName]= N'TextBody' ) BEGIN @@ -10633,7 +11012,7 @@ CREATE PROCEDURE [dbo].[GetAccessTokenByAccessToken] @TokenType INT ) AS -SELECT +SELECT ID , AccessTokenGuid, ExpirationDate, @@ -10641,7 +11020,7 @@ SELECT ItemId, TokenType, SmsResponse - FROM AccessTokens + FROM AccessTokens Where AccessTokenGuid = @AccessToken AND ExpirationDate > getdate() AND TokenType = @TokenType GO @@ -10696,19 +11075,19 @@ CREATE PROCEDURE [dbo].[GetExchangeOrganizationSettings] @SettingsName nvarchar(100) ) AS -SELECT +SELECT ItemId, SettingsName, Xml -FROM ExchangeOrganizationSettings +FROM ExchangeOrganizationSettings Where ItemId = @ItemId AND SettingsName = @SettingsName GO -- Exchange Account password column removed -if exists(select * from sys.columns +if exists(select * from sys.columns where Name = N'AccountPassword' and Object_ID = Object_ID(N'ExchangeAccounts')) begin ALTER TABLE [ExchangeAccounts] DROP COLUMN [AccountPassword] @@ -10717,7 +11096,7 @@ end IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddExchangeAccount') DROP PROCEDURE AddExchangeAccount GO -CREATE PROCEDURE [dbo].[AddExchangeAccount] +CREATE PROCEDURE [dbo].[AddExchangeAccount] ( @AccountID int OUTPUT, @ItemID int, @@ -10820,7 +11199,7 @@ SELECT FROM ExchangeAccounts WHERE AccountID = @AccountID -RETURN +RETURN GO @@ -10829,6 +11208,963 @@ GO SET QUOTED_IDENTIFIER OFF GO +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetSearchTableByColumns') +DROP PROCEDURE GetSearchTableByColumns +GO +CREATE PROCEDURE [dbo].[GetSearchTableByColumns] +( + @PagedStored nvarchar(50) = '', + @FilterValue nvarchar(50) = '', + @MaximumRows int, + + @Recursive bit, + @PoolID int, + @ServerID int, + @ActorID int, + @StatusID int, + @PlanID int, + @OrgID int, + @ItemTypeName nvarchar(200), + @GroupName nvarchar(100) = NULL, + @PackageID int, + @VPSType nvarchar(100) = NULL, + @UserID int, + @RoleID int, + @FilterColumns nvarchar(200) +) +AS + +DECLARE @VPSTypeID int +IF @VPSType <> '' AND @VPSType IS NOT NULL +BEGIN + SET @VPSTypeID = CASE @VPSType + WHEN 'VPS' THEN 33 + WHEN 'VPS2012' THEN 41 + WHEN 'VPSForPC' THEN 35 + ELSE 33 + END +END + +DECLARE @sql nvarchar(3000) +SET @sql = CASE @PagedStored +WHEN 'Domains' THEN ' + DECLARE @Domains TABLE + ( + DomainID int, + DomainName nvarchar(100), + Username nvarchar(100), + FullName nvarchar(100), + Email nvarchar(100) + ) + INSERT INTO @Domains (DomainID, DomainName, Username, FullName, Email) + SELECT + D.DomainID, + D.DomainName, + U.Username, + U.FullName, + U.Email + FROM Domains AS D + INNER JOIN Packages AS P ON D.PackageID = P.PackageID + INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID + LEFT OUTER JOIN ServiceItems AS Z ON D.ZoneItemID = Z.ItemID + LEFT OUTER JOIN Services AS S ON Z.ServiceID = S.ServiceID + LEFT OUTER JOIN Servers AS SRV ON S.ServerID = SRV.ServerID + WHERE + (D.IsInstantAlias = 0 AND D.IsDomainPointer = 0) + AND ((@Recursive = 0 AND D.PackageID = @PackageID) + OR (@Recursive = 1 AND dbo.CheckPackageParent(@PackageID, D.PackageID) = 1)) + AND (@ServerID = 0 OR (@ServerID > 0 AND S.ServerID = @ServerID)) + ' +WHEN 'IPAddresses' THEN ' + DECLARE @IPAddresses TABLE + ( + AddressesID int, + ExternalIP nvarchar(100), + InternalIP nvarchar(100), + DefaultGateway nvarchar(100), + ServerName nvarchar(100), + UserName nvarchar(100), + ItemName nvarchar(100) + ) + DECLARE @IsAdmin bit + SET @IsAdmin = dbo.CheckIsUserAdmin(@ActorID) + INSERT INTO @IPAddresses (AddressesID, ExternalIP, InternalIP, DefaultGateway, ServerName, UserName, ItemName) + SELECT + IP.AddressID, + IP.ExternalIP, + IP.InternalIP, + IP.DefaultGateway, + S.ServerName, + U.UserName, + SI.ItemName + FROM dbo.IPAddresses AS IP + LEFT JOIN Servers AS S ON IP.ServerID = S.ServerID + LEFT JOIN PackageIPAddresses AS PA ON IP.AddressID = PA.AddressID + LEFT JOIN ServiceItems SI ON PA.ItemId = SI.ItemID + LEFT JOIN dbo.Packages P ON PA.PackageID = P.PackageID + LEFT JOIN dbo.Users U ON P.UserID = U.UserID + WHERE + @IsAdmin = 1 + AND (@PoolID = 0 OR @PoolID <> 0 AND IP.PoolID = @PoolID) + AND (@ServerID = 0 OR @ServerID <> 0 AND IP.ServerID = @ServerID) + ' +WHEN 'Schedules' THEN ' + DECLARE @Schedules TABLE + ( + ScheduleID int, + ScheduleName nvarchar(100), + Username nvarchar(100), + FullName nvarchar(100), + Email nvarchar(100) + ) + INSERT INTO @Schedules (ScheduleID, ScheduleName, Username, FullName, Email) + SELECT + S.ScheduleID, + S.ScheduleName, + U.Username, + U.FullName, + U.Email + FROM Schedule AS S + INNER JOIN Packages AS P ON S.PackageID = P.PackageID + INNER JOIN PackagesTree(@PackageID, @Recursive) AS PT ON S.PackageID = PT.PackageID + INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID + ' +WHEN 'NestedPackages' THEN ' + DECLARE @NestedPackages TABLE + ( + PackageID int, + PackageName nvarchar(100), + Username nvarchar(100), + FullName nvarchar(100), + Email nvarchar(100) + ) + INSERT INTO @NestedPackages (PackageID, PackageName, Username, FullName, Email) + SELECT + P.PackageID, + P.PackageName, + U.Username, + U.FullName, + U.Email + FROM Packages AS P + INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID + INNER JOIN Servers AS S ON P.ServerID = S.ServerID + INNER JOIN HostingPlans AS HP ON P.PlanID = HP.PlanID + WHERE + P.ParentPackageID = @PackageID + AND ((@StatusID = 0) OR (@StatusID > 0 AND P.StatusID = @StatusID)) + AND ((@PlanID = 0) OR (@PlanID > 0 AND P.PlanID = @PlanID)) + AND ((@ServerID = 0) OR (@ServerID > 0 AND P.ServerID = @ServerID)) + ' +WHEN 'PackageIPAddresses' THEN ' + DECLARE @PackageIPAddresses TABLE + ( + PackageAddressID int, + ExternalIP nvarchar(100), + InternalIP nvarchar(100), + DefaultGateway nvarchar(100), + ItemName nvarchar(100), + UserName nvarchar(100) + ) + INSERT INTO @PackageIPAddresses (PackageAddressID, ExternalIP, InternalIP, DefaultGateway, ItemName, UserName) + SELECT + PA.PackageAddressID, + IP.ExternalIP, + IP.InternalIP, + IP.DefaultGateway, + SI.ItemName, + U.UserName + FROM dbo.PackageIPAddresses PA + INNER JOIN dbo.IPAddresses AS IP ON PA.AddressID = IP.AddressID + INNER JOIN dbo.Packages P ON PA.PackageID = P.PackageID + INNER JOIN dbo.Users U ON U.UserID = P.UserID + LEFT JOIN ServiceItems SI ON PA.ItemId = SI.ItemID + WHERE + ((@Recursive = 0 AND PA.PackageID = @PackageID) + OR (@Recursive = 1 AND dbo.CheckPackageParent(@PackageID, PA.PackageID) = 1)) + AND (@PoolID = 0 OR @PoolID <> 0 AND IP.PoolID = @PoolID) + AND (@OrgID = 0 OR @OrgID <> 0 AND PA.OrgID = @OrgID) + ' +WHEN 'ServiceItems' THEN ' + IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0 + RAISERROR(''You are not allowed to access this package'', 16, 1) + DECLARE @ServiceItems TABLE + ( + ItemID int, + ItemName nvarchar(100), + Username nvarchar(100), + FullName nvarchar(100), + Email nvarchar(100) + ) + DECLARE @GroupID int + SELECT @GroupID = GroupID FROM ResourceGroups + WHERE GroupName = @GroupName + DECLARE @ItemTypeID int + SELECT @ItemTypeID = ItemTypeID FROM ServiceItemTypes + WHERE TypeName = @ItemTypeName + AND ((@GroupID IS NULL) OR (@GroupID IS NOT NULL AND GroupID = @GroupID)) + INSERT INTO @ServiceItems (ItemID, ItemName, Username, FullName, Email) + SELECT + SI.ItemID, + SI.ItemName, + U.Username, + U.FirstName, + U.Email + FROM Packages AS P + INNER JOIN ServiceItems AS SI ON P.PackageID = SI.PackageID + INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID + INNER JOIN ServiceItemTypes AS IT ON SI.ItemTypeID = IT.ItemTypeID + INNER JOIN Services AS S ON SI.ServiceID = S.ServiceID + INNER JOIN Servers AS SRV ON S.ServerID = SRV.ServerID + WHERE + SI.ItemTypeID = @ItemTypeID + AND ((@Recursive = 0 AND P.PackageID = @PackageID) + OR (@Recursive = 1 AND dbo.CheckPackageParent(@PackageID, P.PackageID) = 1)) + AND ((@GroupID IS NULL) OR (@GroupID IS NOT NULL AND IT.GroupID = @GroupID)) + AND (@ServerID = 0 OR (@ServerID > 0 AND S.ServerID = @ServerID)) + ' +WHEN 'Users' THEN ' + DECLARE @Users TABLE + ( + UserID int, + Username nvarchar(100), + FullName nvarchar(100), + Email nvarchar(100), + CompanyName nvarchar(100) + ) + DECLARE @HasUserRights bit + SET @HasUserRights = dbo.CheckActorUserRights(@ActorID, @UserID) + INSERT INTO @Users (UserID, Username, FullName, Email, CompanyName) + SELECT + U.UserID, + U.Username, + U.FullName, + U.Email, + U.CompanyName + FROM UsersDetailed AS U + WHERE + U.UserID <> @UserID AND U.IsPeer = 0 AND + ( + (@Recursive = 0 AND OwnerID = @UserID) OR + (@Recursive = 1 AND dbo.CheckUserParent(@UserID, U.UserID) = 1) + ) + AND ((@StatusID = 0) OR (@StatusID > 0 AND U.StatusID = @StatusID)) + AND ((@RoleID = 0) OR (@RoleID > 0 AND U.RoleID = @RoleID)) + AND @HasUserRights = 1 + ' +WHEN 'VirtualMachines' THEN ' + IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0 + RAISERROR(''You are not allowed to access this package'', 16, 1) + DECLARE @VirtualMachines TABLE + ( + ItemID int, + ItemName nvarchar(100), + Username nvarchar(100), + ExternalIP nvarchar(100), + IPAddress nvarchar(100) + ) + INSERT INTO @VirtualMachines (ItemID, ItemName, Username, ExternalIP, IPAddress) + SELECT + SI.ItemID, + SI.ItemName, + U.Username, + EIP.ExternalIP, + PIP.IPAddress + FROM Packages AS P + INNER JOIN ServiceItems AS SI ON P.PackageID = SI.PackageID + INNER JOIN Users AS U ON P.UserID = U.UserID + LEFT OUTER JOIN ( + SELECT PIP.ItemID, IP.ExternalIP FROM PackageIPAddresses AS PIP + INNER JOIN IPAddresses AS IP ON PIP.AddressID = IP.AddressID + WHERE PIP.IsPrimary = 1 AND IP.PoolID = 3 -- external IP addresses + ) AS EIP ON SI.ItemID = EIP.ItemID + LEFT OUTER JOIN PrivateIPAddresses AS PIP ON PIP.ItemID = SI.ItemID AND PIP.IsPrimary = 1 + WHERE + SI.ItemTypeID = ' + CAST(@VPSTypeID AS nvarchar(12)) + ' + AND ((@Recursive = 0 AND P.PackageID = @PackageID) + OR (@Recursive = 1 AND dbo.CheckPackageParent(@PackageID, P.PackageID) = 1)) + ' +WHEN 'PackagePrivateIPAddresses' THEN ' + DECLARE @PackagePrivateIPAddresses TABLE + ( + PrivateAddressID int, + IPAddress nvarchar(100), + ItemName nvarchar(100) + ) + INSERT INTO @PackagePrivateIPAddresses (PrivateAddressID, IPAddress, ItemName) + SELECT + PA.PrivateAddressID, + PA.IPAddress, + SI.ItemName + FROM dbo.PrivateIPAddresses AS PA + INNER JOIN dbo.ServiceItems AS SI ON PA.ItemID = SI.ItemID + WHERE SI.PackageID = @PackageID + ' +ELSE '' +END + 'SELECT TOP ' + CAST(@MaximumRows AS nvarchar(12)) + ' MIN(ItemID) as [ItemID], TextSearch, ColumnType, COUNT(*) AS [Count]' + CASE @PagedStored +WHEN 'Domains' THEN ' + FROM( + SELECT D0.DomainID AS ItemID, D0.DomainName AS TextSearch, ''DomainName'' AS ColumnType + FROM @Domains AS D0 + UNION + SELECT D1.DomainID AS ItemID, D1.Username AS TextSearch, ''Username'' AS ColumnType + FROM @Domains AS D1 + UNION + SELECT D2.DomainID as ItemID, D2.FullName AS TextSearch, ''FullName'' AS ColumnType + FROM @Domains AS D2 + UNION + SELECT D3.DomainID as ItemID, D3.Email AS TextSearch, ''Email'' AS ColumnType + FROM @Domains AS D3) AS D' +WHEN 'IPAddresses' THEN ' + FROM( + SELECT D0.AddressesID AS ItemID, D0.ExternalIP AS TextSearch, ''ExternalIP'' AS ColumnType + FROM @IPAddresses AS D0 + UNION + SELECT D1.AddressesID AS ItemID, D1.InternalIP AS TextSearch, ''InternalIP'' AS ColumnType + FROM @IPAddresses AS D1 + UNION + SELECT D2.AddressesID AS ItemID, D2.DefaultGateway AS TextSearch, ''DefaultGateway'' AS ColumnType + FROM @IPAddresses AS D2 + UNION + SELECT D3.AddressesID AS ItemID, D3.ServerName AS TextSearch, ''ServerName'' AS ColumnType + FROM @IPAddresses AS D3 + UNION + SELECT D4.AddressesID AS ItemID, D4.UserName AS TextSearch, ''UserName'' AS ColumnType + FROM @IPAddresses AS D4 + UNION + SELECT D6.AddressesID AS ItemID, D6.ItemName AS TextSearch, ''ItemName'' AS ColumnType + FROM @IPAddresses AS D6) AS D' +WHEN 'Schedules' THEN ' + FROM( + SELECT D0.ScheduleID AS ItemID, D0.ScheduleName AS TextSearch, ''ScheduleName'' AS ColumnType + FROM @Schedules AS D0 + UNION + SELECT D1.ScheduleID AS ItemID, D1.Username AS TextSearch, ''Username'' AS ColumnType + FROM @Schedules AS D1 + UNION + SELECT D2.ScheduleID AS ItemID, D2.FullName AS TextSearch, ''FullName'' AS ColumnType + FROM @Schedules AS D2 + UNION + SELECT D3.ScheduleID AS ItemID, D3.Email AS TextSearch, ''Email'' AS ColumnType + FROM @Schedules AS D3) AS D' +WHEN 'NestedPackages' THEN ' + FROM( + SELECT D0.PackageID AS ItemID, D0.PackageName AS TextSearch, ''PackageName'' AS ColumnType + FROM @NestedPackages AS D0 + UNION + SELECT D1.PackageID AS ItemID, D1.Username AS TextSearch, ''Username'' AS ColumnType + FROM @NestedPackages AS D1 + UNION + SELECT D2.PackageID as ItemID, D2.FullName AS TextSearch, ''FullName'' AS ColumnType + FROM @NestedPackages AS D2 + UNION + SELECT D3.PackageID as ItemID, D3.Email AS TextSearch, ''Email'' AS ColumnType + FROM @NestedPackages AS D3) AS D' +WHEN 'PackageIPAddresses' THEN ' + FROM( + SELECT D0.PackageAddressID AS ItemID, D0.ExternalIP AS TextSearch, ''ExternalIP'' AS ColumnType + FROM @PackageIPAddresses AS D0 + UNION + SELECT D1.PackageAddressID AS ItemID, D1.InternalIP AS TextSearch, ''InternalIP'' AS ColumnType + FROM @PackageIPAddresses AS D1 + UNION + SELECT D2.PackageAddressID as ItemID, D2.DefaultGateway AS TextSearch, ''DefaultGateway'' AS ColumnType + FROM @PackageIPAddresses AS D2 + UNION + SELECT D3.PackageAddressID as ItemID, D3.ItemName AS TextSearch, ''ItemName'' AS ColumnType + FROM @PackageIPAddresses AS D3 + UNION + SELECT D5.PackageAddressID as ItemID, D5.UserName AS TextSearch, ''UserName'' AS ColumnType + FROM @PackageIPAddresses AS D5) AS D' +WHEN 'ServiceItems' THEN ' + FROM( + SELECT D0.ItemID AS ItemID, D0.ItemName AS TextSearch, ''ItemName'' AS ColumnType + FROM @ServiceItems AS D0 + UNION + SELECT D1.ItemID AS ItemID, D1.Username AS TextSearch, ''Username'' AS ColumnType + FROM @ServiceItems AS D1 + UNION + SELECT D2.ItemID as ItemID, D2.FullName AS TextSearch, ''FullName'' AS ColumnType + FROM @ServiceItems AS D2 + UNION + SELECT D3.ItemID as ItemID, D3.Email AS TextSearch, ''Email'' AS ColumnType + FROM @ServiceItems AS D3) AS D' +WHEN 'Users' THEN ' + FROM( + SELECT D0.UserID AS ItemID, D0.Username AS TextSearch, ''Username'' AS ColumnType + FROM @Users AS D0 + UNION + SELECT D1.UserID AS ItemID, D1.FullName AS TextSearch, ''FullName'' AS ColumnType + FROM @Users AS D1 + UNION + SELECT D2.UserID as ItemID, D2.Email AS TextSearch, ''Email'' AS ColumnType + FROM @Users AS D2 + UNION + SELECT D3.UserID as ItemID, D3.CompanyName AS TextSearch, ''CompanyName'' AS ColumnType + FROM @Users AS D3) AS D' +WHEN 'VirtualMachines' THEN ' + FROM( + SELECT D0.ItemID AS ItemID, D0.ItemName AS TextSearch, ''ItemName'' AS ColumnType + FROM @VirtualMachines AS D0 + UNION + SELECT D1.ItemID AS ItemID, D1.ExternalIP AS TextSearch, ''ExternalIP'' AS ColumnType + FROM @VirtualMachines AS D1 + UNION + SELECT D2.ItemID as ItemID, D2.Username AS TextSearch, ''Username'' AS ColumnType + FROM @VirtualMachines AS D2 + UNION + SELECT D3.ItemID as ItemID, D3.IPAddress AS TextSearch, ''IPAddress'' AS ColumnType + FROM @VirtualMachines AS D3) AS D' +WHEN 'PackagePrivateIPAddresses' THEN ' + FROM( + SELECT D0.PrivateAddressID AS ItemID, D0.IPAddress AS TextSearch, ''IPAddress'' AS ColumnType + FROM @PackagePrivateIPAddresses AS D0 + UNION + SELECT D1.PrivateAddressID AS ItemID, D1.ItemName AS TextSearch, ''ItemName'' AS ColumnType + FROM @PackagePrivateIPAddresses AS D1) AS D' +END + ' + WHERE (TextSearch LIKE @FilterValue)' +IF @FilterColumns <> '' AND @FilterColumns IS NOT NULL + SET @sql = @sql + ' + AND (ColumnType IN (' + @FilterColumns + '))' +SET @sql = @sql + ' + GROUP BY TextSearch, ColumnType + ORDER BY TextSearch' + +exec sp_executesql @sql, N'@FilterValue nvarchar(50), @Recursive bit, @PoolID int, @ServerID int, @ActorID int, @StatusID int, @PlanID int, @OrgID int, @ItemTypeName nvarchar(200), @GroupName nvarchar(100), @PackageID int, @VPSTypeID int, @UserID int, @RoleID int', +@FilterValue, @Recursive, @PoolID, @ServerID, @ActorID, @StatusID, @PlanID, @OrgID, @ItemTypeName, @GroupName, @PackageID, @VPSTypeID, @UserID, @RoleID + +RETURN +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetPackagePrivateIPAddressesPaged') +DROP PROCEDURE GetPackagePrivateIPAddressesPaged +GO +CREATE PROCEDURE [dbo].[GetPackagePrivateIPAddressesPaged] + @PackageID int, + @FilterColumn nvarchar(50) = '', + @FilterValue nvarchar(50) = '', + @SortColumn nvarchar(50), + @StartRow int, + @MaximumRows int +AS +BEGIN + + +-- start +DECLARE @condition nvarchar(700) +SET @condition = ' +SI.PackageID = @PackageID +' + +IF @FilterValue <> '' AND @FilterValue IS NOT NULL +BEGIN + IF @FilterColumn <> '' AND @FilterColumn IS NOT NULL + SET @condition = @condition + ' AND ' + @FilterColumn + ' LIKE ''' + @FilterValue + '''' + ELSE + SET @condition = @condition + ' + AND (IPAddress LIKE ''' + @FilterValue + ''' + OR ItemName LIKE ''' + @FilterValue + ''')' +END + +IF @SortColumn IS NULL OR @SortColumn = '' +SET @SortColumn = 'PA.IPAddress ASC' + +DECLARE @sql nvarchar(3500) + +set @sql = ' +SELECT COUNT(PA.PrivateAddressID) +FROM dbo.PrivateIPAddresses AS PA +INNER JOIN dbo.ServiceItems AS SI ON PA.ItemID = SI.ItemID +WHERE ' + @condition + ' + +DECLARE @Addresses AS TABLE +( + PrivateAddressID int +); + +WITH TempItems AS ( + SELECT ROW_NUMBER() OVER (ORDER BY ' + @SortColumn + ') as Row, + PA.PrivateAddressID + FROM dbo.PrivateIPAddresses AS PA + INNER JOIN dbo.ServiceItems AS SI ON PA.ItemID = SI.ItemID + WHERE ' + @condition + ' +) + +INSERT INTO @Addresses +SELECT PrivateAddressID FROM TempItems +WHERE TempItems.Row BETWEEN @StartRow + 1 and @StartRow + @MaximumRows + +SELECT + PA.PrivateAddressID, + PA.IPAddress, + PA.ItemID, + SI.ItemName, + PA.IsPrimary +FROM @Addresses AS TA +INNER JOIN dbo.PrivateIPAddresses AS PA ON TA.PrivateAddressID = PA.PrivateAddressID +INNER JOIN dbo.ServiceItems AS SI ON PA.ItemID = SI.ItemID +' + +print @sql + +exec sp_executesql @sql, N'@PackageID int, @StartRow int, @MaximumRows int', +@PackageID, @StartRow, @MaximumRows + +END +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetNestedPackagesPaged') +DROP PROCEDURE GetNestedPackagesPaged +GO +CREATE PROCEDURE [dbo].[GetNestedPackagesPaged] +( + @ActorID int, + @PackageID int, + @FilterColumn nvarchar(50) = '', + @FilterValue nvarchar(50) = '', + @StatusID int, + @PlanID int, + @ServerID int, + @SortColumn nvarchar(50), + @StartRow int, + @MaximumRows int +) +AS + +-- build query and run it to the temporary table +DECLARE @sql nvarchar(2000) + +SET @sql = ' +IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0 +RAISERROR(''You are not allowed to access this package'', 16, 1) + +DECLARE @EndRow int +SET @EndRow = @StartRow + @MaximumRows +DECLARE @Packages TABLE +( + ItemPosition int IDENTITY(1,1), + PackageID int +) +INSERT INTO @Packages (PackageID) +SELECT + P.PackageID +FROM Packages AS P +INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID +INNER JOIN Servers AS S ON P.ServerID = S.ServerID +INNER JOIN HostingPlans AS HP ON P.PlanID = HP.PlanID +WHERE + P.ParentPackageID = @PackageID + AND ((@StatusID = 0) OR (@StatusID > 0 AND P.StatusID = @StatusID)) + AND ((@PlanID = 0) OR (@PlanID > 0 AND P.PlanID = @PlanID)) + AND ((@ServerID = 0) OR (@ServerID > 0 AND P.ServerID = @ServerID)) ' + +IF @FilterValue <> '' +BEGIN + IF @FilterColumn <> '' + SET @sql = @sql + ' AND ' + @FilterColumn + ' LIKE @FilterValue ' + ELSE + SET @sql = @sql + ' + AND (Username LIKE @FilterValue + OR FullName LIKE @FilterValue + OR Email LIKE @FilterValue) ' +END + +IF @SortColumn <> '' AND @SortColumn IS NOT NULL +SET @sql = @sql + ' ORDER BY ' + @SortColumn + ' ' + +SET @sql = @sql + ' SELECT COUNT(PackageID) FROM @Packages; +SELECT + P.PackageID, + P.PackageName, + P.StatusID, + P.PurchaseDate, + + dbo.GetItemComments(P.PackageID, ''PACKAGE'', @ActorID) AS Comments, + + -- server + P.ServerID, + ISNULL(S.ServerName, ''None'') AS ServerName, + ISNULL(S.Comments, '''') AS ServerComments, + ISNULL(S.VirtualServer, 1) AS VirtualServer, + + -- hosting plan + P.PlanID, + HP.PlanName, + + -- user + P.UserID, + U.Username, + U.FirstName, + U.LastName, + U.FullName, + U.RoleID, + U.Email +FROM @Packages AS TP +INNER JOIN Packages AS P ON TP.PackageID = P.PackageID +INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID +INNER JOIN Servers AS S ON P.ServerID = S.ServerID +INNER JOIN HostingPlans AS HP ON P.PlanID = HP.PlanID +WHERE TP.ItemPosition BETWEEN @StartRow AND @EndRow' + +exec sp_executesql @sql, N'@StartRow int, @MaximumRows int, @PackageID int, @FilterValue nvarchar(50), @ActorID int, @StatusID int, @PlanID int, @ServerID int', +@StartRow, @MaximumRows, @PackageID, @FilterValue, @ActorID, @StatusID, @PlanID, @ServerID + + +RETURN +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetUsersPaged') +DROP PROCEDURE GetUsersPaged +GO +CREATE PROCEDURE [dbo].[GetUsersPaged] +( + @ActorID int, + @UserID int, + @FilterColumn nvarchar(50) = '', + @FilterValue nvarchar(50) = '', + @StatusID int, + @RoleID int, + @SortColumn nvarchar(50), + @StartRow int, + @MaximumRows int, + @Recursive bit +) +AS +-- build query and run it to the temporary table +DECLARE @sql nvarchar(2000) + +SET @sql = ' + +DECLARE @HasUserRights bit +SET @HasUserRights = dbo.CheckActorUserRights(@ActorID, @UserID) + +DECLARE @EndRow int +SET @EndRow = @StartRow + @MaximumRows +DECLARE @Users TABLE +( + ItemPosition int IDENTITY(0,1), + UserID int +) +INSERT INTO @Users (UserID) +SELECT + U.UserID +FROM UsersDetailed AS U +WHERE + U.UserID <> @UserID AND U.IsPeer = 0 AND + ( + (@Recursive = 0 AND OwnerID = @UserID) OR + (@Recursive = 1 AND dbo.CheckUserParent(@UserID, U.UserID) = 1) + ) + AND ((@StatusID = 0) OR (@StatusID > 0 AND U.StatusID = @StatusID)) + AND ((@RoleID = 0) OR (@RoleID > 0 AND U.RoleID = @RoleID)) + AND @HasUserRights = 1 ' + +IF @FilterValue <> '' +BEGIN + IF @FilterColumn <> '' + SET @sql = @sql + ' AND ' + @FilterColumn + ' LIKE @FilterValue ' + ELSE + SET @sql = @sql + ' + AND (Username LIKE @FilterValue + OR FullName LIKE @FilterValue + OR Email LIKE @FilterValue) ' +END + +IF @SortColumn <> '' AND @SortColumn IS NOT NULL +SET @sql = @sql + ' ORDER BY ' + @SortColumn + ' ' + +SET @sql = @sql + ' SELECT COUNT(UserID) FROM @Users; +SELECT + U.UserID, + U.RoleID, + U.StatusID, + U.SubscriberNumber, + U.LoginStatusId, + U.FailedLogins, + U.OwnerID, + U.Created, + U.Changed, + U.IsDemo, + dbo.GetItemComments(U.UserID, ''USER'', @ActorID) AS Comments, + U.IsPeer, + U.Username, + U.FirstName, + U.LastName, + U.Email, + U.FullName, + U.OwnerUsername, + U.OwnerFirstName, + U.OwnerLastName, + U.OwnerRoleID, + U.OwnerFullName, + U.OwnerEmail, + U.PackagesNumber, + U.CompanyName, + U.EcommerceEnabled +FROM @Users AS TU +INNER JOIN UsersDetailed AS U ON TU.UserID = U.UserID +WHERE TU.ItemPosition BETWEEN @StartRow AND @EndRow' + +exec sp_executesql @sql, N'@StartRow int, @MaximumRows int, @UserID int, @FilterValue nvarchar(50), @ActorID int, @Recursive bit, @StatusID int, @RoleID int', +@StartRow, @MaximumRows, @UserID, @FilterValue, @ActorID, @Recursive, @StatusID, @RoleID + + +RETURN +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetServiceItemsPaged') +DROP PROCEDURE GetServiceItemsPaged +GO +CREATE PROCEDURE [dbo].[GetServiceItemsPaged] +( + @ActorID int, + @PackageID int, + @ItemTypeName nvarchar(200), + @GroupName nvarchar(100) = NULL, + @ServerID int, + @Recursive bit, + @FilterColumn nvarchar(50) = '', + @FilterValue nvarchar(50) = '', + @SortColumn nvarchar(50), + @StartRow int, + @MaximumRows int +) +AS + + +-- check rights +IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0 +RAISERROR('You are not allowed to access this package', 16, 1) + +-- start +DECLARE @GroupID int +SELECT @GroupID = GroupID FROM ResourceGroups +WHERE GroupName = @GroupName + +DECLARE @ItemTypeID int +SELECT @ItemTypeID = ItemTypeID FROM ServiceItemTypes +WHERE TypeName = @ItemTypeName +AND ((@GroupID IS NULL) OR (@GroupID IS NOT NULL AND GroupID = @GroupID)) + +DECLARE @condition nvarchar(700) +SET @condition = 'SI.ItemTypeID = @ItemTypeID +AND ((@Recursive = 0 AND P.PackageID = @PackageID) + OR (@Recursive = 1 AND dbo.CheckPackageParent(@PackageID, P.PackageID) = 1)) +AND ((@GroupID IS NULL) OR (@GroupID IS NOT NULL AND IT.GroupID = @GroupID)) +AND (@ServerID = 0 OR (@ServerID > 0 AND S.ServerID = @ServerID)) +' + +IF @FilterValue <> '' AND @FilterValue IS NOT NULL +BEGIN + IF @FilterColumn <> '' AND @FilterColumn IS NOT NULL + SET @condition = @condition + ' AND ' + @FilterColumn + ' LIKE ''' + @FilterValue + '''' + ELSE + SET @condition = @condition + ' + AND (ItemName LIKE ''' + @FilterValue + ''' + OR Username ''' + @FilterValue + ''' + OR FullName ''' + @FilterValue + ''' + OR Email ''' + @FilterValue + ''')' +END + +IF @SortColumn IS NULL OR @SortColumn = '' +SET @SortColumn = 'SI.ItemName ASC' + +DECLARE @sql nvarchar(3500) + +set @sql = ' +SELECT COUNT(SI.ItemID) FROM Packages AS P +INNER JOIN ServiceItems AS SI ON P.PackageID = SI.PackageID +INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID +INNER JOIN ServiceItemTypes AS IT ON SI.ItemTypeID = IT.ItemTypeID +INNER JOIN Services AS S ON SI.ServiceID = S.ServiceID +WHERE ' + @condition + ' + +DECLARE @Items AS TABLE +( + ItemID int +); + +WITH TempItems AS ( + SELECT ROW_NUMBER() OVER (ORDER BY ' + @SortColumn + ') as Row, + SI.ItemID + FROM Packages AS P + INNER JOIN ServiceItems AS SI ON P.PackageID = SI.PackageID + INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID + INNER JOIN ServiceItemTypes AS IT ON SI.ItemTypeID = IT.ItemTypeID + INNER JOIN Services AS S ON SI.ServiceID = S.ServiceID + INNER JOIN Servers AS SRV ON S.ServerID = SRV.ServerID + WHERE ' + @condition + ' +) + +INSERT INTO @Items +SELECT ItemID FROM TempItems +WHERE TempItems.Row BETWEEN @StartRow + 1 and @StartRow + @MaximumRows + +SELECT + SI.ItemID, + SI.ItemName, + SI.ItemTypeID, + IT.TypeName, + SI.ServiceID, + SI.PackageID, + SI.CreatedDate, + RG.GroupName, + + -- packages + P.PackageName, + + -- server + ISNULL(SRV.ServerID, 0) AS ServerID, + ISNULL(SRV.ServerName, '''') AS ServerName, + ISNULL(SRV.Comments, '''') AS ServerComments, + ISNULL(SRV.VirtualServer, 0) AS VirtualServer, + + -- user + P.UserID, + U.Username, + U.FirstName, + U.LastName, + U.FullName, + U.RoleID, + U.Email +FROM @Items AS TSI +INNER JOIN ServiceItems AS SI ON TSI.ItemID = SI.ItemID +INNER JOIN ServiceItemTypes AS IT ON SI.ItemTypeID = IT.ItemTypeID +INNER JOIN Packages AS P ON SI.PackageID = P.PackageID +INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID +INNER JOIN Services AS S ON SI.ServiceID = S.ServiceID +INNER JOIN Servers AS SRV ON S.ServerID = SRV.ServerID +INNER JOIN ResourceGroups AS RG ON IT.GroupID = RG.GroupID + + +SELECT + IP.ItemID, + IP.PropertyName, + IP.PropertyValue +FROM ServiceItemProperties AS IP +INNER JOIN @Items AS TSI ON IP.ItemID = TSI.ItemID' + +--print @sql + +exec sp_executesql @sql, N'@ItemTypeID int, @PackageID int, @GroupID int, @StartRow int, @MaximumRows int, @Recursive bit, @ServerID int', +@ItemTypeID, @PackageID, @GroupID, @StartRow, @MaximumRows, @Recursive, @ServerID + +RETURN +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetIPAddressesPaged') +DROP PROCEDURE GetIPAddressesPaged +GO +CREATE PROCEDURE [dbo].[GetIPAddressesPaged] +( + @ActorID int, + @PoolID int, + @ServerID int, + @FilterColumn nvarchar(50) = '', + @FilterValue nvarchar(50) = '', + @SortColumn nvarchar(50), + @StartRow int, + @MaximumRows int +) +AS +BEGIN + +-- check rights +DECLARE @IsAdmin bit +SET @IsAdmin = dbo.CheckIsUserAdmin(@ActorID) + +-- start +DECLARE @condition nvarchar(700) +SET @condition = ' +@IsAdmin = 1 +AND (@PoolID = 0 OR @PoolID <> 0 AND IP.PoolID = @PoolID) +AND (@ServerID = 0 OR @ServerID <> 0 AND IP.ServerID = @ServerID) +' + +IF @FilterValue <> '' AND @FilterValue IS NOT NULL +BEGIN + IF @FilterColumn <> '' AND @FilterColumn IS NOT NULL + SET @condition = @condition + ' AND ' + @FilterColumn + ' LIKE ''' + @FilterValue + '''' + ELSE + SET @condition = @condition + ' + AND (ExternalIP LIKE ''' + @FilterValue + ''' + OR InternalIP LIKE ''' + @FilterValue + ''' + OR DefaultGateway LIKE ''' + @FilterValue + ''' + OR ServerName LIKE ''' + @FilterValue + ''' + OR ItemName LIKE ''' + @FilterValue + ''' + OR Username LIKE ''' + @FilterValue + ''')' +END + +IF @SortColumn IS NULL OR @SortColumn = '' +SET @SortColumn = 'IP.ExternalIP ASC' + +DECLARE @sql nvarchar(3500) + +set @sql = ' +SELECT COUNT(IP.AddressID) +FROM dbo.IPAddresses AS IP +LEFT JOIN Servers AS S ON IP.ServerID = S.ServerID +LEFT JOIN PackageIPAddresses AS PA ON IP.AddressID = PA.AddressID +LEFT JOIN ServiceItems SI ON PA.ItemId = SI.ItemID +LEFT JOIN dbo.Packages P ON PA.PackageID = P.PackageID +LEFT JOIN dbo.Users U ON P.UserID = U.UserID +WHERE ' + @condition + ' + +DECLARE @Addresses AS TABLE +( + AddressID int +); + +WITH TempItems AS ( + SELECT ROW_NUMBER() OVER (ORDER BY ' + @SortColumn + ') as Row, + IP.AddressID + FROM dbo.IPAddresses AS IP + LEFT JOIN Servers AS S ON IP.ServerID = S.ServerID + LEFT JOIN PackageIPAddresses AS PA ON IP.AddressID = PA.AddressID + LEFT JOIN ServiceItems SI ON PA.ItemId = SI.ItemID + LEFT JOIN dbo.Packages P ON PA.PackageID = P.PackageID + LEFT JOIN dbo.Users U ON U.UserID = P.UserID + WHERE ' + @condition + ' +) + +INSERT INTO @Addresses +SELECT AddressID FROM TempItems +WHERE TempItems.Row BETWEEN @StartRow + 1 and @StartRow + @MaximumRows + +SELECT + IP.AddressID, + IP.PoolID, + IP.ExternalIP, + IP.InternalIP, + IP.SubnetMask, + IP.DefaultGateway, + IP.Comments, + + IP.ServerID, + S.ServerName, + + PA.ItemID, + SI.ItemName, + + PA.PackageID, + P.PackageName, + + P.UserID, + U.UserName +FROM @Addresses AS TA +INNER JOIN dbo.IPAddresses AS IP ON TA.AddressID = IP.AddressID +LEFT JOIN Servers AS S ON IP.ServerID = S.ServerID +LEFT JOIN PackageIPAddresses AS PA ON IP.AddressID = PA.AddressID +LEFT JOIN ServiceItems SI ON PA.ItemId = SI.ItemID +LEFT JOIN dbo.Packages P ON PA.PackageID = P.PackageID +LEFT JOIN dbo.Users U ON U.UserID = P.UserID +' + +exec sp_executesql @sql, N'@IsAdmin bit, @PoolID int, @ServerID int, @StartRow int, @MaximumRows int', +@IsAdmin, @PoolID, @ServerID, @StartRow, @MaximumRows + +END +GO IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetSearchObject') DROP PROCEDURE GetSearchObject @@ -10854,16 +12190,16 @@ AS IF dbo.CheckActorUserRights(@ActorID, @UserID) = 0 RAISERROR('You are not allowed to access this account', 16, 1) -DECLARE @columnUsername nvarchar(20) +DECLARE @columnUsername nvarchar(20) SET @columnUsername = 'Username' -DECLARE @columnEmail nvarchar(20) +DECLARE @columnEmail nvarchar(20) SET @columnEmail = 'Email' -DECLARE @columnCompanyName nvarchar(20) +DECLARE @columnCompanyName nvarchar(20) SET @columnCompanyName = 'CompanyName' -DECLARE @columnFullName nvarchar(20) +DECLARE @columnFullName nvarchar(20) SET @columnFullName = 'FullName' DECLARE @curUsers cursor @@ -10892,7 +12228,7 @@ SET @sqlUsers = @sqlUsers + 'TOP ' + CAST(@MaximumRows AS varchar(12)) + ' ' SET @sqlUsers = @sqlUsers + 'U.UserID FROM UsersDetailed AS U -WHERE +WHERE U.UserID <> @UserID AND U.IsPeer = 0 AND ( (@Recursive = 0 AND OwnerID = @UserID) OR @@ -10900,7 +12236,7 @@ WHERE ) AND ((@StatusID = 0) OR (@StatusID > 0 AND U.StatusID = @StatusID)) AND ((@RoleID = 0) OR (@RoleID > 0 AND U.RoleID = @RoleID)) - AND @HasUserRights = 1 + AND @HasUserRights = 1 SET @curValue = cursor local for SELECT U.ItemID, @@ -10910,20 +12246,20 @@ SELECT 0 as PackageID, 0 as AccountID FROM @Users AS TU -INNER JOIN +INNER JOIN ( SELECT ItemID, TextSearch, ColumnType FROM( SELECT U0.UserID as ItemID, U0.Username as TextSearch, @columnUsername as ColumnType FROM dbo.Users AS U0 UNION -SELECT U1.UserID as ItemID, U1.Email as TextSearch, @columnEmail as ColumnType +SELECT U1.UserID as ItemID, U1.Email as TextSearch, @columnEmail as ColumnType FROM dbo.Users AS U1 UNION -SELECT U2.UserID as ItemID, U2.CompanyName as TextSearch, @columnCompanyName as ColumnType +SELECT U2.UserID as ItemID, U2.CompanyName as TextSearch, @columnCompanyName as ColumnType FROM dbo.Users AS U2 UNION -SELECT U3.UserID as ItemID, U3.FirstName + '' '' + U3.LastName as TextSearch, @columnFullName as ColumnType +SELECT U3.UserID as ItemID, U3.FirstName + '' '' + U3.LastName as TextSearch, @columnFullName as ColumnType FROM dbo.Users AS U3) as U WHERE TextSearch<>'' '' OR ISNULL(TextSearch, 0) > 0 ) @@ -10963,10 +12299,10 @@ SET @sqlSpace = @sqlSpace + 'SI.ItemID INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID WHERE dbo.CheckUserParent(@UserID, P.UserID) = 1 - + SET @curValue = cursor local for SELECT - + SI.ItemID as ItemID, SI.ItemName as TextSearch, STYPE.DisplayName as ColumnType, @@ -10978,7 +12314,7 @@ SET @sqlSpace = @sqlSpace + 'SI.ItemID INNER JOIN ServiceItemTypes AS STYPE ON SI.ItemTypeID = STYPE.ItemTypeID WHERE STYPE.Searchable = 1 UNION - SELECT + SELECT D.DomainID AS ItemID, D.DomainName as TextSearch, ''Domain'' as ColumnType, @@ -10993,14 +12329,14 @@ SET @sqlSpace = @sqlSpace + 'SI.ItemID EA.ItemID AS ItemID, EA.AccountName as TextSearch, ''ExchangeAccount'' as ColumnType, - ''ExchangeAccount'' as FullType, + ''ExchangeAccountMailbox'' as FullType, SI2.PackageID as PackageID, EA.AccountID as AccountID FROM @ItemsService AS I2 INNER JOIN ServiceItems AS SI2 ON I2.ItemID = SI2.ItemID INNER JOIN ExchangeAccounts AS EA ON I2.ItemID = EA.ItemID '; - + SET @sqlSpace = @sqlSpace + ' open @curValue' exec sp_executesql @sqlSpace, N'@UserID int, @FilterValue nvarchar(50), @ActorID int, @curValue cursor output', @@ -11052,7 +12388,7 @@ DECLARE @ItemsReturn TABLE PackageID int, AccountID int ) -INSERT INTO @ItemsReturn(ItemID, TextSearch, ColumnType, FullType, PackageID, AccountID) +INSERT INTO @ItemsReturn(ItemID, TextSearch, ColumnType, FullType, PackageID, AccountID) SELECT ItemID, TextSearch, ColumnType, FullType, PackageID, AccountID FROM @ItemsAll AS IA WHERE (1 = 1) ' @@ -11090,3 +12426,143 @@ DEALLOCATE @curSpace CLOSE @curUsers DEALLOCATE @curUsers RETURN + + +IF EXISTS (SELECT TOP 1 * FROM ServiceItemTypes WHERE DisplayName = 'SharePointEnterpriseSiteCollection') +BEGIN + DECLARE @item_type_id AS INT + SELECT @item_type_id = ItemTypeId FROM ServiceItemTypes WHERE DisplayName = 'SharePointEnterpriseSiteCollection' + UPDATE [dbo].[Quotas] SET ItemTypeID = @item_type_id WHERE QuotaId = 550 +END +GO + +-- OneTimePassword +IF NOT EXISTS(select 1 from sys.columns COLS INNER JOIN sys.objects OBJS ON OBJS.object_id=COLS.object_id and OBJS.type='U' AND OBJS.name='Users' AND COLS.name='OneTimePasswordState') +BEGIN +ALTER TABLE [dbo].[Users] ADD + [OneTimePasswordState] int NULL +END +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'SetUserOneTimePassword') +DROP PROCEDURE SetUserOneTimePassword +GO +CREATE PROCEDURE [dbo].[SetUserOneTimePassword] +( + @UserID int, + @Password nvarchar(200), + @OneTimePasswordState int +) +AS +UPDATE Users +SET Password = @Password, OneTimePasswordState = @OneTimePasswordState +WHERE UserID = @UserID +RETURN +GO + +ALTER PROCEDURE [dbo].[GetUserByUsernameInternally] +( + @Username nvarchar(50) +) +AS + SELECT + U.UserID, + U.RoleID, + U.StatusID, + U.SubscriberNumber, + U.LoginStatusId, + U.FailedLogins, + U.OwnerID, + U.Created, + U.Changed, + U.IsDemo, + U.Comments, + U.IsPeer, + U.Username, + U.Password, + U.FirstName, + U.LastName, + U.Email, + U.SecondaryEmail, + U.Address, + U.City, + U.State, + U.Country, + U.Zip, + U.PrimaryPhone, + U.SecondaryPhone, + U.Fax, + U.InstantMessenger, + U.HtmlMail, + U.CompanyName, + U.EcommerceEnabled, + U.[AdditionalParams], + U.OneTimePasswordState + FROM Users AS U + WHERE U.Username = @Username + + RETURN +GO + +ALTER PROCEDURE [dbo].[GetUserByIdInternally] +( + @UserID int +) +AS + SELECT + U.UserID, + U.RoleID, + U.StatusID, + U.SubscriberNumber, + U.LoginStatusId, + U.FailedLogins, + U.OwnerID, + U.Created, + U.Changed, + U.IsDemo, + U.Comments, + U.IsPeer, + U.Username, + U.Password, + U.FirstName, + U.LastName, + U.Email, + U.SecondaryEmail, + U.Address, + U.City, + U.State, + U.Country, + U.Zip, + U.PrimaryPhone, + U.SecondaryPhone, + U.Fax, + U.InstantMessenger, + U.HtmlMail, + U.CompanyName, + U.EcommerceEnabled, + U.[AdditionalParams], + U.OneTimePasswordState + FROM Users AS U + WHERE U.UserID = @UserID + + RETURN +GO + +ALTER PROCEDURE [dbo].[ChangeUserPassword] +( + @ActorID int, + @UserID int, + @Password nvarchar(200) +) +AS + +-- check actor rights +IF dbo.CanUpdateUserDetails(@ActorID, @UserID) = 0 +RETURN + +UPDATE Users +SET Password = @Password, OneTimePasswordState = 0 +WHERE UserID = @UserID + +RETURN +GO \ No newline at end of file From 51645d124c870ee3faeb862ce2ba613ff49fdd40 Mon Sep 17 00:00:00 2001 From: McMak Date: Tue, 19 May 2015 15:49:50 +0300 Subject: [PATCH 02/16] Installer: old to new update #2 - InstallLocation for Control Panel item - Programs and Features. --- WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs | 1 + 1 file changed, 1 insertion(+) diff --git a/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs b/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs index ebf7abe3..aeab6558 100644 --- a/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs +++ b/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs @@ -620,6 +620,7 @@ WSP_BASE + From 7fcbcb18d51ce461b9a55418ade51ca7cee2729c Mon Sep 17 00:00:00 2001 From: McMak Date: Wed, 20 May 2015 11:14:32 +0300 Subject: [PATCH 03/16] Installer: old to new update #3 --- .../Sources/Setup.WIXInstaller/Product.wxs | 84 ++-- .../SchedulerServiceFiles.wxs | 2 +- .../Common/SecurityUtils.cs | 2 +- .../WebsitePanel.Setup/Common/WebUtils.cs | 4 +- .../WebsitePanel.Setup/Internal/Adapter.cs | 5 - .../WebsitePanel.WIXInstaller/Common/Tool.cs | 7 + .../WebsitePanel.WIXInstaller/CustomAction.cs | 404 +++++++----------- WebsitePanel/build.xml | 8 +- 8 files changed, 221 insertions(+), 295 deletions(-) diff --git a/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs b/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs index aeab6558..f45e3503 100644 --- a/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs +++ b/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs @@ -10,38 +10,38 @@ - - - - - + - - - - - - - + + + + + + @@ -566,10 +566,7 @@ - - @@ -595,39 +592,54 @@ + + + + + + + + - + - + - + - + - + - + - + - + - + - WSP_BASE - + WSP_BASE + + - + + + + + + + @@ -650,7 +662,7 @@ - + @@ -669,10 +681,10 @@ - + - (NOT Installed AND NOT WIX_UPGRADE_DETECTED) AND NOT(DB_AUTH = "Windows Authentication") + (NOT Installed AND NOT WIX_UPGRADE_DETECTED) AND NOT(DB_AUTH = "Windows Authentication") AND (COMPFOUND_ESERVER="0") - (NOT Installed AND NOT WIX_UPGRADE_DETECTED) AND (DB_AUTH = "Windows Authentication") + (NOT Installed AND NOT WIX_UPGRADE_DETECTED) AND (DB_AUTH = "Windows Authentication") AND (COMPFOUND_ESERVER="0") - + - + diff --git a/WebsitePanel.Installer/Sources/Setup.WIXInstaller/SchedulerServiceFiles.wxs b/WebsitePanel.Installer/Sources/Setup.WIXInstaller/SchedulerServiceFiles.wxs index f8f8840f..a1a1f9ee 100644 --- a/WebsitePanel.Installer/Sources/Setup.WIXInstaller/SchedulerServiceFiles.wxs +++ b/WebsitePanel.Installer/Sources/Setup.WIXInstaller/SchedulerServiceFiles.wxs @@ -5,7 +5,7 @@ - + diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SecurityUtils.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SecurityUtils.cs index 072723fb..3ffc2452 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SecurityUtils.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SecurityUtils.cs @@ -398,7 +398,7 @@ namespace WebsitePanel.Setup /// /// Check for existing user /// - internal static bool UserExists(string domain, string userName) + public static bool UserExists(string domain, string userName) { bool found = false; // check whether user account already exists diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/WebUtils.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/WebUtils.cs index 6b3781b8..ccad6dd3 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/WebUtils.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/WebUtils.cs @@ -768,7 +768,7 @@ namespace WebsitePanel.Setup /// /// /// - internal static bool ApplicationPoolExists(string name) + public static bool ApplicationPoolExists(string name) { WmiHelper wmi = new WmiHelper("root\\MicrosoftIISv2"); return(wmi.ExecuteQuery( @@ -780,7 +780,7 @@ namespace WebsitePanel.Setup /// /// /// - internal static bool IIS7ApplicationPoolExists(string name) + public static bool IIS7ApplicationPoolExists(string name) { ServerManager serverManager = new ServerManager(); bool ret = (serverManager.ApplicationPools[name] != null); diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs index 1c873917..ea06fd77 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs @@ -2859,7 +2859,6 @@ namespace WebsitePanel.Setup.Internal { List list = new List(); InstallAction action = null; - //database string connectionString = AppConfig.GetComponentSettingStringValue(componentId, "InstallConnectionString"); if (!String.IsNullOrEmpty(connectionString)) @@ -2871,7 +2870,6 @@ namespace WebsitePanel.Setup.Internal action.Description = string.Format("Backing up database {0}...", database); list.Add(action); } - //directory string path = AppConfig.GetComponentSettingStringValue(componentId, "InstallFolder"); if (!string.IsNullOrEmpty(path)) @@ -2881,7 +2879,6 @@ namespace WebsitePanel.Setup.Internal action.Description = string.Format("Backing up directory {0}...", path); list.Add(action); } - //config action = new InstallAction(ActionTypes.BackupConfig); action.Description = "Backing up configuration settings..."; @@ -2889,9 +2886,7 @@ namespace WebsitePanel.Setup.Internal list.Add(action); return list; - } - private void UpdateWebSiteBindings() { string component = Context.ComponentFullName; diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/Common/Tool.cs b/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/Common/Tool.cs index 4b2b20c7..ffd229c8 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/Common/Tool.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/Common/Tool.cs @@ -43,6 +43,13 @@ namespace WebsitePanel.WIXInstaller.Common Result |= CheckAspNetRegValue(LMKey); return Result; } + public static bool AppPoolExists(string Pool) + { + if (GetWebServerVersion().Major > MINIMUM_WEBSERVER_MAJOR_VERSION) + return WebUtils.IIS7ApplicationPoolExists(Pool); + else + return WebUtils.ApplicationPoolExists(Pool); + } public static bool CheckAspNetRegValue(RegistryKey BaseKey) { var WebComponentsKey = "SOFTWARE\\Microsoft\\InetStp\\Components"; diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/CustomAction.cs b/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/CustomAction.cs index 0ff7782e..ffaf53c2 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/CustomAction.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/CustomAction.cs @@ -52,9 +52,44 @@ namespace WebsitePanel.WIXInstaller { public static List SysDb = new List { "tempdb", "master", "model", "msdb" }; public const string CustomDataDelimiter = "-=del=-"; + public const string SQL_AUTH_WINDOWS = "Windows Authentication"; + public const string SQL_AUTH_SERVER = "SQL Server Authentication"; #region CustomActions [CustomAction] + public static ActionResult OnServerPrepare(Session Ctx) + { + PopUpDebugger(); + + Ctx.AttachToSetupLog(); + Log.WriteStart("OnServerPrepare"); + GetPrepareScript(Ctx).Run(); + Log.WriteEnd("OnServerPrepare"); + return ActionResult.Success; + } + [CustomAction] + public static ActionResult OnEServerPrepare(Session Ctx) + { + PopUpDebugger(); + + Ctx.AttachToSetupLog(); + Log.WriteStart("OnEServerPrepare"); + GetPrepareScript(Ctx).Run(); + Log.WriteEnd("OnEServerPrepare"); + return ActionResult.Success; + } + [CustomAction] + public static ActionResult OnPortalPrepare(Session Ctx) + { + PopUpDebugger(); + + Ctx.AttachToSetupLog(); + Log.WriteStart("OnPortalPrepare"); + GetPrepareScript(Ctx).Run(); + Log.WriteEnd("OnPortalPrepare"); + return ActionResult.Success; + } + [CustomAction] public static ActionResult MaintenanceServer(Session session) { var Result = ActionResult.Success; @@ -84,104 +119,134 @@ namespace WebsitePanel.WIXInstaller [CustomAction] public static ActionResult PreFillSettings(Session session) { - PopUpDebugger(); - var Ctx = session; - Ctx.AttachToSetupLog(); - Log.WriteStart("PreFillSettings"); - var WSP = Ctx["WEBSITEPANELDIR"]; - var CfgStr = string.Empty; - Func GetCfg = (string CfgDir) => + Func HaveInstalledComponents = (string CfgFullPath) => { - if (Directory.Exists(CfgDir)) + var ComponentsPath = "//components"; + return File.Exists(CfgFullPath) ? BackupRestore.HaveChild(CfgFullPath, ComponentsPath) : false; + }; + Func, string> FindMainConfig = (IEnumerable Dirs) => + { + // Looking into platform specific Program Files. { - var CfgFile = Path.Combine(CfgDir, BackupRestore.MainConfig); - if (File.Exists(CfgFile) && BackupRestore.HaveChild(CfgFile, "//components")) - return CfgFile; + var InstallerMainCfg = "WebsitePanel.Installer.exe.config"; + var InstallerName = "WebsitePanel Installer"; + var PFolderType = Environment.Is64BitOperatingSystem ? Environment.SpecialFolder.ProgramFilesX86 : Environment.SpecialFolder.ProgramFiles; + var PFiles = Environment.GetFolderPath(PFolderType); + var Result = Path.Combine(PFiles, InstallerName, InstallerMainCfg); + if (HaveInstalledComponents(Result)) + return Result; + } + // Looking into specific directories. + foreach (var Dir in Dirs) + { + var Result = Path.Combine(Dir, BackupRestore.MainConfig); + if (HaveInstalledComponents(Result)) + { + return Result; + } else { - var Names = new string[] { Global.Server.ComponentName, Global.EntServer.ComponentName, Global.WebPortal.ComponentName }; - foreach (var Name in Names) + var ComponentNames = new string[] { Global.Server.ComponentName, Global.EntServer.ComponentName, Global.WebPortal.ComponentName }; + foreach (var Name in ComponentNames) { - var Backup = BackupRestore.Find(CfgDir, Global.DefaultProductName, Name); - if (Backup != null && BackupRestore.HaveChild(Backup.BackupMainConfigFile, "//components")) - return CfgStr = Backup.BackupMainConfigFile; + var Backup = BackupRestore.Find(Dir, Global.DefaultProductName, Name); + if (Backup != null && HaveInstalledComponents(Backup.BackupMainConfigFile)) + return Backup.BackupMainConfigFile; } } } - return string.Empty; + return null; }; - Func SetProperty = (Session CtxSession, string Prop, string Value) => - { - if(!string.IsNullOrWhiteSpace(Value)) - { - CtxSession[Prop] = Value; - return true; - } - return false; - }; - CfgStr = GetCfg(WSP); - if(string.IsNullOrWhiteSpace(CfgStr)) - { - var Drives = from Drive in DriveInfo.GetDrives() where Drive.DriveType == DriveType.Fixed select Drive; - foreach(var Drive in Drives) - { - var Dir = Path.Combine(Drive.RootDirectory.FullName, Global.DefaultProductName); - CfgStr = GetCfg(Dir); - if (!string.IsNullOrWhiteSpace(CfgStr)) - break; - } - } - if (!string.IsNullOrWhiteSpace(CfgStr)) + + var Ctx = session; + Ctx.AttachToSetupLog(); + + PopUpDebugger(); + + Log.WriteStart("PreFillSettings"); + var WSP = Ctx["WSP_INSTALL_DIR"]; + var DirList = new List(); + DirList.Add(WSP); + DirList.AddRange(from Drive in DriveInfo.GetDrives() + where Drive.DriveType == DriveType.Fixed + select Path.Combine(Drive.RootDirectory.FullName, Global.DefaultProductName)); + var CfgPath = FindMainConfig(DirList); + if (!string.IsNullOrWhiteSpace(CfgPath)) { var EServerUrl = string.Empty; - AppConfig.LoadConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = CfgStr }); + AppConfig.LoadConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = CfgPath }); var CtxVars = new SetupVariables(); - CtxVars.ComponentId = WiXSetup.GetComponentID(CfgStr, Global.Server.ComponentCode); + CtxVars.ComponentId = WiXSetup.GetComponentID(CfgPath, Global.Server.ComponentCode); if (!string.IsNullOrWhiteSpace(CtxVars.ComponentId)) - { + { AppConfig.LoadComponentSettings(CtxVars); - Ctx["COMPFOUND_SERVER"] = "1"; + SetProperty(Ctx, "PI_SERVER_IP", CtxVars.WebSiteIP); SetProperty(Ctx, "PI_SERVER_PORT", CtxVars.WebSitePort); SetProperty(Ctx, "PI_SERVER_HOST", CtxVars.WebSiteDomain); SetProperty(Ctx, "PI_SERVER_LOGIN", CtxVars.UserAccount); - SetProperty(Ctx, "PI_SERVER_PASSWORD", CtxVars.UserPassword); - SetProperty(Ctx, "PI_SERVER_PASSWORD_CONFIRM",CtxVars.UserPassword); SetProperty(Ctx, "PI_SERVER_DOMAIN", CtxVars.UserDomain); - SetProperty(Ctx, "SERVER_ACCESS_PASSWORD", CtxVars.ServerPassword); - SetProperty(Ctx, "SERVER_ACCESS_PASSWORD_CONFIRM", CtxVars.ServerPassword); + + SetProperty(Ctx, "PI_SERVER_INSTALL_DIR", CtxVars.InstallFolder); + SetProperty(Ctx, "WSP_INSTALL_DIR", Directory.GetParent(CtxVars.InstallFolder).FullName); + + var HaveAccount = SecurityUtils.UserExists(CtxVars.UserDomain, CtxVars.UserAccount); + bool HavePool = Tool.AppPoolExists(CtxVars.ApplicationPool); + + Ctx["COMPFOUND_SERVER"] = (HaveAccount && HavePool) ? YesNo.Yes : YesNo.No; } - CtxVars.ComponentId = WiXSetup.GetComponentID(CfgStr, Global.EntServer.ComponentCode); + CtxVars.ComponentId = WiXSetup.GetComponentID(CfgPath, Global.EntServer.ComponentCode); if (!string.IsNullOrWhiteSpace(CtxVars.ComponentId)) { AppConfig.LoadComponentSettings(CtxVars); - Ctx["COMPFOUND_ESERVER"] = "1"; + SetProperty(Ctx, "PI_ESERVER_IP", CtxVars.WebSiteIP); SetProperty(Ctx, "PI_ESERVER_PORT", CtxVars.WebSitePort); SetProperty(Ctx, "PI_ESERVER_HOST", CtxVars.WebSiteDomain); SetProperty(Ctx, "PI_ESERVER_LOGIN", CtxVars.UserAccount); - SetProperty(Ctx, "PI_ESERVER_PASSWORD", CtxVars.UserPassword); - SetProperty(Ctx, "PI_ESERVER_PASSWORD_CONFIRM", CtxVars.UserPassword); SetProperty(Ctx, "PI_ESERVER_DOMAIN", CtxVars.UserDomain); - SetProperty(Ctx, "SERVERADMIN_PASSWORD", CtxVars.ServerAdminPassword); - SetProperty(Ctx, "SERVERADMIN_PASSWORD_CONFIRM", CtxVars.ServerAdminPassword); EServerUrl = string.Format("http://{0}:{1}", CtxVars.WebSiteIP, CtxVars.WebSitePort); + + SetProperty(Ctx, "PI_ESERVER_INSTALL_DIR", CtxVars.InstallFolder); + SetProperty(Ctx, "WSP_INSTALL_DIR", Directory.GetParent(CtxVars.InstallFolder).FullName); + + var ConnStr = new SqlConnectionStringBuilder(CtxVars.DbInstallConnectionString); + SetProperty(Ctx, "DB_CONN", ConnStr.ToString()); + SetProperty(Ctx, "DB_SERVER", ConnStr.DataSource); + SetProperty(Ctx, "DB_DATABASE", ConnStr.InitialCatalog); + SetProperty(Ctx, "DB_AUTH", ConnStr.IntegratedSecurity ? SQL_AUTH_WINDOWS : SQL_AUTH_SERVER); + if (!ConnStr.IntegratedSecurity) + { + SetProperty(Ctx, "DB_LOGIN", ConnStr.UserID); + SetProperty(Ctx, "DB_PASSWORD", ConnStr.Password); + } + + var HaveAccount = SecurityUtils.UserExists(CtxVars.UserDomain, CtxVars.UserAccount); + bool HavePool = Tool.AppPoolExists(CtxVars.ApplicationPool); + + Ctx["COMPFOUND_ESERVER"] = (HaveAccount && HavePool) ? YesNo.Yes : YesNo.No; } - CtxVars.ComponentId = WiXSetup.GetComponentID(CfgStr, Global.WebPortal.ComponentCode); + CtxVars.ComponentId = WiXSetup.GetComponentID(CfgPath, Global.WebPortal.ComponentCode); if (!string.IsNullOrWhiteSpace(CtxVars.ComponentId)) { AppConfig.LoadComponentSettings(CtxVars); - Ctx["COMPFOUND_PORTAL"] = "1"; + SetProperty(Ctx, "PI_PORTAL_IP", CtxVars.WebSiteIP); SetProperty(Ctx, "PI_PORTAL_PORT", CtxVars.WebSitePort); SetProperty(Ctx, "PI_PORTAL_HOST", CtxVars.WebSiteDomain); SetProperty(Ctx, "PI_PORTAL_LOGIN", CtxVars.UserAccount); - SetProperty(Ctx, "PI_PORTAL_PASSWORD", CtxVars.UserPassword); - SetProperty(Ctx, "PI_PORTAL_PASSWORD_CONFIRM", CtxVars.UserPassword); SetProperty(Ctx, "PI_PORTAL_DOMAIN", CtxVars.UserDomain); if (!SetProperty(Ctx, "PI_ESERVER_URL", CtxVars.EnterpriseServerURL)) if (!SetProperty(Ctx, "PI_ESERVER_URL", EServerUrl)) SetProperty(Ctx, "PI_ESERVER_URL", Global.WebPortal.DefaultEntServURL); + + SetProperty(Ctx, "PI_PORTAL_INSTALL_DIR", CtxVars.InstallFolder); + SetProperty(Ctx, "WSP_INSTALL_DIR", Directory.GetParent(CtxVars.InstallFolder).FullName); + + var HaveAccount = SecurityUtils.UserExists(CtxVars.UserDomain, CtxVars.UserAccount); + bool HavePool = Tool.AppPoolExists(CtxVars.ApplicationPool); + + Ctx["COMPFOUND_PORTAL"] = (HaveAccount && HavePool) ? YesNo.Yes : YesNo.No; } } TryApllyNewPassword(Ctx, "PI_SERVER_PASSWORD"); @@ -202,8 +267,8 @@ namespace WebsitePanel.WIXInstaller try { Log.WriteStart("InstallWebFeatures"); - if(Tool.GetIsWebRoleInstalled()) - { + if (Tool.GetIsWebRoleInstalled()) + { if (!Tool.GetIsWebFeaturesInstalled()) { Log.WriteInfo("InstallWebFeatures: ASP.NET."); @@ -221,12 +286,12 @@ namespace WebsitePanel.WIXInstaller } Log.WriteInfo("InstallWebFeatures: done."); } - catch(Exception ex) + catch (Exception ex) { Log.WriteError(string.Format("InstallWebFeatures: fail - {0}.", ex.ToString())); Result = ActionResult.Failure; } - if(!string.IsNullOrWhiteSpace(Msg)) + if (!string.IsNullOrWhiteSpace(Msg)) Log.WriteInfo(string.Format("InstallWebFeatures Tool Log: {0}.", Msg)); Log.WriteEnd("InstallWebFeatures"); return Result; @@ -418,7 +483,7 @@ namespace WebsitePanel.WIXInstaller foreach (var Db in GetDbList(ConnStr: session["DB_CONN"], ForbiddenNames: SysDb)) { Ctrl.AddItem(Db); - session["DB_SELECT"] = Db; // Adds available DBs to installer log. + session["DB_SELECT"] = Db; // Adds available DBs to installer log and selects latest. } else session["DB_SELECT"] = ""; @@ -427,88 +492,15 @@ namespace WebsitePanel.WIXInstaller [CustomAction] public static ActionResult CheckConnectionUI(Session session) { - string ConnStr = session["DB_AUTH"].Equals("Windows Authentication") ? GetConnectionString(session["DB_SERVER"], "master") : + string ConnStr = session["DB_AUTH"].Equals(SQL_AUTH_WINDOWS) ? GetConnectionString(session["DB_SERVER"], "master") : GetConnectionString(session["DB_SERVER"], "master", session["DB_LOGIN"], session["DB_PASSWORD"]); string msg; bool Result = CheckConnection(ConnStr, out msg); - session["DB_CONN_CORRECT"] = Result ? "1" : "0"; + session["DB_CONN_CORRECT"] = Result ? YesNo.Yes: YesNo.No; session["DB_CONN"] = Result ? ConnStr : ""; session["DB_CONN_MSG"] = msg; return ActionResult.Success; } - - [CustomAction] - public static ActionResult FinalizeInstall(Session session) - { - /*var connectionString = GetCustomActionProperty(session, "ConnectionString").Replace(CustomDataDelimiter, ";"); - var serviceFolder = GetCustomActionProperty(session, "ServiceFolder"); - var previousConnectionString = GetCustomActionProperty(session, "PreviousConnectionString").Replace(CustomDataDelimiter, ";"); - var previousCryptoKey = GetCustomActionProperty(session, "PreviousCryptoKey"); - - if (string.IsNullOrEmpty(serviceFolder)) - { - return ActionResult.Success; - } - - connectionString = string.IsNullOrEmpty(previousConnectionString) - ? connectionString - : previousConnectionString; - - ChangeConfigString("/configuration/connectionStrings/add[@name='EnterpriseServer']", "connectionString", connectionString, serviceFolder); - ChangeConfigString("/configuration/appSettings/add[@key='WebsitePanel.CryptoKey']", "value", previousCryptoKey, serviceFolder); - InstallService(serviceFolder);*/ - - return ActionResult.Success; - } - - [CustomAction] - public static ActionResult FinalizeUnInstall(Session session) - { - // UnInstallService(); - - return ActionResult.Success; - } - - [CustomAction] - public static ActionResult PreInstallationAction(Session session) - { - session["SKIPCONNECTIONSTRINGSTEP"] = "0"; - - session["SERVICEFOLDER"] = session["INSTALLFOLDER"]; - - var servicePath = /*SecurityUtils.GetServicePath("WebsitePanel Scheduler")*/""; - - if (!string.IsNullOrEmpty(servicePath)) - { - string path = Path.Combine(servicePath, "WebsitePanel.SchedulerService.exe.config"); - - if (File.Exists(path)) - { - using (var reader = new StreamReader(path)) - { - string content = reader.ReadToEnd(); - var pattern = new Regex(@"(?<=)"); - Match match = pattern.Match(content); - session["PREVIOUSCRYPTOKEY"] = match.Value; - - var connectionStringPattern = new Regex(@"(?<=)"); - match = connectionStringPattern.Match(content); - session["PREVIOUSCONNECTIONSTRING"] = match.Value.Replace(";", CustomDataDelimiter); - } - - session["SKIPCONNECTIONSTRINGSTEP"] = "1"; - - if (string.IsNullOrEmpty(session["SERVICEFOLDER"])) - { - session["SERVICEFOLDER"] = servicePath; - } - } - - } - - return ActionResult.Success; - } - [CustomAction] public static ActionResult PrereqCheck(Session session) { @@ -556,102 +548,14 @@ namespace WebsitePanel.WIXInstaller } #endregion - private static void InstallService(string installFolder) - { - try - { - var schedulerService = - ServiceController.GetServices().FirstOrDefault( - s => s.DisplayName.Equals("WebsitePanel Scheduler", StringComparison.CurrentCultureIgnoreCase)); - - if (schedulerService != null) - { - StopService(schedulerService.ServiceName); - - SecurityUtils.DeleteService(schedulerService.ServiceName); - } - - ManagedInstallerClass.InstallHelper(new[] { "/i", Path.Combine(installFolder, "WebsitePanel.SchedulerService.exe") }); - - StartService("WebsitePanel Scheduler"); - } - catch (Exception) - { - } - } - - private static void UnInstallService() - { - try - { - var schedulerService = - ServiceController.GetServices().FirstOrDefault( - s => s.DisplayName.Equals("WebsitePanel Scheduler", StringComparison.CurrentCultureIgnoreCase)); - - if (schedulerService != null) - { - StopService(schedulerService.ServiceName); - - SecurityUtils.DeleteService(schedulerService.ServiceName); - } - } - catch (Exception) - { - } - } - - private static void ChangeConfigString(string nodePath, string attrToChange, string value, string installFolder) - { - string path = Path.Combine(installFolder, "WebsitePanel.SchedulerService.exe.config"); - - if (!File.Exists(path)) - { - return; - } - - XmlDocument xmldoc = new XmlDocument(); - xmldoc.Load(path); - - XmlElement node = xmldoc.SelectSingleNode(nodePath) as XmlElement; - - if (node != null) - { - node.SetAttribute(attrToChange, value); - - xmldoc.Save(path); - } - } - - private static void StopService(string serviceName) - { - var sc = new ServiceController(serviceName); - - if (sc.Status == ServiceControllerStatus.Running) - { - sc.Stop(); - sc.WaitForStatus(ServiceControllerStatus.Stopped); - } - } - - private static void StartService(string serviceName) - { - var sc = new ServiceController(serviceName); - - if (sc.Status == ServiceControllerStatus.Stopped) - { - sc.Start(); - sc.WaitForStatus(ServiceControllerStatus.Running); - } - } - private static string GetConnectionString(string serverName, string databaseName) { - return string.Format("Server={0};database={1};Trusted_Connection=true;", serverName, databaseName)/*.Replace(";", CustomDataDelimiter)*/; + return string.Format("Server={0};database={1};Trusted_Connection=true;", serverName, databaseName); } private static string GetConnectionString(string serverName, string databaseName, string login, string password) { - return string.Format("Server={0};database={1};uid={2};password={3};", serverName, databaseName, login, password)/*.Replace(";", CustomDataDelimiter)*/; + return string.Format("Server={0};database={1};uid={2};password={3};", serverName, databaseName, login, password); } static bool CheckConnection(string ConnStr, out string Info) { @@ -671,16 +575,6 @@ namespace WebsitePanel.WIXInstaller } return Result; } - - private static string GetCustomActionProperty(Session session, string key) - { - if (session.CustomActionData.ContainsKey(key)) - { - return session.CustomActionData[key].Replace("-=-", ";"); - } - - return string.Empty; - } private static void AddCheck(ListViewCtrl view, Session session, string PropertyID) { view.AddItem(session[PropertyID] == YesNo.Yes, session[PropertyID + "_TITLE"]); @@ -834,15 +728,6 @@ namespace WebsitePanel.WIXInstaller foreach (var Msg in Msgs) AddTo(Ctx, "CUSTOM_INSTALL_TEXT", Msg); ; } - - internal static string GetProperty(Session Ctx, string Property) - { - if (Ctx.CustomActionData.ContainsKey(Property)) - return Ctx[Property]; - else - return string.Empty; - } - private static ActionResult ProcessInstall(Session Ctx, WiXInstallType InstallType) { IWiXSetup Install = null; @@ -911,6 +796,33 @@ namespace WebsitePanel.WIXInstaller Log.WriteInfo("New password was applied to " + Id); } } + private static string GetProperty(Session Ctx, string Property) + { + if (Ctx.CustomActionData.ContainsKey(Property)) + return Ctx[Property]; + else + return string.Empty; + } + private static bool SetProperty(Session CtxSession, string Prop, string Value) + { + if (!string.IsNullOrWhiteSpace(Value)) + { + CtxSession[Prop] = Value; + return true; + } + return false; + } + private static SetupScript GetPrepareScript(Session Ctx) + { + var CtxVars = new SetupVariables(); + WiXSetup.FillFromSession(Ctx.CustomActionData, CtxVars); + CtxVars.IISVersion = Tool.GetWebServerVersion(); + SetupScript Result = new ExpressScript(CtxVars); + Result.Actions.Add(new InstallAction(ActionTypes.StopApplicationPool) { SetupVariables = CtxVars }); + Result.Actions.Add(new InstallAction(ActionTypes.Backup) { SetupVariables = CtxVars }); + Result.Actions.Add(new InstallAction(ActionTypes.DeleteDirectory) { SetupVariables = CtxVars }); + return Result; + } } public static class SessionExtension { diff --git a/WebsitePanel/build.xml b/WebsitePanel/build.xml index e0bec863..dce6efa3 100644 --- a/WebsitePanel/build.xml +++ b/WebsitePanel/build.xml @@ -366,10 +366,10 @@ - - - - + + + + From b2bb23ea136452cd87e64b139665ac9e27354bca Mon Sep 17 00:00:00 2001 From: McMak Date: Wed, 20 May 2015 16:19:56 +0300 Subject: [PATCH 04/16] Installer: old to new update #4 --- .../Sources/Setup.WIXInstaller/Product.wxs | 24 +++++++--- .../Actions/EntServerActionManager.cs | 12 +++++ .../Actions/ServerActionManager.cs | 10 ++++- .../WebsitePanel.Setup/Common/FileUtils.cs | 4 +- .../Common/SetupVariables.cs | 5 +++ .../WebsitePanel.Setup/Internal/Adapter.cs | 45 ++++++++++++++++--- .../WebsitePanel.WIXInstaller/CustomAction.cs | 27 ++++++++--- 7 files changed, 106 insertions(+), 21 deletions(-) diff --git a/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs b/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs index f45e3503..bfd91d56 100644 --- a/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs +++ b/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs @@ -565,6 +565,16 @@ + + + + + + + + + + @@ -593,23 +603,23 @@ - + - + - + - + - + - + diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs index 3680e837..4afab84d 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs @@ -63,6 +63,9 @@ namespace WebsitePanel.Setup.Actions void IInstallAction.Run(SetupVariables vars) { + if (vars.ComponentExists) + return; + try { OnInstallProgressChanged(LogStartInstallMessage, 0); @@ -232,6 +235,9 @@ namespace WebsitePanel.Setup.Actions { void IInstallAction.Run(SetupVariables vars) { + if (vars.ComponentExists) + return; + try { // @@ -330,6 +336,9 @@ namespace WebsitePanel.Setup.Actions void IInstallAction.Run(SetupVariables vars) { + if (vars.ComponentExists) + return; + try { Log.WriteStart("Updating serveradmin password"); @@ -389,6 +398,9 @@ namespace WebsitePanel.Setup.Actions { void IInstallAction.Run(SetupVariables vars) { + if (vars.ComponentExists) + return; + Log.WriteStart("Updating web.config file (connection string)"); var file = Path.Combine(vars.InstallationFolder, vars.ConfigurationFile); vars.ConnectionString = String.Format(vars.ConnectionString, vars.DatabaseServer, vars.Database, vars.Database, vars.DatabaseUserPassword); diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/ServerActionManager.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/ServerActionManager.cs index 05f14d9d..57f60eb7 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/ServerActionManager.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/ServerActionManager.cs @@ -151,6 +151,8 @@ namespace WebsitePanel.Setup.Actions void IInstallAction.Run(SetupVariables vars) { + if (vars.ComponentExists) + return; // Exit with an error if Windows account with the same name already exists if (SecurityUtils.UserExists(vars.UserDomain, vars.UserAccount)) throw new Exception(UserAccountExists); @@ -394,7 +396,7 @@ namespace WebsitePanel.Setup.Actions } // This flag is the opposite of poolExists flag - vars.NewWebApplicationPool = !poolExists; + vars.NewWebApplicationPool = !poolExists || vars.ComponentExists; if (poolExists) { @@ -501,6 +503,9 @@ namespace WebsitePanel.Setup.Actions void IInstallAction.Run(SetupVariables vars) { + if (vars.ComponentExists) + return; + var siteName = vars.ComponentFullName; var ip = vars.WebSiteIP; var port = vars.WebSitePort; @@ -774,6 +779,9 @@ namespace WebsitePanel.Setup.Actions void IInstallAction.Run(SetupVariables vars) { + if (vars.ComponentExists) + return; + try { Begin(LogStartInstallMessage); diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/FileUtils.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/FileUtils.cs index 8ce06987..ecab1061 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/FileUtils.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/FileUtils.cs @@ -335,10 +335,10 @@ namespace WebsitePanel.Setup return files; } - public static void CopyFileToFolder(string sourceFile, string destinationFolder) + public static void CopyFileToFolder(string sourceFile, string destinationFolder, string destinationFileName = "") { string fileName = Path.GetFileName(sourceFile); - string destinationFile = Path.Combine(destinationFolder, fileName); + string destinationFile = Path.Combine(destinationFolder, string.IsNullOrWhiteSpace(destinationFileName) ? fileName : destinationFileName); CopyFile(new FileInfo(sourceFile), destinationFile); } diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SetupVariables.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SetupVariables.cs index 91184c43..15cbc217 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SetupVariables.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SetupVariables.cs @@ -249,6 +249,11 @@ namespace WebsitePanel.Setup public string BaseDirectory { get; set; } + public string SpecialBaseDirectory { get; set; } + public IDictionary FileNameMap { get; set; } + + public bool ComponentExists { get; set; } + public string UpdateVersion { get; set; } public string EnterpriseServerURL { get; set; } diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs index ea06fd77..2deea1a8 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs @@ -163,6 +163,8 @@ namespace WebsitePanel.Setup.Internal Utils.GetStringSetupParameter(Hash, Global.Parameters.DbServerAdminPassword)); Dst.BaseDirectory = Utils.GetStringSetupParameter(Hash, Global.Parameters.BaseDirectory); + Dst.ComponentId = Utils.GetStringSetupParameter(Hash, Global.Parameters.ComponentId); + Dst.ComponentExists = string.IsNullOrWhiteSpace(Dst.ComponentId) ? false : true; } public static string GetFullConfigPath(SetupVariables Ctx) { @@ -2739,7 +2741,7 @@ namespace WebsitePanel.Setup.Internal BackupDatabase(action.ConnectionString, action.Name); break; case ActionTypes.BackupConfig: - BackupConfig(action.Path, destinationDirectory); + BackupConfig(action.Path, destinationDirectory, action.SetupVariables != null ? action.SetupVariables.FileNameMap : null); break; } } @@ -2755,7 +2757,7 @@ namespace WebsitePanel.Setup.Internal } } - private void BackupConfig(string path, string backupDirectory) + private void BackupConfig(string path, string backupDirectory, IDictionary NameMap = null) { try { @@ -2772,7 +2774,7 @@ namespace WebsitePanel.Setup.Internal string[] files = Directory.GetFiles(path, "*.config", SearchOption.TopDirectoryOnly); foreach (string file in files) { - FileUtils.CopyFileToFolder(file, destination); + FileUtils.CopyFileToFolder(file, destination, GetMappedFileName(file, NameMap)); } Log.WriteEnd("Backed up system configuration"); InstallLog.AppendLine("- Backed up system configuration"); @@ -2786,6 +2788,17 @@ namespace WebsitePanel.Setup.Internal } } + private string GetMappedFileName(string FullFileName, IDictionary Map) + { + if (Map == null) + return ""; + string Key = new FileInfo(FullFileName).Name; + if (Map.Keys.Contains(Key)) + return Map[Key]; + else + return ""; + } + private void BackupDatabase(string connectionString, string database) { try @@ -2881,10 +2894,14 @@ namespace WebsitePanel.Setup.Internal } //config action = new InstallAction(ActionTypes.BackupConfig); - action.Description = "Backing up configuration settings..."; action.Path = Context.BaseDirectory; + action.Description = "Backing up configuration settings..."; + if (!string.IsNullOrWhiteSpace(Context.SpecialBaseDirectory) ) + { + action.Path = Context.SpecialBaseDirectory; + action.SetupVariables = Context; + } list.Add(action); - return list; } private void UpdateWebSiteBindings() @@ -4225,6 +4242,12 @@ namespace WebsitePanel.Setup.Internal WiXThrow = true; }); sam.Start(); + if (Context.ComponentExists) + { + Context.UpdateVersion = Context.Release; + AppConfig.LoadComponentSettings(Context); + new RestoreScript(Context).Run(); + } } catch (Exception ex) { @@ -4303,6 +4326,12 @@ namespace WebsitePanel.Setup.Internal WiXThrow = true; }); sam.Start(); + if(Context.ComponentExists) + { + Context.UpdateVersion = Context.Release; + AppConfig.LoadComponentSettings(Context); + new RestoreScript(Context).Run(); + } } catch (Exception ex) { @@ -4381,6 +4410,12 @@ namespace WebsitePanel.Setup.Internal WiXThrow = true; }); sam.Start(); + if (Context.ComponentExists) + { + Context.UpdateVersion = Context.Release; + AppConfig.LoadComponentSettings(Context); + new RestoreScript(Context).Run(); + } } catch (Exception ex) { diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/CustomAction.cs b/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/CustomAction.cs index ffaf53c2..b268cead 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/CustomAction.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/CustomAction.cs @@ -159,7 +159,7 @@ namespace WebsitePanel.WIXInstaller }; var Ctx = session; - Ctx.AttachToSetupLog(); + Ctx.AttachToSetupLog(); PopUpDebugger(); @@ -181,6 +181,9 @@ namespace WebsitePanel.WIXInstaller { AppConfig.LoadComponentSettings(CtxVars); + SetProperty(Ctx, "COMPFOUND_SERVER_ID", CtxVars.ComponentId); + SetProperty(Ctx, "COMPFOUND_SERVER_MAIN_CFG", CfgPath); + SetProperty(Ctx, "PI_SERVER_IP", CtxVars.WebSiteIP); SetProperty(Ctx, "PI_SERVER_PORT", CtxVars.WebSitePort); SetProperty(Ctx, "PI_SERVER_HOST", CtxVars.WebSiteDomain); @@ -200,6 +203,9 @@ namespace WebsitePanel.WIXInstaller { AppConfig.LoadComponentSettings(CtxVars); + SetProperty(Ctx, "COMPFOUND_ESERVER_ID", CtxVars.ComponentId); + SetProperty(Ctx, "COMPFOUND_ESERVER_MAIN_CFG", CfgPath); + SetProperty(Ctx, "PI_ESERVER_IP", CtxVars.WebSiteIP); SetProperty(Ctx, "PI_ESERVER_PORT", CtxVars.WebSitePort); SetProperty(Ctx, "PI_ESERVER_HOST", CtxVars.WebSiteDomain); @@ -220,7 +226,7 @@ namespace WebsitePanel.WIXInstaller SetProperty(Ctx, "DB_LOGIN", ConnStr.UserID); SetProperty(Ctx, "DB_PASSWORD", ConnStr.Password); } - + var HaveAccount = SecurityUtils.UserExists(CtxVars.UserDomain, CtxVars.UserAccount); bool HavePool = Tool.AppPoolExists(CtxVars.ApplicationPool); @@ -231,6 +237,9 @@ namespace WebsitePanel.WIXInstaller { AppConfig.LoadComponentSettings(CtxVars); + SetProperty(Ctx, "COMPFOUND_PORTAL_ID", CtxVars.ComponentId); + SetProperty(Ctx, "COMPFOUND_PORTAL_MAIN_CFG", CfgPath); + SetProperty(Ctx, "PI_PORTAL_IP", CtxVars.WebSiteIP); SetProperty(Ctx, "PI_PORTAL_PORT", CtxVars.WebSitePort); SetProperty(Ctx, "PI_PORTAL_HOST", CtxVars.WebSiteDomain); @@ -242,7 +251,7 @@ namespace WebsitePanel.WIXInstaller SetProperty(Ctx, "PI_PORTAL_INSTALL_DIR", CtxVars.InstallFolder); SetProperty(Ctx, "WSP_INSTALL_DIR", Directory.GetParent(CtxVars.InstallFolder).FullName); - + var HaveAccount = SecurityUtils.UserExists(CtxVars.UserDomain, CtxVars.UserAccount); bool HavePool = Tool.AppPoolExists(CtxVars.ApplicationPool); @@ -496,7 +505,7 @@ namespace WebsitePanel.WIXInstaller GetConnectionString(session["DB_SERVER"], "master", session["DB_LOGIN"], session["DB_PASSWORD"]); string msg; bool Result = CheckConnection(ConnStr, out msg); - session["DB_CONN_CORRECT"] = Result ? YesNo.Yes: YesNo.No; + session["DB_CONN_CORRECT"] = Result ? YesNo.Yes : YesNo.No; session["DB_CONN"] = Result ? ConnStr : ""; session["DB_CONN_MSG"] = msg; return ActionResult.Success; @@ -799,7 +808,7 @@ namespace WebsitePanel.WIXInstaller private static string GetProperty(Session Ctx, string Property) { if (Ctx.CustomActionData.ContainsKey(Property)) - return Ctx[Property]; + return Ctx.CustomActionData[Property]; else return string.Empty; } @@ -816,11 +825,17 @@ namespace WebsitePanel.WIXInstaller { var CtxVars = new SetupVariables(); WiXSetup.FillFromSession(Ctx.CustomActionData, CtxVars); + AppConfig.LoadConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = GetProperty(Ctx, "MainConfig") }); CtxVars.IISVersion = Tool.GetWebServerVersion(); + CtxVars.ComponentId = GetProperty(Ctx, "ComponentId"); + CtxVars.Version = AppConfig.GetComponentSettingStringValue(CtxVars.ComponentId, Global.Parameters.Release); + CtxVars.SpecialBaseDirectory = Directory.GetParent(GetProperty(Ctx, "MainConfig")).FullName; + CtxVars.FileNameMap = new Dictionary(); + CtxVars.FileNameMap.Add(new FileInfo(GetProperty(Ctx, "MainConfig")).Name, BackupRestore.MainConfig); SetupScript Result = new ExpressScript(CtxVars); Result.Actions.Add(new InstallAction(ActionTypes.StopApplicationPool) { SetupVariables = CtxVars }); Result.Actions.Add(new InstallAction(ActionTypes.Backup) { SetupVariables = CtxVars }); - Result.Actions.Add(new InstallAction(ActionTypes.DeleteDirectory) { SetupVariables = CtxVars }); + Result.Actions.Add(new InstallAction(ActionTypes.DeleteDirectory) { SetupVariables = CtxVars, Path = CtxVars.InstallFolder }); return Result; } } From 68397679db9211c4cd857e8c1fbe63467fbae8d7 Mon Sep 17 00:00:00 2001 From: McMak Date: Wed, 20 May 2015 16:25:46 +0300 Subject: [PATCH 05/16] Installer: old to new update #5 - upd: sql update script. --- WebsitePanel/Database/wix_update_db.sql | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/WebsitePanel/Database/wix_update_db.sql b/WebsitePanel/Database/wix_update_db.sql index deb9d711..05f21309 100644 --- a/WebsitePanel/Database/wix_update_db.sql +++ b/WebsitePanel/Database/wix_update_db.sql @@ -12263,7 +12263,8 @@ SELECT U3.UserID as ItemID, U3.FirstName + '' '' + U3.LastName as TextSearch, @c FROM dbo.Users AS U3) as U WHERE TextSearch<>'' '' OR ISNULL(TextSearch, 0) > 0 ) - AS U ON TU.UserID = U.ItemID' + AS U ON TU.UserID = U.ItemID + ORDER BY TextSearch' SET @sqlUsers = @sqlUsers + ' open @curValue' @@ -12335,7 +12336,7 @@ SET @sqlSpace = @sqlSpace + 'SI.ItemID FROM @ItemsService AS I2 INNER JOIN ServiceItems AS SI2 ON I2.ItemID = SI2.ItemID INNER JOIN ExchangeAccounts AS EA ON I2.ItemID = EA.ItemID -'; + ORDER BY TextSearch'; SET @sqlSpace = @sqlSpace + ' open @curValue' @@ -12362,20 +12363,20 @@ DECLARE @ItemsAll TABLE AccountID int ) -FETCH NEXT FROM @curSpaceValue INTO @ItemID, @TextSearch, @ColumnType, @FullType, @PackageID, @AccountID +FETCH NEXT FROM @curUsersValue INTO @ItemID, @TextSearch, @ColumnType, @FullType, @PackageID, @AccountID WHILE @@FETCH_STATUS = 0 BEGIN INSERT INTO @ItemsAll(ItemID, TextSearch, ColumnType, FullType, PackageID, AccountID) VALUES(@ItemID, @TextSearch, @ColumnType, @FullType, @PackageID, @AccountID) -FETCH NEXT FROM @curSpaceValue INTO @ItemID, @TextSearch, @ColumnType, @FullType, @PackageID, @AccountID +FETCH NEXT FROM @curUsersValue INTO @ItemID, @TextSearch, @ColumnType, @FullType, @PackageID, @AccountID END -FETCH NEXT FROM @curUsersValue INTO @ItemID, @TextSearch, @ColumnType, @FullType, @PackageID, @AccountID +FETCH NEXT FROM @curSpaceValue INTO @ItemID, @TextSearch, @ColumnType, @FullType, @PackageID, @AccountID WHILE @@FETCH_STATUS = 0 BEGIN INSERT INTO @ItemsAll(ItemID, TextSearch, ColumnType, FullType, PackageID, AccountID) VALUES(@ItemID, @TextSearch, @ColumnType, @FullType, @PackageID, @AccountID) -FETCH NEXT FROM @curUsersValue INTO @ItemID, @TextSearch, @ColumnType, @FullType, @PackageID, @AccountID +FETCH NEXT FROM @curSpaceValue INTO @ItemID, @TextSearch, @ColumnType, @FullType, @PackageID, @AccountID END DECLARE @ItemsReturn TABLE @@ -12402,8 +12403,6 @@ SET @sqlReturn = @sqlReturn + ' AND IA.FullType = ''' + @FullType + ''''; IF @FilterValue <> '' SET @sqlReturn = @sqlReturn + ' AND IA.' + @FilterColumn + ' LIKE @FilterValue ' -IF @SortColumn <> '' AND @SortColumn IS NOT NULL -SET @sqlReturn = @sqlReturn + ' ORDER BY ' + @SortColumn + ' ' SET @sqlReturn = @sqlReturn + ' SELECT COUNT(ItemID) FROM @ItemsReturn; SELECT DISTINCT(ColumnType) FROM @ItemsReturn WHERE (1 = 1) '; From faee7a4315dfefd1b1037f9410eb355d6d97e89d Mon Sep 17 00:00:00 2001 From: McMak Date: Thu, 21 May 2015 10:48:54 +0300 Subject: [PATCH 06/16] Installer: old to new update #5 - old to new update, wix sql fixes. --- .../Sources/Setup.WIXInstaller/Product.wxs | 37 ++++++++++++------- .../Actions/EntServerActionManager.cs | 14 +------ .../Actions/ServerActionManager.cs | 12 +----- .../WebsitePanel.Setup/Internal/Adapter.cs | 22 +---------- .../WebsitePanel.WIXInstaller/CustomAction.cs | 3 +- 5 files changed, 31 insertions(+), 57 deletions(-) diff --git a/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs b/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs index bfd91d56..42f1f4e9 100644 --- a/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs +++ b/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs @@ -707,15 +707,21 @@ NOT (Remove="ALL") AND NOT(DB_AUTH = "Windows Authentication") - - - + + + + + + (NOT Installed AND NOT WIX_UPGRADE_DETECTED) AND (DB_AUTH = "Windows Authentication") AND (COMPFOUND_ESERVER="0") @@ -729,13 +735,18 @@ NOT (Remove="ALL") AND (DB_AUTH = "Windows Authentication") - + - + Sequence="11" ContinueOnError="no" ExecuteOnInstall="yes" ExecuteOnReinstall="yes" ExecuteOnUninstall="no"/> + + diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs index 4afab84d..52cf5a85 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs @@ -63,9 +63,6 @@ namespace WebsitePanel.Setup.Actions void IInstallAction.Run(SetupVariables vars) { - if (vars.ComponentExists) - return; - try { OnInstallProgressChanged(LogStartInstallMessage, 0); @@ -235,10 +232,7 @@ namespace WebsitePanel.Setup.Actions { void IInstallAction.Run(SetupVariables vars) { - if (vars.ComponentExists) - return; - - try + try { // Log.WriteStart(String.Format("Creating database user {0}", vars.Database)); @@ -336,9 +330,6 @@ namespace WebsitePanel.Setup.Actions void IInstallAction.Run(SetupVariables vars) { - if (vars.ComponentExists) - return; - try { Log.WriteStart("Updating serveradmin password"); @@ -398,9 +389,6 @@ namespace WebsitePanel.Setup.Actions { void IInstallAction.Run(SetupVariables vars) { - if (vars.ComponentExists) - return; - Log.WriteStart("Updating web.config file (connection string)"); var file = Path.Combine(vars.InstallationFolder, vars.ConfigurationFile); vars.ConnectionString = String.Format(vars.ConnectionString, vars.DatabaseServer, vars.Database, vars.Database, vars.DatabaseUserPassword); diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/ServerActionManager.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/ServerActionManager.cs index 57f60eb7..5314f724 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/ServerActionManager.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/ServerActionManager.cs @@ -151,8 +151,6 @@ namespace WebsitePanel.Setup.Actions void IInstallAction.Run(SetupVariables vars) { - if (vars.ComponentExists) - return; // Exit with an error if Windows account with the same name already exists if (SecurityUtils.UserExists(vars.UserDomain, vars.UserAccount)) throw new Exception(UserAccountExists); @@ -503,10 +501,7 @@ namespace WebsitePanel.Setup.Actions void IInstallAction.Run(SetupVariables vars) { - if (vars.ComponentExists) - return; - - var siteName = vars.ComponentFullName; + var siteName = vars.ComponentFullName; var ip = vars.WebSiteIP; var port = vars.WebSitePort; var domain = vars.WebSiteDomain; @@ -779,10 +774,7 @@ namespace WebsitePanel.Setup.Actions void IInstallAction.Run(SetupVariables vars) { - if (vars.ComponentExists) - return; - - try + try { Begin(LogStartInstallMessage); // diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs index 2deea1a8..8a3dca10 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs @@ -198,7 +198,7 @@ namespace WebsitePanel.Setup.Internal var mup = "MODE_UP"; var mrup = "MODE_RUP"; var Result = ModeExtension.Normal; - if (Src.Keys.Contains(mup) && !string.IsNullOrWhiteSpace(Src[mup])) + if ((Src.Keys.Contains(mup) && !string.IsNullOrWhiteSpace(Src[mup])) || (Src.Keys.Contains("ComponentId") && !string.IsNullOrWhiteSpace(Src["ComponentId"]))) Result = ModeExtension.Restore; else if (Src.Keys.Contains(mrup) && !string.IsNullOrWhiteSpace(Src[mrup])) Result = ModeExtension.Backup; @@ -3943,7 +3943,7 @@ namespace WebsitePanel.Setup.Internal XmlDocumentMerge.KeyAttributes = new List { "name", "id", "key", "pageID", "localName", "xmlns", "privatePath", "moduleDefinitionID", "ref", "verb;path", "controlRenderingCompatibilityVersion;clientIDMode" }; XmlDocumentMerge.FrozenAttributes = new List { - new XmlDocumentMerge.FrozenAttrTag() { Path="configuration/microsoft.web.services3/security/securityTokenManager/add", Attributes = new List() {"localName"} }, + new XmlDocumentMerge.FrozenAttrTag() { Path="configuration/microsoft.web.services3/security/securityTokenManager/add", Attributes = new List() {"type"} }, new XmlDocumentMerge.FrozenAttrTag(true) { Path="compilation", Attributes = new List() {"targetFramework"} }, new XmlDocumentMerge.FrozenAttrTag() { Path="configuration/startup/supportedRuntime", Attributes = new List() {"version", "sku" } } }; @@ -4242,12 +4242,6 @@ namespace WebsitePanel.Setup.Internal WiXThrow = true; }); sam.Start(); - if (Context.ComponentExists) - { - Context.UpdateVersion = Context.Release; - AppConfig.LoadComponentSettings(Context); - new RestoreScript(Context).Run(); - } } catch (Exception ex) { @@ -4326,12 +4320,6 @@ namespace WebsitePanel.Setup.Internal WiXThrow = true; }); sam.Start(); - if(Context.ComponentExists) - { - Context.UpdateVersion = Context.Release; - AppConfig.LoadComponentSettings(Context); - new RestoreScript(Context).Run(); - } } catch (Exception ex) { @@ -4410,12 +4398,6 @@ namespace WebsitePanel.Setup.Internal WiXThrow = true; }); sam.Start(); - if (Context.ComponentExists) - { - Context.UpdateVersion = Context.Release; - AppConfig.LoadComponentSettings(Context); - new RestoreScript(Context).Run(); - } } catch (Exception ex) { diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/CustomAction.cs b/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/CustomAction.cs index b268cead..70cffceb 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/CustomAction.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/CustomAction.cs @@ -219,13 +219,14 @@ namespace WebsitePanel.WIXInstaller var ConnStr = new SqlConnectionStringBuilder(CtxVars.DbInstallConnectionString); SetProperty(Ctx, "DB_CONN", ConnStr.ToString()); SetProperty(Ctx, "DB_SERVER", ConnStr.DataSource); - SetProperty(Ctx, "DB_DATABASE", ConnStr.InitialCatalog); SetProperty(Ctx, "DB_AUTH", ConnStr.IntegratedSecurity ? SQL_AUTH_WINDOWS : SQL_AUTH_SERVER); if (!ConnStr.IntegratedSecurity) { SetProperty(Ctx, "DB_LOGIN", ConnStr.UserID); SetProperty(Ctx, "DB_PASSWORD", ConnStr.Password); } + ConnStr = new SqlConnectionStringBuilder(CtxVars.ConnectionString); + SetProperty(Ctx, "DB_DATABASE", ConnStr.InitialCatalog); var HaveAccount = SecurityUtils.UserExists(CtxVars.UserDomain, CtxVars.UserAccount); bool HavePool = Tool.AppPoolExists(CtxVars.ApplicationPool); From 27c5009510c8e2b7ec2d3d354a4f4c6bddb00ba7 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Thu, 21 May 2015 05:01:17 -0700 Subject: [PATCH 07/16] Password Expiration link destination changed --- .../HostedSolution/OrganizationController.cs | 5 ++--- WebsitePanel/Sources/WebsitePanel.WebDavPortal/Web.config | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs index e33e9be2..40211154 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs @@ -1945,10 +1945,9 @@ namespace WebsitePanel.EnterpriseServer SendUserPasswordEmail(owner, user, reason, mailTo, logoUrl, UserSettings.USER_PASSWORD_REQUEST_LETTER, "USER_PASSWORD_REQUEST_LETTER", finalStep); } - public static void SendUserExpirationPasswordEmail(UserInfo owner, OrganizationUser user, string reason, - string mailTo, string logoUrl) + public static void SendUserExpirationPasswordEmail(UserInfo owner, OrganizationUser user, string reason, string mailTo, string logoUrl) { - SendUserPasswordEmail(owner, user, reason, user.PrimaryEmailAddress, logoUrl, UserSettings.USER_PASSWORD_EXPIRATION_LETTER, "USER_PASSWORD_EXPIRATION_LETTER", false); + SendUserPasswordEmail(owner, user, reason, user.PrimaryEmailAddress, logoUrl, UserSettings.USER_PASSWORD_EXPIRATION_LETTER, "USER_PASSWORD_EXPIRATION_LETTER", true); } public static void SendUserPasswordEmail(UserInfo owner, OrganizationUser user, string reason, string mailTo, string logoUrl, string settingsName, string taskName, bool finalStep) diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Web.config b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Web.config index 1e2c7eb8..4ecdcebc 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Web.config +++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Web.config @@ -87,7 +87,7 @@ - + From 848cbd4bb1d68b93cf37e9579daf91046d38dccd Mon Sep 17 00:00:00 2001 From: McMak Date: Thu, 21 May 2015 15:49:02 +0300 Subject: [PATCH 08/16] Installer: old to new update #6 - add scheduler service registration. --- .../Common/InstallAction.cs | 3 +- .../Common/SetupVariables.cs | 6 +- .../WebsitePanel.Setup/Internal/Adapter.cs | 148 +++++++++++++----- 3 files changed, 119 insertions(+), 38 deletions(-) diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/InstallAction.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/InstallAction.cs index 6cfa5953..832de5ff 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/InstallAction.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/InstallAction.cs @@ -89,7 +89,8 @@ namespace WebsitePanel.Setup SwitchEntServer2AspNet40, SwitchWebPortal2AspNet40, ConfigureSecureSessionModuleInWebConfig, - RestoreConfig + RestoreConfig, + UpdateXml } public class InstallAction diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SetupVariables.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SetupVariables.cs index 15cbc217..4f5fd3fb 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SetupVariables.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SetupVariables.cs @@ -251,7 +251,8 @@ namespace WebsitePanel.Setup public string SpecialBaseDirectory { get; set; } public IDictionary FileNameMap { get; set; } - + public IDictionary SessionVariables { get; set; } + public IDictionary XmlData { get; set; } // XPath, Value. public bool ComponentExists { get; set; } public string UpdateVersion { get; set; } @@ -283,7 +284,8 @@ namespace WebsitePanel.Setup public string ServiceName { get; set; } public string ConfigurationFile { get; set; } - + private bool m_UseUserCredentials = true; + public bool UseUserCredentials { get { return m_UseUserCredentials; } set { m_UseUserCredentials = value; } } public string ServiceFile { get; set; } public string LicenseKey { get; set; } diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs index 8a3dca10..1a8d8469 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs @@ -7,8 +7,10 @@ using System.Configuration.Install; using System.Data; using System.Diagnostics; using System.IO; +using System.Linq; using System.Reflection; using System.Runtime.Serialization; +using System.ServiceProcess; using System.Text; using System.Text.RegularExpressions; using System.Xml; @@ -165,6 +167,9 @@ namespace WebsitePanel.Setup.Internal Dst.BaseDirectory = Utils.GetStringSetupParameter(Hash, Global.Parameters.BaseDirectory); Dst.ComponentId = Utils.GetStringSetupParameter(Hash, Global.Parameters.ComponentId); Dst.ComponentExists = string.IsNullOrWhiteSpace(Dst.ComponentId) ? false : true; + + Dst.UpdateVersion = Utils.GetStringSetupParameter(Hash, "Version"); + Dst.SessionVariables = Src; } public static string GetFullConfigPath(SetupVariables Ctx) { @@ -406,6 +411,9 @@ namespace WebsitePanel.Setup.Internal case ActionTypes.RestoreConfig: RestoreXmlConfigs(Execute.SetupVariables); break; + case ActionTypes.UpdateXml: + UpdateXml(Execute.Path, Execute.SetupVariables.XmlData); + break; } } catch (Exception ex) @@ -2167,39 +2175,54 @@ namespace WebsitePanel.Setup.Internal try { string componentId = Context.ComponentId; - string path = Path.Combine(Context.InstallationFolder, Context.ServiceFile); + string path = Context.ServiceFile; // FullFileName. string service = Context.ServiceName; + + Log.WriteStart(string.Format("Registering \"{0}\" windows service", service)); + if (!File.Exists(path)) { Log.WriteError(string.Format("File {0} not found", path), null); return; } - - Log.WriteStart(string.Format("Registering \"{0}\" windows service", service)); - string domain = Context.UserDomain; - if (string.IsNullOrEmpty(domain)) - domain = "."; - string arguments = string.Format("/i /LogFile=\"\" /user={0}\\{1} /password={2}", - domain, Context.UserAccount, Context.UserPassword); - int exitCode = Utils.RunProcess(path, arguments); - if (exitCode == 0) + if (ServiceController.GetServices().Any(s => s.DisplayName.Equals(service, StringComparison.CurrentCultureIgnoreCase))) { + var Msg = string.Format("Service \"{0}\" already installed.", service); + Log.WriteEnd(Msg); + InstallLog.AppendLine(Msg); + } + try + { + string domain = Context.UserDomain; + if (string.IsNullOrEmpty(domain)) + domain = "."; + + string arguments = string.Empty; + if (Context.UseUserCredentials) + arguments = string.Format("/i /LogFile=\"\" /user={0}\\{1} /password={2}", domain, Context.UserAccount, Context.UserPassword); + else + arguments = "/i /LogFile= ''"; + + ManagedInstallerClass.InstallHelper(new[] { arguments, path }); //add rollback action RollBack.RegisterWindowsService(path, service); - + var Msg = string.Format("Registered \"{0}\" Windows service ", service); //update log - Log.WriteEnd("Registered windows service"); + Log.WriteEnd(Msg); //update install log - InstallLog.AppendLine(string.Format("- Registered \"{0}\" Windows service ", service)); + InstallLog.AppendLine(Msg); + + // update config setings + AppConfig.EnsureComponentConfig(componentId); + AppConfig.SetComponentSettingStringValue(componentId, "ServiceName", service); + AppConfig.SetComponentSettingStringValue(componentId, "ServiceFile", path); + AppConfig.SaveConfiguration(); } - else + catch (Exception ex) { - Log.WriteError(string.Format("Unable to register \"{0}\" Windows service. Error code: {1}", service, exitCode), null); + Log.WriteError(string.Format("Unable to register \"{0}\" Windows service.", service), null); InstallLog.AppendLine(string.Format("- Failed to register \"{0}\" windows service ", service)); - } - // update config setings - AppConfig.SetComponentSettingStringValue(componentId, "ServiceName", Context.ServiceName); - AppConfig.SetComponentSettingStringValue(componentId, "ServiceFile", Context.ServiceFile); + } } catch (Exception ex) { @@ -3793,9 +3816,9 @@ namespace WebsitePanel.Setup.Internal { //update settings AppConfig.SetComponentSettingStringValue(componentId, "Release", Context.UpdateVersion); - AppConfig.SetComponentSettingStringValue(componentId, "Installer", Context.Installer); - AppConfig.SetComponentSettingStringValue(componentId, "InstallerType", Context.InstallerType); - AppConfig.SetComponentSettingStringValue(componentId, "InstallerPath", Context.InstallerPath); + AppConfig.SetComponentSettingStringValue(componentId, "Installer", Context.SessionVariables["Installer"]); + AppConfig.SetComponentSettingStringValue(componentId, "InstallerType", Context.SessionVariables["InstallerType"]); + AppConfig.SetComponentSettingStringValue(componentId, "InstallerPath", Context.SessionVariables["InstallerPath"]); } Log.WriteInfo("Saving system configuration"); @@ -3989,6 +4012,52 @@ namespace WebsitePanel.Setup.Internal throw; } } + private void UpdateXml(string FullFileName, IDictionary Data) + { + var Msg = "Update xml files."; + try + { + Log.WriteStart(Msg); + if (!File.Exists(FullFileName)) + throw new FileNotFoundException(FullFileName); + var Doc = new XmlDocument(); + Doc.Load(FullFileName); + foreach(var Key in Data.Keys) + { + var Node = Doc.SelectSingleNode(Key) as XmlElement; + if (Node == null) + { + Log.WriteInfo(string.Format("XPath \"{0}\" not found.", Key)); + } + else + { + var Value = Data[Key]; + switch (Value.Length) + { + case 1: + Node.Value = Value[0]; + break; + case 2: + Node.SetAttribute(Value[0], Value[1]); + break; + default: + Log.WriteError(string.Format("Bad xml value for \"{0}\".", Key)); + break; + } + } + } + Doc.Save(FullFileName); + } + catch (Exception ex) + { + Log.WriteError(ex.ToString()); + throw; + } + finally + { + Log.WriteEnd(Msg); + } + } } public class UninstallScript : SetupScript // UninstallPage { @@ -4000,7 +4069,6 @@ namespace WebsitePanel.Setup.Internal { var list = base.GetActions(componentId); InstallAction action = null; - //windows service string serviceName = AppConfig.GetComponentSettingStringValue(componentId, "ServiceName"); string serviceFile = AppConfig.GetComponentSettingStringValue(componentId, "ServiceFile"); @@ -4008,16 +4076,18 @@ namespace WebsitePanel.Setup.Internal if (!string.IsNullOrEmpty(serviceName) && !string.IsNullOrEmpty(serviceFile)) { action = new InstallAction(ActionTypes.UnregisterWindowsService); - action.Path = Path.Combine(installFolder, serviceFile); + action.Path = serviceFile; // FullFileName. action.Name = serviceName; action.Description = "Removing Windows service..."; action.Log = string.Format("- Remove {0} Windows service", serviceName); list.Add(action); } - //database bool deleteDatabase = AppConfig.GetComponentSettingBooleanValue(componentId, "NewDatabase"); - if (deleteDatabase) + bool allowDelete = true; + if (Context.InstallerType.ToLowerInvariant().Equals("msi")) // DB handled by MSI (WiX) by default. + allowDelete = false; + if (deleteDatabase && allowDelete) { string connectionString = AppConfig.GetComponentSettingStringValue(componentId, "InstallConnectionString"); string database = AppConfig.GetComponentSettingStringValue(componentId, "Database"); @@ -4053,7 +4123,6 @@ namespace WebsitePanel.Setup.Internal action.Log = string.Format("- Delete {0} database login", loginName); list.Add(action); } - //virtual directory bool deleteVirtualDirectory = AppConfig.GetComponentSettingBooleanValue(componentId, "NewVirtualDirectory"); if (deleteVirtualDirectory) @@ -4067,7 +4136,6 @@ namespace WebsitePanel.Setup.Internal action.Log = string.Format("- Delete {0} virtual directory...", virtualDirectory); list.Add(action); } - //web site bool deleteWebSite = AppConfig.GetComponentSettingBooleanValue(componentId, "NewWebSite"); if (deleteWebSite) @@ -4079,7 +4147,6 @@ namespace WebsitePanel.Setup.Internal action.Log = string.Format("- Delete {0} web site", siteId); list.Add(action); } - //application pool bool deleteAppPool = AppConfig.GetComponentSettingBooleanValue(componentId, "NewApplicationPool"); if (deleteAppPool) @@ -4093,7 +4160,6 @@ namespace WebsitePanel.Setup.Internal action.Log = string.Format("- Delete {0} application pool", appPoolName); list.Add(action); } - //user account bool deleteUserAccount = AppConfig.GetComponentSettingBooleanValue(componentId, "NewUserAccount"); if (deleteUserAccount) @@ -4111,7 +4177,6 @@ namespace WebsitePanel.Setup.Internal action.Log = string.Format("- Remove {0} user account membership", username); list.Add(action); } - action = new InstallAction(ActionTypes.DeleteUserAccount); action.Name = username; action.Domain = domain; @@ -4253,7 +4318,6 @@ namespace WebsitePanel.Setup.Internal else if (ModeExtension == ModeExtension.Restore) { Context.ComponentId = GetComponentID(Context); - Context.UpdateVersion = Context.Release; AppConfig.LoadComponentSettings(Context); new RestoreScript(Context).Run(); } @@ -4331,9 +4395,24 @@ namespace WebsitePanel.Setup.Internal else if (ModeExtension == ModeExtension.Restore) { Context.ComponentId = GetComponentID(Context); - Context.UpdateVersion = Context.Release; + Context.UseUserCredentials = false; AppConfig.LoadComponentSettings(Context); - new RestoreScript(Context).Run(); + if (string.IsNullOrWhiteSpace(Context.ServiceName) || string.IsNullOrWhiteSpace(Context.ServiceFile)) + { + Context.ServiceName = Global.Parameters.SchedulerServiceName; + Context.ServiceFile = Path.Combine(Context.InstallationFolder, "bin", Global.Parameters.SchedulerServiceFileName); + } + SetupScript Script = new RestoreScript(Context); + Script.Run(); + Script = new ExpressScript(Context); + var XmlUp = new Dictionary(); + XmlUp.Add("configuration/connectionStrings/add[@name='EnterpriseServer']", new string[] {"connectionString", Context.ConnectionString}); + XmlUp.Add("configuration/appSettings/add[@key='WebsitePanel.CryptoKey']", new string[] {"value", Context.CryptoKey }); + Context.XmlData = XmlUp; + Script.Actions.Add(new InstallAction(ActionTypes.UpdateXml) { SetupVariables = Context, Path = string.Format("{0}.config", Context.ServiceFile) }); + Script.Actions.Add(new InstallAction(ActionTypes.RegisterWindowsService)); + Script.Actions.Add(new InstallAction(ActionTypes.StartWindowsService)); + Script.Run(); } else throw new NotImplementedException("Install " + ModeExtension.ToString()); @@ -4409,7 +4488,6 @@ namespace WebsitePanel.Setup.Internal else if (ModeExtension == ModeExtension.Restore) { Context.ComponentId = GetComponentID(Context); - Context.UpdateVersion = Context.Release; AppConfig.LoadComponentSettings(Context); new RestoreScript(Context).Run(); } From 7e03ed1bdedc7bd04ce7e3eca572661d51eb6465 Mon Sep 17 00:00:00 2001 From: McMak Date: Thu, 21 May 2015 15:53:45 +0300 Subject: [PATCH 09/16] Installer: old to new update #7 - upd: sql update script. --- WebsitePanel/Database/wix_update_db.sql | 118 +++++++++++++++++------- 1 file changed, 87 insertions(+), 31 deletions(-) diff --git a/WebsitePanel/Database/wix_update_db.sql b/WebsitePanel/Database/wix_update_db.sql index 05f21309..6fe1c681 100644 --- a/WebsitePanel/Database/wix_update_db.sql +++ b/WebsitePanel/Database/wix_update_db.sql @@ -12205,7 +12205,7 @@ SET @columnFullName = 'FullName' DECLARE @curUsers cursor DECLARE @curSpace cursor -DECLARE @sqlSpace nvarchar(2000) +DECLARE @sqlSpace nvarchar(3000) DECLARE @sqlUsers nvarchar(2000) DECLARE @sqlReturn nvarchar(4000) @@ -12221,12 +12221,8 @@ DECLARE @Users TABLE UserID int ) INSERT INTO @Users (UserID) -SELECT ' - -IF @OnlyFind = 1 -SET @sqlUsers = @sqlUsers + 'TOP ' + CAST(@MaximumRows AS varchar(12)) + ' ' - -SET @sqlUsers = @sqlUsers + 'U.UserID +SELECT + U.UserID FROM UsersDetailed AS U WHERE U.UserID <> @UserID AND U.IsPeer = 0 AND @@ -12238,8 +12234,12 @@ WHERE AND ((@RoleID = 0) OR (@RoleID > 0 AND U.RoleID = @RoleID)) AND @HasUserRights = 1 SET @curValue = cursor local for -SELECT - U.ItemID, +SELECT ' + +IF @OnlyFind = 1 +SET @sqlUsers = @sqlUsers + 'TOP ' + CAST(@MaximumRows AS varchar(12)) + ' ' + +SET @sqlUsers = @sqlUsers + 'U.ItemID, U.TextSearch, U.ColumnType, ''Users'' as FullType, @@ -12263,8 +12263,10 @@ SELECT U3.UserID as ItemID, U3.FirstName + '' '' + U3.LastName as TextSearch, @c FROM dbo.Users AS U3) as U WHERE TextSearch<>'' '' OR ISNULL(TextSearch, 0) > 0 ) - AS U ON TU.UserID = U.ItemID - ORDER BY TextSearch' + AS U ON TU.UserID = U.ItemID' +IF @FilterValue <> '' + SET @sqlUsers = @sqlUsers + ' WHERE TextSearch LIKE ''' + @FilterValue + '''' +SET @sqlUsers = @sqlUsers + ' ORDER BY TextSearch' SET @sqlUsers = @sqlUsers + ' open @curValue' @@ -12277,12 +12279,8 @@ SET @sqlSpace = ' ItemID int ) INSERT INTO @ItemsService (ItemID) - SELECT ' - -IF @OnlyFind = 1 -SET @sqlSpace = @sqlSpace + 'TOP ' + CAST(@MaximumRows AS varchar(12)) + ' ' - -SET @sqlSpace = @sqlSpace + 'SI.ItemID + SELECT + SI.ItemID FROM ServiceItems AS SI INNER JOIN Packages AS P ON P.PackageID = SI.PackageID INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID @@ -12302,8 +12300,12 @@ SET @sqlSpace = @sqlSpace + 'SI.ItemID dbo.CheckUserParent(@UserID, P.UserID) = 1 SET @curValue = cursor local for - SELECT - + SELECT ' + +IF @OnlyFind = 1 +SET @sqlSpace = @sqlSpace + 'TOP ' + CAST(@MaximumRows AS varchar(12)) + ' ' + +SET @sqlSpace = @sqlSpace + ' SI.ItemID as ItemID, SI.ItemName as TextSearch, STYPE.DisplayName as ColumnType, @@ -12313,9 +12315,17 @@ SET @sqlSpace = @sqlSpace + 'SI.ItemID FROM @ItemsService AS I INNER JOIN ServiceItems AS SI ON I.ItemID = SI.ItemID INNER JOIN ServiceItemTypes AS STYPE ON SI.ItemTypeID = STYPE.ItemTypeID - WHERE STYPE.Searchable = 1 - UNION - SELECT + WHERE (STYPE.Searchable = 1)' +IF @FilterValue <> '' + SET @sqlSpace = @sqlSpace + ' AND (SI.ItemName LIKE ''' + @FilterValue + ''')' +SET @sqlSpace = @sqlSpace + ' + UNION ( + SELECT ' + +IF @OnlyFind = 1 +SET @sqlSpace = @sqlSpace + 'TOP ' + CAST(@MaximumRows AS varchar(12)) + ' ' + +SET @sqlSpace = @sqlSpace + ' D.DomainID AS ItemID, D.DomainName as TextSearch, ''Domain'' as ColumnType, @@ -12324,19 +12334,68 @@ SET @sqlSpace = @sqlSpace + 'SI.ItemID 0 as AccountID FROM @ItemsDomain AS I INNER JOIN Domains AS D ON I.ItemID = D.DomainID - WHERE D.IsDomainPointer=0 + WHERE (D.IsDomainPointer=0)' +IF @FilterValue <> '' + SET @sqlSpace = @sqlSpace + ' AND (D.DomainName LIKE ''' + @FilterValue + ''')' +SET @sqlSpace = @sqlSpace + ' UNION - SELECT + SELECT ' + +IF @OnlyFind = 1 +SET @sqlSpace = @sqlSpace + 'TOP ' + CAST(@MaximumRows AS varchar(12)) + ' ' + +SET @sqlSpace = @sqlSpace + ' EA.ItemID AS ItemID, - EA.AccountName as TextSearch, + EA.DisplayName as TextSearch, ''ExchangeAccount'' as ColumnType, - ''ExchangeAccountMailbox'' as FullType, + ''ExchangeAccount'' as FullType, SI2.PackageID as PackageID, EA.AccountID as AccountID FROM @ItemsService AS I2 INNER JOIN ServiceItems AS SI2 ON I2.ItemID = SI2.ItemID - INNER JOIN ExchangeAccounts AS EA ON I2.ItemID = EA.ItemID - ORDER BY TextSearch'; + INNER JOIN ExchangeAccounts AS EA ON I2.ItemID = EA.ItemID' +IF @FilterValue <> '' + SET @sqlSpace = @sqlSpace + ' WHERE (EA.DisplayName LIKE ''' + @FilterValue + ''')' +SET @sqlSpace = @sqlSpace + ' + UNION + SELECT ' + +IF @OnlyFind = 1 +SET @sqlSpace = @sqlSpace + 'TOP ' + CAST(@MaximumRows AS varchar(12)) + ' ' + +SET @sqlSpace = @sqlSpace + ' + EA4.ItemID AS ItemID, + EA4.PrimaryEmailAddress as TextSearch, + ''ExchangeAccount'' as ColumnType, + ''ExchangeAccount'' as FullType, + SI4.PackageID as PackageID, + EA4.AccountID as AccountID + FROM @ItemsService AS I4 + INNER JOIN ServiceItems AS SI4 ON I4.ItemID = SI4.ItemID + INNER JOIN ExchangeAccounts AS EA4 ON I4.ItemID = EA4.ItemID' +IF @FilterValue <> '' + SET @sqlSpace = @sqlSpace + ' WHERE (EA4.PrimaryEmailAddress LIKE ''' + @FilterValue + ''')' +SET @sqlSpace = @sqlSpace + ' + UNION + SELECT ' + +IF @OnlyFind = 1 +SET @sqlSpace = @sqlSpace + 'TOP ' + CAST(@MaximumRows AS varchar(12)) + ' ' + +SET @sqlSpace = @sqlSpace + ' + EA3.ItemID AS ItemID, + EAEA.EmailAddress as TextSearch, + ''ExchangeAccount'' as ColumnType, + ''ExchangeAccount'' as FullType, + SI3.PackageID as PackageID, + EA3.AccountID as AccountID + FROM @ItemsService AS I3 + INNER JOIN ServiceItems AS SI3 ON I3.ItemID = SI3.ItemID + INNER JOIN ExchangeAccounts AS EA3 ON I3.ItemID = EA3.ItemID + INNER JOIN ExchangeAccountEmailAddresses AS EAEA ON I3.ItemID = EAEA.AccountID' +IF @FilterValue <> '' + SET @sqlSpace = @sqlSpace + ' WHERE (EAEA.EmailAddress LIKE ''' + @FilterValue + ''')' +SET @sqlSpace = @sqlSpace + ') ORDER BY TextSearch'; SET @sqlSpace = @sqlSpace + ' open @curValue' @@ -12400,9 +12459,6 @@ SET @sqlReturn = @sqlReturn + ' AND IA.ColumnType in ( ' + @ColType + ' ) '; IF @FullType <> '' SET @sqlReturn = @sqlReturn + ' AND IA.FullType = ''' + @FullType + ''''; -IF @FilterValue <> '' -SET @sqlReturn = @sqlReturn + ' AND IA.' + @FilterColumn + ' LIKE @FilterValue ' - SET @sqlReturn = @sqlReturn + ' SELECT COUNT(ItemID) FROM @ItemsReturn; SELECT DISTINCT(ColumnType) FROM @ItemsReturn WHERE (1 = 1) '; From 0da4bc24635f960bbf919cd4fdba0274bd4f3d3f Mon Sep 17 00:00:00 2001 From: doctogonzo Date: Thu, 21 May 2015 15:46:48 +0200 Subject: [PATCH 10/16] quick search: new service items types localization add --- .../WebsitePanel_SharedResources.ascx.resx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx index 5788b660..5fc546d2 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx @@ -4368,6 +4368,12 @@ Virtual Switch + + SharePoint Foundation Site Collection + + + SharePoint Enterprise Site Collection + Assigning external IP addresses From 6f9e35ba24ab38fefb4da21868f60fb56aa5682f Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Thu, 21 May 2015 09:49:49 -0400 Subject: [PATCH 11/16] Added tag build-2.1.0.735 for changeset b7c802605ced From 4526a6b8d95e691bb6baa9129841e23d2857d346 Mon Sep 17 00:00:00 2001 From: McMak Date: Thu, 21 May 2015 16:51:10 +0300 Subject: [PATCH 12/16] Installer: old to new update #8 - upd: sql update script. --- WebsitePanel/Database/wix_update_db.sql | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/WebsitePanel/Database/wix_update_db.sql b/WebsitePanel/Database/wix_update_db.sql index 6fe1c681..7eac7a0e 100644 --- a/WebsitePanel/Database/wix_update_db.sql +++ b/WebsitePanel/Database/wix_update_db.sql @@ -12383,15 +12383,14 @@ IF @OnlyFind = 1 SET @sqlSpace = @sqlSpace + 'TOP ' + CAST(@MaximumRows AS varchar(12)) + ' ' SET @sqlSpace = @sqlSpace + ' - EA3.ItemID AS ItemID, + I3.ItemID AS ItemID, EAEA.EmailAddress as TextSearch, ''ExchangeAccount'' as ColumnType, ''ExchangeAccount'' as FullType, SI3.PackageID as PackageID, - EA3.AccountID as AccountID + 0 as AccountID FROM @ItemsService AS I3 INNER JOIN ServiceItems AS SI3 ON I3.ItemID = SI3.ItemID - INNER JOIN ExchangeAccounts AS EA3 ON I3.ItemID = EA3.ItemID INNER JOIN ExchangeAccountEmailAddresses AS EAEA ON I3.ItemID = EAEA.AccountID' IF @FilterValue <> '' SET @sqlSpace = @sqlSpace + ' WHERE (EAEA.EmailAddress LIKE ''' + @FilterValue + ''')' From e8611352ea600728d68a564501f50725f931ef86 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Thu, 21 May 2015 10:07:30 -0400 Subject: [PATCH 13/16] Added tag build-2.1.0.737 for changeset 5a2a10169872 From 847cf07f8404ee4a738dac89408bfeb45d468d79 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Thu, 21 May 2015 10:17:17 -0400 Subject: [PATCH 14/16] Added tag build-2.1.0.738 for changeset 5af7ce985088 From 0211ac4957e20e48ad7d9f134096bcc4dc87418f Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Thu, 21 May 2015 10:27:05 -0400 Subject: [PATCH 15/16] Added tag build-2.1.0.739 for changeset b0b8bafce4b5 From 9bce727a65a7f515b1447ccde2ecad86dfd9fba7 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Thu, 21 May 2015 10:41:54 -0400 Subject: [PATCH 16/16] Added tag build-2.1.0.740 for changeset c81615bea1e9