diff --git a/WebsitePanel.Installer/Sources/Setup.SchedulerService/Config.wxi b/WebsitePanel.Installer/Sources/Setup.SchedulerService/Config.wxi
new file mode 100644
index 00000000..8265cb6f
--- /dev/null
+++ b/WebsitePanel.Installer/Sources/Setup.SchedulerService/Config.wxi
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/WebsitePanel.Installer/Sources/Setup.SchedulerService/License.rtf b/WebsitePanel.Installer/Sources/Setup.SchedulerService/License.rtf
new file mode 100644
index 00000000..8f1b4211
Binary files /dev/null and b/WebsitePanel.Installer/Sources/Setup.SchedulerService/License.rtf differ
diff --git a/WebsitePanel.Installer/Sources/Setup.SchedulerService/Product.wxs b/WebsitePanel.Installer/Sources/Setup.SchedulerService/Product.wxs
new file mode 100644
index 00000000..f66dd59c
--- /dev/null
+++ b/WebsitePanel.Installer/Sources/Setup.SchedulerService/Product.wxs
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+
+
+ bannrbmp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LicenseAccepted = "1"
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/WebsitePanel.Installer/Sources/Setup.SchedulerService/Setup.SchedulerService.wixproj b/WebsitePanel.Installer/Sources/Setup.SchedulerService/Setup.SchedulerService.wixproj
new file mode 100644
index 00000000..12733ad4
--- /dev/null
+++ b/WebsitePanel.Installer/Sources/Setup.SchedulerService/Setup.SchedulerService.wixproj
@@ -0,0 +1,52 @@
+
+
+
+ Debug
+ x86
+ 3.7
+ {ead7c528-ea3d-40e8-9688-9f1d8dc8d758}
+ 2.0
+ Setup.SchedulerService
+ Package
+ $(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets
+ $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets
+
+
+ bin\
+ obj\$(Configuration)\
+ Debug;BUILD=debug
+ False
+
+
+
+
+
+
+
+
+ bin\$(Configuration)\
+ obj\$(Configuration)\
+ BUILD=release
+
+
+
+
+
+
+
+
+
+ ..\..\..\tools\WIX\WixUIExtension.dll
+ WixUIExtension
+
+
+
+
+
\ No newline at end of file
diff --git a/WebsitePanel.Installer/Sources/Setup.SchedulerService/WebSitePanel.ico b/WebsitePanel.Installer/Sources/Setup.SchedulerService/WebSitePanel.ico
new file mode 100644
index 00000000..bf9c0b86
Binary files /dev/null and b/WebsitePanel.Installer/Sources/Setup.SchedulerService/WebSitePanel.ico differ
diff --git a/WebsitePanel.Installer/Sources/Setup.SchedulerService/bannrbmp.bmp b/WebsitePanel.Installer/Sources/Setup.SchedulerService/bannrbmp.bmp
new file mode 100644
index 00000000..9ac7e922
Binary files /dev/null and b/WebsitePanel.Installer/Sources/Setup.SchedulerService/bannrbmp.bmp differ
diff --git a/WebsitePanel.Installer/Sources/Setup.SchedulerService/dlgbmp.bmp b/WebsitePanel.Installer/Sources/Setup.SchedulerService/dlgbmp.bmp
new file mode 100644
index 00000000..dbf9959b
Binary files /dev/null and b/WebsitePanel.Installer/Sources/Setup.SchedulerService/dlgbmp.bmp differ
diff --git a/WebsitePanel.Installer/Sources/VersionInfo.cs b/WebsitePanel.Installer/Sources/VersionInfo.cs
index 8ca7c4b0..aa59da61 100644
--- a/WebsitePanel.Installer/Sources/VersionInfo.cs
+++ b/WebsitePanel.Installer/Sources/VersionInfo.cs
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
//
// This code was generated by a tool.
-// Runtime Version:4.0.30319.18010
+// Runtime Version:4.0.30319.18033
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.sln b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.sln
index 8253af7f..6ded8966 100644
--- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.sln
+++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.sln
@@ -1,5 +1,5 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2012
+# Visual Studio 2010
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{129305D5-A9E6-4DCE-BFF6-41809E13EEEE}"
ProjectSection(SolutionItems) = preProject
..\..\WebsitePanel\build.xml = ..\..\WebsitePanel\build.xml
@@ -24,6 +24,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Installer.Core
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Setup.WIX", "Setup.WIX\Setup.WIX.wixproj", "{F963A4AF-CC72-4512-B636-829345C35318}"
EndProject
+Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Setup.SchedulerService", "Setup.SchedulerService\Setup.SchedulerService.wixproj", "{EAD7C528-EA3D-40E8-9688-9F1D8DC8D758}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.SchedulerServiceInstaller", "WebsitePanel.SchedulerServiceInstaller\WebsitePanel.SchedulerServiceInstaller.csproj", "{24A4C231-73A9-4F03-ABAD-9A8FE5324495}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -96,6 +100,26 @@ Global
{F963A4AF-CC72-4512-B636-829345C35318}.Release|Mixed Platforms.Build.0 = Release|x86
{F963A4AF-CC72-4512-B636-829345C35318}.Release|x86.ActiveCfg = Release|x86
{F963A4AF-CC72-4512-B636-829345C35318}.Release|x86.Build.0 = Release|x86
+ {EAD7C528-EA3D-40E8-9688-9F1D8DC8D758}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {EAD7C528-EA3D-40E8-9688-9F1D8DC8D758}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+ {EAD7C528-EA3D-40E8-9688-9F1D8DC8D758}.Debug|Mixed Platforms.Build.0 = Debug|x86
+ {EAD7C528-EA3D-40E8-9688-9F1D8DC8D758}.Debug|x86.ActiveCfg = Debug|x86
+ {EAD7C528-EA3D-40E8-9688-9F1D8DC8D758}.Debug|x86.Build.0 = Debug|x86
+ {EAD7C528-EA3D-40E8-9688-9F1D8DC8D758}.Release|Any CPU.ActiveCfg = Release|x86
+ {EAD7C528-EA3D-40E8-9688-9F1D8DC8D758}.Release|Mixed Platforms.ActiveCfg = Release|x86
+ {EAD7C528-EA3D-40E8-9688-9F1D8DC8D758}.Release|Mixed Platforms.Build.0 = Release|x86
+ {EAD7C528-EA3D-40E8-9688-9F1D8DC8D758}.Release|x86.ActiveCfg = Release|x86
+ {EAD7C528-EA3D-40E8-9688-9F1D8DC8D758}.Release|x86.Build.0 = Release|x86
+ {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+ {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Debug|Mixed Platforms.Build.0 = Debug|x86
+ {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Debug|x86.ActiveCfg = Debug|x86
+ {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Debug|x86.Build.0 = Debug|x86
+ {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Release|Any CPU.ActiveCfg = Release|x86
+ {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Release|Mixed Platforms.ActiveCfg = Release|x86
+ {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Release|Mixed Platforms.Build.0 = Release|x86
+ {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Release|x86.ActiveCfg = Release|x86
+ {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/CustomAction.config b/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/CustomAction.config
new file mode 100644
index 00000000..233c44d7
--- /dev/null
+++ b/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/CustomAction.config
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/CustomAction.cs b/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/CustomAction.cs
new file mode 100644
index 00000000..9dbf7fc3
--- /dev/null
+++ b/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/CustomAction.cs
@@ -0,0 +1,142 @@
+using System;
+using System.Configuration.Install;
+using System.Data;
+using System.Data.SqlClient;
+using System.IO;
+using System.Linq;
+using System.ServiceProcess;
+using System.Text.RegularExpressions;
+using Microsoft.Deployment.WindowsInstaller;
+
+namespace WebsitePanel.SchedulerServiceInstaller
+{
+ public class CustomActions
+ {
+ [CustomAction]
+ public static ActionResult CheckConnection(Session session)
+ {
+ string testConnectionString = session["AUTHENTICATIONTYPE"].Equals("Windows Authentication") ? GetConnectionString(session["SERVERNAME"], "master") : GetConnectionString(session["SERVERNAME"], "master", session["LOGIN"], session["PASSWORD"]);
+
+ if (CheckConnection(testConnectionString))
+ {
+ session["CORRECTCONNECTION"] = "1";
+ session["CONNECTIONSTRING"] = session["AUTHENTICATIONTYPE"].Equals("Windows Authentication") ? GetConnectionString(session["SERVERNAME"], session["DATABASENAME"]) : GetConnectionString(session["SERVERNAME"], session["DATABASENAME"], session["LOGIN"], session["PASSWORD"]);
+ }
+ else
+ {
+ session["CORRECTCONNECTION"] = "0";
+ }
+
+ return ActionResult.Success;
+ }
+
+ [CustomAction]
+ public static ActionResult FinalizeInstall(Session session)
+ {
+ ChangeConfigString("installer.connectionstring", session["CONNECTIONSTRING"], session["INSTALLFOLDER"]);
+ ChangeCryptoKey(session["INSTALLFOLDER"]);
+ InstallService(session["INSTALLFOLDER"]);
+
+ return ActionResult.Success;
+ }
+
+ private static void InstallService(string installFolder)
+ {
+ try
+ {
+ if (!ServiceController.GetServices().Any(s => s.DisplayName.Equals("WebsitePanel Scheduler", StringComparison.CurrentCultureIgnoreCase)))
+ {
+ ManagedInstallerClass.InstallHelper(new[] {"/i", Path.Combine(installFolder, "WebsitePanel.SchedulerService.exe")});
+ }
+
+ StartService("WebsitePanel Scheduler");
+ }
+ catch (Exception)
+ {
+ }
+ }
+
+ private static void ChangeCryptoKey(string installFolder)
+ {
+ string path = Path.Combine(installFolder.Replace("SchedulerService", "Enterprise Server"), "web.config");
+ string cryptoKey = "0123456789";
+
+ if (File.Exists(path))
+ {
+ using (var reader = new StreamReader(path))
+ {
+ string content = reader.ReadToEnd();
+ var pattern = new Regex(@"(?<=)");
+ Match match = pattern.Match(content);
+ cryptoKey = match.Value;
+ }
+ }
+
+ ChangeConfigString("installer.cryptokey", cryptoKey, installFolder);
+ }
+
+ private static void ChangeConfigString(string searchString, string replaceValue, string installFolder)
+ {
+ string content;
+ string path = Path.Combine(installFolder, "WebsitePanel.SchedulerService.exe.config");
+
+ using (var reader = new StreamReader(path))
+ {
+ content = reader.ReadToEnd();
+ }
+
+ var re = new Regex("\\$\\{" + searchString + "\\}+", RegexOptions.IgnoreCase);
+ content = re.Replace(content, replaceValue);
+
+ using (var writer = new StreamWriter(path))
+ {
+ writer.Write(content);
+ }
+ }
+
+ 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);
+ }
+
+ 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);
+ }
+
+ private static bool CheckConnection(string connectionString)
+ {
+ var connection = new SqlConnection(connectionString);
+ bool result = true;
+
+ try
+ {
+ connection.Open();
+ }
+ catch (Exception)
+ {
+ result = false;
+ }
+ finally
+ {
+ if (connection != null && connection.State == ConnectionState.Open)
+ {
+ connection.Close();
+ }
+ }
+
+ return result;
+ }
+ }
+}
\ No newline at end of file
diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/Properties/AssemblyInfo.cs b/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..222e3d9d
--- /dev/null
+++ b/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/Properties/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("WebsitePanel.SchedulerServiceInstaller")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("WebsitePanel.SchedulerServiceInstaller")]
+[assembly: AssemblyCopyright("Copyright © 2013")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("64885563-cef3-4553-9006-31282c033b3b")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/WebsitePanel.SchedulerServiceInstaller.csproj b/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/WebsitePanel.SchedulerServiceInstaller.csproj
new file mode 100644
index 00000000..22f11548
--- /dev/null
+++ b/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/WebsitePanel.SchedulerServiceInstaller.csproj
@@ -0,0 +1,52 @@
+
+
+
+ Debug
+ x86
+ 8.0.30703
+ 2.0
+ {24A4C231-73A9-4F03-ABAD-9A8FE5324495}
+ Library
+ Properties
+ WebsitePanel.SchedulerServiceInstaller
+ WebsitePanel.SchedulerServiceInstaller
+ v4.0
+ 512
+ $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.CA.targets
+
+
+ true
+ full
+ false
+ ..\Setup.SchedulerService\bin\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ ..\Setup.SchedulerService\bin\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs
index 6952cf21..51032a44 100644
--- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs
+++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs
@@ -28,6 +28,9 @@
using System;
using System.Collections.Generic;
+using System.Configuration.Install;
+using System.Linq;
+using System.ServiceProcess;
using System.Text;
using System.IO;
using System.Xml;
@@ -97,7 +100,7 @@ namespace WebsitePanel.Setup.Actions
throw;
}
}
- }
+ }
public class CreateDatabaseAction : Action, IInstallAction, IUninstallAction
{
@@ -347,7 +350,7 @@ namespace WebsitePanel.Setup.Actions
Log.WriteEnd(String.Format("Updated {0} file", vars.ConfigurationFile));
}
}
-
+
public class SaveEntServerConfigSettingsAction : Action, IInstallAction
{
void IInstallAction.Run(SetupVariables vars)
@@ -390,7 +393,7 @@ namespace WebsitePanel.Setup.Actions
new UpdateServeradminPasswAction(),
new SaveAspNetDbConnectionStringAction(),
new SaveComponentConfigSettingsAction(),
- new SaveEntServerConfigSettingsAction()
+ new SaveEntServerConfigSettingsAction()
};
public EntServerActionManager(SetupVariables sessionVars) : base(sessionVars)
diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Global.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Global.cs
index 52affc1e..819105d6 100644
--- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Global.cs
+++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Global.cs
@@ -76,7 +76,7 @@ namespace WebsitePanel.Setup
public const string DatabaseName = "DatabaseName";
public const string ConnectionString = "ConnectionString";
public const string InstallConnectionString = "InstallConnectionString";
- public const string Release = "Release";
+ public const string Release = "Release";
}
public abstract class Messages
diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/WebsitePanel.Setup.csproj b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/WebsitePanel.Setup.csproj
index 6b9d839d..f8a058bc 100644
--- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/WebsitePanel.Setup.csproj
+++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/WebsitePanel.Setup.csproj
@@ -74,6 +74,7 @@
+
diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UninstallPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UninstallPage.cs
index f9e34dfa..cd65881d 100644
--- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UninstallPage.cs
+++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UninstallPage.cs
@@ -27,11 +27,14 @@
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
+using System.Configuration.Install;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
+using System.Linq;
+using System.ServiceProcess;
using System.Text;
using System.Threading;
using System.Windows.Forms;
@@ -208,17 +211,19 @@ namespace WebsitePanel.Setup
Log.WriteError("Windows service stop error", ex);
}
- int exitCode = Utils.RunProcess(path, "/u");
- if (exitCode == 0)
- {
- Log.WriteEnd("Removed Windows service");
- InstallLog.AppendLine(string.Format("- Removed \"{0}\" Windows service", serviceName));
- }
- else
- {
- Log.WriteError(string.Format("Unable to remove \"{0}\" Windows service. Error code: {1}", serviceName, exitCode), null);
- InstallLog.AppendLine(string.Format("- Failed to remove \"{0}\" Windows service", serviceName));
- }
+ try
+ {
+ ManagedInstallerClass.InstallHelper(new[] {"/u", path});
+ }
+ catch(Exception)
+ {
+ Log.WriteError(string.Format("Unable to remove \"{0}\" Windows service.", serviceName), null);
+ InstallLog.AppendLine(string.Format("- Failed to remove \"{0}\" Windows service", serviceName));
+ throw;
+ }
+
+ Log.WriteEnd("Removed Windows service");
+ InstallLog.AppendLine(string.Format("- Removed \"{0}\" Windows service", serviceName));
}
catch (Exception ex)
{
@@ -268,7 +273,7 @@ namespace WebsitePanel.Setup
internal List GetUninstallActions(string componentId)
{
- List list = new List();
+ var list = new List();
InstallAction action = null;
//windows service
@@ -283,8 +288,7 @@ namespace WebsitePanel.Setup
action.Description = "Removing Windows service...";
action.Log = string.Format("- Remove {0} Windows service", serviceName);
list.Add(action);
- }
-
+ }
//database
bool deleteDatabase = AppConfig.GetComponentSettingBooleanValue(componentId, "NewDatabase");
diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql
index 31d358ec..3a236ffc 100644
--- a/WebsitePanel/Database/update_db.sql
+++ b/WebsitePanel/Database/update_db.sql
@@ -450,10 +450,996 @@ INSERT [dbo].[Providers] ([ProviderID], [GroupID], [ProviderName], [DisplayName]
VALUES (1401, 41, N'Lync2013', N'Microsoft Lync Server 2013 Multitenant Hosting Pack', N'WebsitePanel.Providers.HostedSolution.Lync2013, WebsitePanel.Providers.HostedSolution.Lync2013', N'Lync', NULL)
END
GO
-
-- add Application Pools Restart Quota
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) VALUES (411, 2, 13, N'Web.AppPoolsRestart', N'Application Pools Restart', 1, 0, NULL, NULL)
GO
+-------------------------------- Scheduler Service------------------------------------------------------
+
+IF EXISTS( SELECT * FROM INFORMATION_SCHEMA.COLUMNS
+ WHERE TABLE_NAME = 'Schedule'
+ AND COLUMN_NAME = 'LastFinish')
+ALTER TABLE Schedule
+DROP COLUMN LastFinish
+GO
+
+ALTER PROCEDURE [dbo].[GetSchedule]
+(
+ @ActorID int,
+ @ScheduleID int
+)
+AS
+
+-- select schedule
+SELECT TOP 1
+ S.ScheduleID,
+ S.TaskID,
+ S.PackageID,
+ S.ScheduleName,
+ S.ScheduleTypeID,
+ S.Interval,
+ S.FromTime,
+ S.ToTime,
+ S.StartTime,
+ S.LastRun,
+ S.NextRun,
+ S.Enabled,
+ S.HistoriesNumber,
+ S.PriorityID,
+ S.MaxExecutionTime,
+ S.WeekMonthDay,
+ 1 AS StatusID
+FROM Schedule AS S
+WHERE
+ S.ScheduleID = @ScheduleID
+ AND dbo.CheckActorPackageRights(@ActorID, S.PackageID) = 1
+
+-- select task
+SELECT
+ ST.TaskID,
+ ST.TaskType,
+ ST.RoleID
+FROM Schedule AS S
+INNER JOIN ScheduleTasks AS ST ON S.TaskID = ST.TaskID
+WHERE
+ S.ScheduleID = @ScheduleID
+ AND dbo.CheckActorPackageRights(@ActorID, S.PackageID) = 1
+
+-- select schedule parameters
+SELECT
+ S.ScheduleID,
+ STP.ParameterID,
+ STP.DataTypeID,
+ ISNULL(SP.ParameterValue, STP.DefaultValue) AS ParameterValue
+FROM Schedule AS S
+INNER JOIN ScheduleTaskParameters AS STP ON S.TaskID = STP.TaskID
+LEFT OUTER JOIN ScheduleParameters AS SP ON STP.ParameterID = SP.ParameterID AND SP.ScheduleID = S.ScheduleID
+WHERE
+ S.ScheduleID = @ScheduleID
+ AND dbo.CheckActorPackageRights(@ActorID, S.PackageID) = 1
+
+RETURN
+GO
+
+ALTER PROCEDURE [dbo].[GetScheduleInternal]
+(
+ @ScheduleID int
+)
+AS
+
+-- select schedule
+SELECT
+ S.ScheduleID,
+ S.TaskID,
+ ST.TaskType,
+ ST.RoleID,
+ S.PackageID,
+ S.ScheduleName,
+ S.ScheduleTypeID,
+ S.Interval,
+ S.FromTime,
+ S.ToTime,
+ S.StartTime,
+ S.LastRun,
+ S.NextRun,
+ S.Enabled,
+ 1 AS StatusID,
+ S.PriorityID,
+ S.HistoriesNumber,
+ S.MaxExecutionTime,
+ S.WeekMonthDay
+FROM Schedule AS S
+INNER JOIN ScheduleTasks AS ST ON S.TaskID = ST.TaskID
+WHERE ScheduleID = @ScheduleID
+RETURN
+GO
+
+ALTER PROCEDURE [dbo].[GetSchedules]
+(
+ @ActorID int,
+ @PackageID int,
+ @Recursive bit
+)
+AS
+
+-- check rights
+IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0
+RAISERROR('You are not allowed to access this package', 16, 1)
+
+DECLARE @Schedules TABLE
+(
+ ScheduleID int
+)
+
+INSERT INTO @Schedules (ScheduleID)
+SELECT
+ S.ScheduleID
+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
+ S.ScheduleID,
+ S.TaskID,
+ ST.TaskType,
+ ST.RoleID,
+ S.PackageID,
+ S.ScheduleName,
+ S.ScheduleTypeID,
+ S.Interval,
+ S.FromTime,
+ S.ToTime,
+ S.StartTime,
+ S.LastRun,
+ S.NextRun,
+ S.Enabled,
+ 1 AS StatusID,
+ S.PriorityID,
+ S.MaxExecutionTime,
+ S.WeekMonthDay,
+ ISNULL(0, (SELECT TOP 1 SeverityID FROM AuditLog WHERE ItemID = S.ScheduleID AND SourceName = 'SCHEDULER' ORDER BY StartDate DESC)) AS LastResult,
+
+ U.Username,
+ U.FirstName,
+ U.LastName,
+ U.FullName,
+ U.RoleID,
+ U.Email
+FROM @Schedules AS STEMP
+INNER JOIN Schedule AS S ON STEMP.ScheduleID = S.ScheduleID
+INNER JOIN Packages AS P ON S.PackageID = P.PackageID
+INNER JOIN ScheduleTasks AS ST ON S.TaskID = ST.TaskID
+INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID
+
+-- select schedule parameters
+SELECT
+ S.ScheduleID,
+ STP.ParameterID,
+ STP.DataTypeID,
+ ISNULL(SP.ParameterValue, STP.DefaultValue) AS ParameterValue
+FROM @Schedules AS STEMP
+INNER JOIN Schedule AS S ON STEMP.ScheduleID = S.ScheduleID
+INNER JOIN ScheduleTaskParameters AS STP ON S.TaskID = STP.TaskID
+LEFT OUTER JOIN ScheduleParameters AS SP ON STP.ParameterID = SP.ParameterID AND SP.ScheduleID = S.ScheduleID
+RETURN
+GO
+
+ALTER PROCEDURE [dbo].[GetSchedulesPaged]
+(
+ @ActorID int,
+ @PackageID int,
+ @Recursive bit,
+ @FilterColumn nvarchar(50) = '',
+ @FilterValue nvarchar(50) = '',
+ @SortColumn nvarchar(50),
+ @StartRow int,
+ @MaximumRows int
+)
+AS
+BEGIN
+
+-- check rights
+IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0
+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 @SortColumn IS NULL OR @SortColumn = ''
+SET @SortColumn = 'S.ScheduleName ASC'
+
+DECLARE @sql nvarchar(3500)
+
+set @sql = '
+SELECT COUNT(S.ScheduleID) FROM Schedule AS S
+INNER JOIN PackagesTree(@PackageID, @Recursive) AS PT ON S.PackageID = PT.PackageID
+INNER JOIN Packages AS P ON S.PackageID = P.PackageID
+INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID
+WHERE ' + @condition + '
+
+DECLARE @Schedules AS TABLE
+(
+ ScheduleID int
+);
+
+WITH TempSchedules AS (
+ SELECT ROW_NUMBER() OVER (ORDER BY ' + @SortColumn + ') as Row,
+ S.ScheduleID
+ 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
+ WHERE ' + @condition + '
+)
+
+INSERT INTO @Schedules
+SELECT ScheduleID FROM TempSchedules
+WHERE TempSchedules.Row BETWEEN @StartRow and @StartRow + @MaximumRows - 1
+
+SELECT
+ S.ScheduleID,
+ S.TaskID,
+ ST.TaskType,
+ ST.RoleID,
+ S.ScheduleName,
+ S.ScheduleTypeID,
+ S.Interval,
+ S.FromTime,
+ S.ToTime,
+ S.StartTime,
+ S.LastRun,
+ S.NextRun,
+ S.Enabled,
+ 1 AS StatusID,
+ S.PriorityID,
+ S.MaxExecutionTime,
+ S.WeekMonthDay,
+ ISNULL(0, (SELECT TOP 1 SeverityID FROM AuditLog WHERE ItemID = S.ScheduleID AND SourceName = ''SCHEDULER'' ORDER BY StartDate DESC)) AS LastResult,
+
+ -- packages
+ P.PackageID,
+ P.PackageName,
+
+ -- user
+ P.UserID,
+ U.Username,
+ U.FirstName,
+ U.LastName,
+ U.FullName,
+ U.RoleID,
+ U.Email
+FROM @Schedules AS STEMP
+INNER JOIN Schedule AS S ON STEMP.ScheduleID = S.ScheduleID
+INNER JOIN ScheduleTasks AS ST ON S.TaskID = ST.TaskID
+INNER JOIN Packages AS P ON S.PackageID = P.PackageID
+INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID'
+
+exec sp_executesql @sql, N'@PackageID int, @StartRow int, @MaximumRows int, @Recursive bit',
+@PackageID, @StartRow, @MaximumRows, @Recursive
+
+END
+RETURN
+GO
+
+ALTER PROCEDURE [dbo].[UpdateSchedule]
+(
+ @ActorID int,
+ @ScheduleID int,
+ @TaskID nvarchar(100),
+ @ScheduleName nvarchar(100),
+ @ScheduleTypeID nvarchar(50),
+ @Interval int,
+ @FromTime datetime,
+ @ToTime datetime,
+ @StartTime datetime,
+ @LastRun datetime,
+ @NextRun datetime,
+ @Enabled bit,
+ @PriorityID nvarchar(50),
+ @HistoriesNumber int,
+ @MaxExecutionTime int,
+ @WeekMonthDay int,
+ @XmlParameters ntext
+)
+AS
+
+-- check rights
+DECLARE @PackageID int
+SELECT @PackageID = PackageID FROM Schedule
+WHERE ScheduleID = @ScheduleID
+
+IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0
+RAISERROR('You are not allowed to access this package', 16, 1)
+
+BEGIN TRAN
+
+UPDATE Schedule
+SET
+ TaskID = @TaskID,
+ ScheduleName = @ScheduleName,
+ ScheduleTypeID = @ScheduleTypeID,
+ Interval = @Interval,
+ FromTime = @FromTime,
+ ToTime = @ToTime,
+ StartTime = @StartTime,
+ LastRun = @LastRun,
+ NextRun = @NextRun,
+ Enabled = @Enabled,
+ PriorityID = @PriorityID,
+ HistoriesNumber = @HistoriesNumber,
+ MaxExecutionTime = @MaxExecutionTime,
+ WeekMonthDay = @WeekMonthDay
+WHERE
+ ScheduleID = @ScheduleID
+
+DECLARE @idoc int
+--Create an internal representation of the XML document.
+EXEC sp_xml_preparedocument @idoc OUTPUT, @XmlParameters
+
+-- Execute a SELECT statement that uses the OPENXML rowset provider.
+DELETE FROM ScheduleParameters
+WHERE ScheduleID = @ScheduleID
+
+INSERT INTO ScheduleParameters
+(
+ ScheduleID,
+ ParameterID,
+ ParameterValue
+)
+SELECT
+ @ScheduleID,
+ ParameterID,
+ ParameterValue
+FROM OPENXML(@idoc, '/parameters/parameter',1) WITH
+(
+ ParameterID nvarchar(50) '@id',
+ ParameterValue nvarchar(3000) '@value'
+) as PV
+
+-- remove document
+exec sp_xml_removedocument @idoc
+
+COMMIT TRAN
+RETURN
+GO
+
+UPDATE ScheduleTasks SET TaskType = RTRIM(TaskType) + '.Code'
+WHERE SUBSTRING(RTRIM(TaskType), LEN(RTRIM(TaskType)) - 3, 4) <> 'Code'
+GO
+
+IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetRunningSchedules')
+DROP PROCEDURE GetRunningSchedules
+GO
+
+IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'BackgroundTaskStack')
+DROP TABLE BackgroundTaskStack
+GO
+
+IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'BackgroundTaskLogs')
+DROP TABLE BackgroundTaskLogs
+GO
+
+IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'BackgroundTaskParameters')
+DROP TABLE BackgroundTaskParameters
+GO
+
+IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'BackgroundTasks')
+DROP TABLE BackgroundTasks
+GO
+
+CREATE TABLE BackgroundTasks
+(
+ ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
+ Guid UNIQUEIDENTIFIER NOT NULL,
+ TaskID NVARCHAR(255),
+ ScheduleID INT NOT NULL,
+ PackageID INT NOT NULL,
+ UserID INT NOT NULL,
+ EffectiveUserID INT NOT NULL,
+ TaskName NVARCHAR(255),
+ ItemID INT,
+ ItemName NVARCHAR(255),
+ StartDate DATETIME NOT NULL,
+ FinishDate DATETIME,
+ IndicatorCurrent INT NOT NULL,
+ IndicatorMaximum INT NOT NULL,
+ MaximumExecutionTime INT NOT NULL,
+ Source NVARCHAR(MAX),
+ Severity INT NOT NULL,
+ Completed BIT,
+ NotifyOnComplete BIT,
+ Status INT NOT NULL
+)
+GO
+
+CREATE TABLE BackgroundTaskParameters
+(
+ ParameterID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
+ TaskID INT NOT NULL,
+ Name NVARCHAR(255),
+ SerializerValue NTEXT,
+ TypeName NVARCHAR(255),
+ FOREIGN KEY (TaskID) REFERENCES BackgroundTasks (ID)
+)
+GO
+
+CREATE TABLE BackgroundTaskLogs
+(
+ LogID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
+ TaskID INT NOT NULL,
+ Date DATETIME,
+ ExceptionStackTrace NTEXT,
+ InnerTaskStart INT,
+ Severity INT,
+ Text NTEXT,
+ TextIdent INT,
+ XmlParameters NTEXT,
+ FOREIGN KEY (TaskID) REFERENCES BackgroundTasks (ID)
+)
+GO
+
+CREATE TABLE BackgroundTaskStack
+(
+ TaskStackID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
+ TaskID INT NOT NULL,
+ FOREIGN KEY (TaskID) REFERENCES BackgroundTasks (ID)
+)
+GO
+
+IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddBackgroundTask')
+DROP PROCEDURE AddBackgroundTask
+GO
+
+CREATE PROCEDURE [dbo].[AddBackgroundTask]
+(
+ @BackgroundTaskID INT OUTPUT,
+ @Guid UNIQUEIDENTIFIER,
+ @TaskID NVARCHAR(255),
+ @ScheduleID INT,
+ @PackageID INT,
+ @UserID INT,
+ @EffectiveUserID INT,
+ @TaskName NVARCHAR(255),
+ @ItemID INT,
+ @ItemName NVARCHAR(255),
+ @StartDate DATETIME,
+ @IndicatorCurrent INT,
+ @IndicatorMaximum INT,
+ @MaximumExecutionTime INT,
+ @Source NVARCHAR(MAX),
+ @Severity INT,
+ @Completed BIT,
+ @NotifyOnComplete BIT,
+ @Status INT
+)
+AS
+
+INSERT INTO BackgroundTasks
+(
+ Guid,
+ TaskID,
+ ScheduleID,
+ PackageID,
+ UserID,
+ EffectiveUserID,
+ TaskName,
+ ItemID,
+ ItemName,
+ StartDate,
+ IndicatorCurrent,
+ IndicatorMaximum,
+ MaximumExecutionTime,
+ Source,
+ Severity,
+ Completed,
+ NotifyOnComplete,
+ Status
+)
+VALUES
+(
+ @Guid,
+ @TaskID,
+ @ScheduleID,
+ @PackageID,
+ @UserID,
+ @EffectiveUserID,
+ @TaskName,
+ @ItemID,
+ @ItemName,
+ @StartDate,
+ @IndicatorCurrent,
+ @IndicatorMaximum,
+ @MaximumExecutionTime,
+ @Source,
+ @Severity,
+ @Completed,
+ @NotifyOnComplete,
+ @Status
+)
+
+SET @BackgroundTaskID = SCOPE_IDENTITY()
+
+RETURN
+GO
+
+IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTask')
+DROP PROCEDURE GetBackgroundTask
+GO
+
+CREATE PROCEDURE [dbo].[GetBackgroundTask]
+(
+ @TaskID NVARCHAR(255)
+)
+AS
+
+SELECT TOP 1
+ T.ID,
+ T.Guid,
+ T.TaskID,
+ T.ScheduleID,
+ T.PackageID,
+ T.UserID,
+ T.EffectiveUserID,
+ T.TaskName,
+ T.ItemID,
+ T.ItemName,
+ T.StartDate,
+ T.FinishDate,
+ T.IndicatorCurrent,
+ T.IndicatorMaximum,
+ T.MaximumExecutionTime,
+ T.Source,
+ T.Severity,
+ T.Completed,
+ T.NotifyOnComplete,
+ T.Status
+FROM BackgroundTasks AS T
+INNER JOIN BackgroundTaskStack AS TS
+ ON TS.TaskId = T.ID
+WHERE T.TaskID = @TaskID
+GO
+
+IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTasks')
+DROP PROCEDURE GetBackgroundTasks
+GO
+
+CREATE PROCEDURE [dbo].[GetBackgroundTasks]
+(
+ @ActorID INT
+)
+AS
+
+ with GetChildUsersId(id) as (
+ select UserID
+ from Users
+ where UserID = @ActorID
+ union all
+ select C.UserId
+ from GetChildUsersId P
+ inner join Users C on P.id = C.OwnerID
+)
+
+SELECT
+ T.ID,
+ T.Guid,
+ T.TaskID,
+ T.ScheduleId,
+ T.PackageId,
+ T.UserId,
+ T.EffectiveUserId,
+ T.TaskName,
+ T.ItemId,
+ T.ItemName,
+ T.StartDate,
+ T.FinishDate,
+ T.IndicatorCurrent,
+ T.IndicatorMaximum,
+ T.MaximumExecutionTime,
+ T.Source,
+ T.Severity,
+ T.Completed,
+ T.NotifyOnComplete,
+ T.Status
+FROM BackgroundTasks AS T
+INNER JOIN (SELECT T.Guid, MIN(T.StartDate) AS Date
+ FROM BackgroundTasks AS T
+ INNER JOIN BackgroundTaskStack AS TS
+ ON TS.TaskId = T.ID
+ WHERE T.UserID in (select id from GetChildUsersId)
+ GROUP BY T.Guid) AS TT ON TT.Guid = T.Guid AND TT.Date = T.StartDate
+GO
+
+IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetThreadBackgroundTasks')
+DROP PROCEDURE GetThreadBackgroundTasks
+GO
+
+CREATE PROCEDURE [dbo].GetThreadBackgroundTasks
+(
+ @Guid UNIQUEIDENTIFIER
+)
+AS
+
+SELECT
+ T.ID,
+ T.Guid,
+ T.TaskID,
+ T.ScheduleId,
+ T.PackageId,
+ T.UserId,
+ T.EffectiveUserId,
+ T.TaskName,
+ T.ItemId,
+ T.ItemName,
+ T.StartDate,
+ T.FinishDate,
+ T.IndicatorCurrent,
+ T.IndicatorMaximum,
+ T.MaximumExecutionTime,
+ T.Source,
+ T.Severity,
+ T.Completed,
+ T.NotifyOnComplete,
+ T.Status
+FROM BackgroundTasks AS T
+INNER JOIN BackgroundTaskStack AS TS
+ ON TS.TaskId = T.ID
+WHERE T.Guid = @Guid
+GO
+
+IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTopTask')
+DROP PROCEDURE GetBackgroundTopTask
+GO
+
+CREATE PROCEDURE [dbo].[GetBackgroundTopTask]
+(
+ @Guid UNIQUEIDENTIFIER
+)
+AS
+
+SELECT TOP 1
+ T.ID,
+ T.Guid,
+ T.TaskID,
+ T.ScheduleId,
+ T.PackageId,
+ T.UserId,
+ T.EffectiveUserId,
+ T.TaskName,
+ T.ItemId,
+ T.ItemName,
+ T.StartDate,
+ T.FinishDate,
+ T.IndicatorCurrent,
+ T.IndicatorMaximum,
+ T.MaximumExecutionTime,
+ T.Source,
+ T.Severity,
+ T.Completed,
+ T.NotifyOnComplete,
+ T.Status
+FROM BackgroundTasks AS T
+INNER JOIN BackgroundTaskStack AS TS
+ ON TS.TaskId = T.ID
+WHERE T.Guid = @Guid
+ORDER BY T.StartDate ASC
+GO
+
+IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddBackgroundTaskLog')
+DROP PROCEDURE AddBackgroundTaskLog
+GO
+
+CREATE PROCEDURE [dbo].[AddBackgroundTaskLog]
+(
+ @TaskID INT,
+ @Date DATETIME,
+ @ExceptionStackTrace NTEXT,
+ @InnerTaskStart INT,
+ @Severity INT,
+ @Text NTEXT,
+ @TextIdent INT,
+ @XmlParameters NTEXT
+)
+AS
+
+INSERT INTO BackgroundTaskLogs
+(
+ TaskID,
+ Date,
+ ExceptionStackTrace,
+ InnerTaskStart,
+ Severity,
+ Text,
+ TextIdent,
+ XmlParameters
+)
+VALUES
+(
+ @TaskID,
+ @Date,
+ @ExceptionStackTrace,
+ @InnerTaskStart,
+ @Severity,
+ @Text,
+ @TextIdent,
+ @XmlParameters
+)
+GO
+
+IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTaskLogs')
+DROP PROCEDURE GetBackgroundTaskLogs
+GO
+
+CREATE PROCEDURE [dbo].[GetBackgroundTaskLogs]
+(
+ @TaskID INT,
+ @StartLogTime DATETIME
+)
+AS
+
+SELECT
+ L.LogID,
+ L.TaskID,
+ L.Date,
+ L.ExceptionStackTrace,
+ L.InnerTaskStart,
+ L.Severity,
+ L.Text,
+ L.XmlParameters
+FROM BackgroundTaskLogs AS L
+WHERE L.TaskID = @TaskID AND L.Date >= @StartLogTime
+ORDER BY L.Date
+GO
+
+IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'UpdateBackgroundTask')
+DROP PROCEDURE UpdateBackgroundTask
+GO
+
+CREATE PROCEDURE [dbo].[UpdateBackgroundTask]
+(
+ @Guid UNIQUEIDENTIFIER,
+ @TaskID INT,
+ @ScheduleID INT,
+ @PackageID INT,
+ @TaskName NVARCHAR(255),
+ @ItemID INT,
+ @ItemName NVARCHAR(255),
+ @FinishDate DATETIME,
+ @IndicatorCurrent INT,
+ @IndicatorMaximum INT,
+ @MaximumExecutionTime INT,
+ @Source NVARCHAR(MAX),
+ @Severity INT,
+ @Completed BIT,
+ @NotifyOnComplete BIT,
+ @Status INT
+)
+AS
+
+UPDATE BackgroundTasks
+SET
+ Guid = @Guid,
+ ScheduleID = @ScheduleID,
+ PackageID = @PackageID,
+ TaskName = @TaskName,
+ ItemID = @ItemID,
+ ItemName = @ItemName,
+ FinishDate = @FinishDate,
+ IndicatorCurrent = @IndicatorCurrent,
+ IndicatorMaximum = @IndicatorMaximum,
+ MaximumExecutionTime = @MaximumExecutionTime,
+ Source = @Source,
+ Severity = @Severity,
+ Completed = @Completed,
+ NotifyOnComplete = @NotifyOnComplete,
+ Status = @Status
+WHERE ID = @TaskID
+GO
+
+IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTaskParams')
+DROP PROCEDURE GetBackgroundTaskParams
+GO
+
+CREATE PROCEDURE [dbo].[GetBackgroundTaskParams]
+(
+ @TaskID INT
+)
+AS
+
+SELECT
+ P.ParameterID,
+ P.TaskID,
+ P.Name,
+ P.SerializerValue,
+ P.TypeName
+FROM BackgroundTaskParameters AS P
+WHERE P.TaskID = @TaskID
+GO
+
+IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddBackgroundTaskParam')
+DROP PROCEDURE AddBackgroundTaskParam
+GO
+
+CREATE PROCEDURE [dbo].[AddBackgroundTaskParam]
+(
+ @TaskID INT,
+ @Name NVARCHAR(255),
+ @Value NTEXT,
+ @TypeName NVARCHAR(255)
+)
+AS
+
+INSERT INTO BackgroundTaskParameters
+(
+ TaskID,
+ Name,
+ SerializerValue,
+ TypeName
+)
+VALUES
+(
+ @TaskID,
+ @Name,
+ @Value,
+ @TypeName
+)
+GO
+
+IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteBackgroundTaskParams')
+DROP PROCEDURE DeleteBackgroundTaskParams
+GO
+
+CREATE PROCEDURE [dbo].[DeleteBackgroundTaskParams]
+(
+ @TaskID INT
+)
+AS
+
+DELETE FROM BackgroundTaskParameters
+WHERE TaskID = @TaskID
+GO
+
+IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddBackgroundTaskStack')
+DROP PROCEDURE AddBackgroundTaskStack
+GO
+
+CREATE PROCEDURE [dbo].[AddBackgroundTaskStack]
+(
+ @TaskID INT
+)
+AS
+
+INSERT INTO BackgroundTaskStack
+(
+ TaskID
+)
+VALUES
+(
+ @TaskID
+)
+GO
+
+IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteBackgroundTasks')
+DROP PROCEDURE DeleteBackgroundTasks
+GO
+
+CREATE PROCEDURE [dbo].[DeleteBackgroundTasks]
+(
+ @Guid UNIQUEIDENTIFIER
+)
+AS
+
+DELETE FROM BackgroundTaskStack
+WHERE TaskID IN (SELECT ID FROM BackgroundTasks WHERE Guid = @Guid)
+
+DELETE FROM BackgroundTaskLogs
+WHERE TaskID IN (SELECT ID FROM BackgroundTasks WHERE Guid = @Guid)
+
+DELETE FROM BackgroundTaskParameters
+WHERE TaskID IN (SELECT ID FROM BackgroundTasks WHERE Guid = @Guid)
+
+DELETE FROM BackgroundTasks
+WHERE ID IN (SELECT ID FROM BackgroundTasks WHERE Guid = @Guid)
+GO
+
+IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteBackgroundTask')
+DROP PROCEDURE DeleteBackgroundTask
+GO
+
+CREATE PROCEDURE [dbo].[DeleteBackgroundTask]
+(
+ @ID INT
+)
+AS
+
+DELETE FROM BackgroundTaskStack
+WHERE TaskID = @ID
+
+DELETE FROM BackgroundTaskLogs
+WHERE TaskID = @ID
+
+DELETE FROM BackgroundTaskParameters
+WHERE TaskID = @ID
+
+DELETE FROM BackgroundTasks
+WHERE ID = @ID
+GO
+
+IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetProcessBackgroundTasks')
+DROP PROCEDURE GetProcessBackgroundTasks
+GO
+
+CREATE PROCEDURE [dbo].[GetProcessBackgroundTasks]
+(
+ @Status INT
+)
+AS
+
+SELECT
+ T.ID,
+ T.TaskID,
+ T.ScheduleId,
+ T.PackageId,
+ T.UserId,
+ T.EffectiveUserId,
+ T.TaskName,
+ T.ItemId,
+ T.ItemName,
+ T.StartDate,
+ T.FinishDate,
+ T.IndicatorCurrent,
+ T.IndicatorMaximum,
+ T.MaximumExecutionTime,
+ T.Source,
+ T.Severity,
+ T.Completed,
+ T.NotifyOnComplete,
+ T.Status
+FROM BackgroundTasks AS T
+WHERE T.Completed = 0 AND T.Status = @Status
+GO
+
+IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetScheduleBackgroundTasks')
+DROP PROCEDURE GetScheduleBackgroundTasks
+GO
+
+CREATE PROCEDURE [dbo].[GetScheduleBackgroundTasks]
+(
+ @ScheduleID INT
+)
+AS
+
+SELECT
+ T.ID,
+ T.Guid,
+ T.TaskID,
+ T.ScheduleId,
+ T.PackageId,
+ T.UserId,
+ T.EffectiveUserId,
+ T.TaskName,
+ T.ItemId,
+ T.ItemName,
+ T.StartDate,
+ T.FinishDate,
+ T.IndicatorCurrent,
+ T.IndicatorMaximum,
+ T.MaximumExecutionTime,
+ T.Source,
+ T.Severity,
+ T.Completed,
+ T.NotifyOnComplete,
+ T.Status
+FROM BackgroundTasks AS T
+WHERE T.Guid = (
+ SELECT Guid FROM BackgroundTasks
+ WHERE ScheduleID = @ScheduleID
+ AND Completed = 0 AND Status IN (1, 3))
+GO
-- Disclaimers
diff --git a/WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/WebsitePanel.Import.Enterprise.csproj b/WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/WebsitePanel.Import.Enterprise.csproj
index 46b74405..32738387 100644
--- a/WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/WebsitePanel.Import.Enterprise.csproj
+++ b/WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/WebsitePanel.Import.Enterprise.csproj
@@ -74,6 +74,9 @@
..\..\..\Bin\WebsitePanel.EnterpriseServer.Client.dll
+
+ ..\..\..\Bin\WebsitePanel.EnterpriseServer.Code.dll
+
..\..\..\Bin\WebsitePanel.Providers.Base.dll
diff --git a/WebsitePanel/Sources/VersionInfo.cs b/WebsitePanel/Sources/VersionInfo.cs
index 8ca7c4b0..aa59da61 100644
--- a/WebsitePanel/Sources/VersionInfo.cs
+++ b/WebsitePanel/Sources/VersionInfo.cs
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
//
// This code was generated by a tool.
-// Runtime Version:4.0.30319.18010
+// Runtime Version:4.0.30319.18033
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
diff --git a/WebsitePanel/Sources/VersionInfo.vb b/WebsitePanel/Sources/VersionInfo.vb
index 556fbffa..ca84ccc9 100644
--- a/WebsitePanel/Sources/VersionInfo.vb
+++ b/WebsitePanel/Sources/VersionInfo.vb
@@ -1,7 +1,7 @@
'------------------------------------------------------------------------------
'
' This code was generated by a tool.
-' Runtime Version:4.0.30319.18010
+' Runtime Version:4.0.30319.18033
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
@@ -15,9 +15,9 @@ Imports System
Imports System.Reflection
Imports System.Runtime.CompilerServices
Imports System.Runtime.InteropServices
-
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs
index 8ea92110..bfe596f1 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs
@@ -36,162 +36,171 @@ using System.Xml.Serialization;
namespace WebsitePanel.EnterpriseServer
{
+
public class BackgroundTask
{
- private string taskId;
- private int userId;
- private int packageId;
- private int effectiveUserId;
- private DateTime startDate = DateTime.MinValue;
- private DateTime finishDate = DateTime.MinValue;
- private int maximumExecutionTime = -1; // seconds
- private string source;
- private string taskName;
- private int scheduleId;
- private string itemName;
- private int itemId = 0;
- private int severity = 0; /* 0 - Info, 1 - Warning, 2 - Error */
- private List logRecords = new List();
- private List lastLogRecords = new List();
- private BackgroundTaskLogRecord lastLogRecord;
- private Hashtable parameters = new Hashtable();
- private int indicatorMaximum;
- private int indicatorCurrent;
- private bool completed;
- private bool notifyOnComplete;
- private Thread taskThread;
+ #region Fields
- public System.DateTime StartDate
+ public List Params = new List();
+
+ public List Logs = new List();
+
+ #endregion
+
+ #region Properties
+
+ public int Id { get; set; }
+
+ public Guid Guid { get; set; }
+
+ public string TaskId { get; set; }
+
+ public int ScheduleId { get; set; }
+
+ public int PackageId { get; set; }
+
+ public int UserId { get; set; }
+
+ public int EffectiveUserId { get; set; }
+
+ public string TaskName { get; set; }
+
+ public int ItemId { get; set; }
+
+ public string ItemName { get; set; }
+
+ public DateTime StartDate { get; set; }
+
+ public DateTime FinishDate { get; set; }
+
+ public int IndicatorCurrent { get; set; }
+
+ public int IndicatorMaximum { get; set; }
+
+ public int MaximumExecutionTime { get; set; }
+
+ public string Source { get; set; }
+
+ public int Severity { get; set; }
+
+ public bool Completed { get; set; }
+
+ public bool NotifyOnComplete { get; set; }
+
+ public BackgroundTaskStatus Status { get; set; }
+
+ #endregion
+
+ #region Constructors
+
+ public BackgroundTask()
{
- get { return this.startDate; }
- set { this.startDate = value; }
+ StartDate = DateTime.Now;
+ Severity = 0;
+ IndicatorCurrent = 0;
+ IndicatorMaximum = 0;
+ Status = BackgroundTaskStatus.Run;
+
+ Completed = false;
+ NotifyOnComplete = false;
}
- public System.DateTime FinishDate
+ public BackgroundTask(Guid guid, String taskId, int userId, int effectiveUserId, String source, String taskName, String itemName,
+ int itemId, int scheduleId, int packageId, int maximumExecutionTime, List parameters)
+ : this()
{
- get { return this.finishDate; }
- set { this.finishDate = value; }
+ Guid = guid;
+ TaskId = taskId;
+ UserId = userId;
+ EffectiveUserId = effectiveUserId;
+ Source = source;
+ TaskName = taskName;
+ ItemName = itemName;
+ ItemId = itemId;
+ ScheduleId = scheduleId;
+ PackageId = packageId;
+ MaximumExecutionTime = maximumExecutionTime;
+ Params = parameters;
}
- public string Source
+ #endregion
+
+ #region Methods
+
+ public List GetLogs()
{
- get { return this.source; }
- set { this.source = value; }
+ return Logs;
}
- public string TaskName
+ public Object GetParamValue(String name)
{
- get { return this.taskName; }
- set { this.taskName = value; }
+ foreach(BackgroundTaskParameter param in Params)
+ {
+ if (param.Name == name)
+ return param.Value;
+ }
+
+ return null;
}
- public int ItemId
+ public void UpdateParamValue(String name, object value)
{
- get { return this.itemId; }
- set { this.itemId = value; }
+ foreach (BackgroundTaskParameter param in Params)
+ {
+ if (param.Name == name)
+ {
+ param.Value = value;
+
+ return;
+
+ }
+ }
+
+ Params.Add(new BackgroundTaskParameter(name, value));
}
- public int PackageId
+ public bool ContainsParam(String name)
{
- get { return this.packageId; }
- set { this.packageId = value; }
+ foreach (BackgroundTaskParameter param in Params)
+ {
+ if (param.Name == name)
+ return true;
+ }
+
+ return false;
}
- public int Severity
+ #endregion
+ }
+
+ public class BackgroundTaskParameter
+ {
+ #region Properties
+
+ public int ParameterId { get; set; }
+
+ public int TaskId { get; set; }
+
+ public String Name { get; set; }
+
+ public Object Value { get; set; }
+
+ public String TypeName { get; set; }
+
+ public String SerializerValue { get; set; }
+
+ #endregion
+
+ #region Constructors
+
+ public BackgroundTaskParameter() { }
+
+ public BackgroundTaskParameter(String name, Object value)
{
- get { return this.severity; }
- set { this.severity = value; }
+ Name = name;
+ Value = value;
}
- [XmlIgnore]
- public List LogRecords
- {
- get { return this.logRecords; }
- set { this.logRecords = value; }
- }
-
- public List LastLogRecords
- {
- get { return this.lastLogRecords; }
- }
-
- public string ItemName
- {
- get { return this.itemName; }
- set { this.itemName = value; }
- }
-
- public BackgroundTaskLogRecord LastLogRecord
- {
- get { return this.lastLogRecord; }
- set { this.lastLogRecord = value; }
- }
-
- public string TaskId
- {
- get { return this.taskId; }
- set { this.taskId = value; }
- }
-
- public int UserId
- {
- get { return this.userId; }
- set { this.userId = value; }
- }
-
- [XmlIgnore]
- public Hashtable Parameters
- {
- get { return this.parameters; }
- }
-
- public int IndicatorMaximum
- {
- get { return this.indicatorMaximum; }
- set { this.indicatorMaximum = value; }
- }
-
- public int IndicatorCurrent
- {
- get { return this.indicatorCurrent; }
- set { this.indicatorCurrent = value; }
- }
-
- public bool Completed
- {
- get { return this.completed; }
- set { this.completed = value; }
- }
-
- public bool NotifyOnComplete
- {
- get { return this.notifyOnComplete; }
- set { this.notifyOnComplete = value; }
- }
-
- public int EffectiveUserId
- {
- get { return this.effectiveUserId; }
- set { this.effectiveUserId = value; }
- }
-
- [XmlIgnore]
- public System.Threading.Thread TaskThread
- {
- get { return this.taskThread; }
- set { this.taskThread = value; }
- }
-
- public int ScheduleId
- {
- get { return this.scheduleId; }
- set { this.scheduleId = value; }
- }
-
- public int MaximumExecutionTime
- {
- get { return this.maximumExecutionTime; }
- set { this.maximumExecutionTime = value; }
- }
+ #endregion
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTaskLogRecord.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTaskLogRecord.cs
index d6ef3ab4..afccc7d8 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTaskLogRecord.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTaskLogRecord.cs
@@ -34,54 +34,54 @@ namespace WebsitePanel.EnterpriseServer
{
public class BackgroundTaskLogRecord
{
- private DateTime date = DateTime.Now;
- private string text;
- private int severity; /* 0 - Info, 1 - Warning, 2 - Error */
- private string[] textParameters;
- private int textIdent = 0;
- private bool innerTaskStart;
- private string exceptionStackTrace;
+ #region Properties
- public System.DateTime Date
+ public int LogId { get; set; }
+
+ public int TaskId { get; set; }
+
+ public DateTime Date { get; set; }
+
+ public String ExceptionStackTrace { get; set; }
+
+ public bool InnerTaskStart { get; set; }
+
+ public int Severity { get; set; }
+
+ public String Text { get; set; }
+
+ public int TextIdent { get; set; }
+
+ public string[] TextParameters { get; set; }
+
+ public string XmlParameters { get; set; }
+
+ #endregion
+
+ #region Constructors
+
+ public BackgroundTaskLogRecord()
{
- get { return this.date; }
- set { this.date = value; }
+ Date = DateTime.Now;
}
- public string Text
+ public BackgroundTaskLogRecord(int taskId, int textIdent, bool innerTaskStart, String text, string[] textParameters)
+ : this()
{
- get { return this.text; }
- set { this.text = value; }
+ TaskId = taskId;
+ TextIdent = textIdent;
+ Text = text;
+ InnerTaskStart = innerTaskStart;
+ TextParameters = textParameters;
}
- public int Severity
+ public BackgroundTaskLogRecord(int taskId, int textIdent, bool innerTaskStart, String text,
+ String exceptionStackTrace, string[] textParameters)
+ : this(taskId, textIdent, innerTaskStart, text, textParameters)
{
- get { return this.severity; }
- set { this.severity = value; }
+ ExceptionStackTrace = exceptionStackTrace;
}
- public string[] TextParameters
- {
- get { return this.textParameters; }
- set { this.textParameters = value; }
- }
-
- public int TextIdent
- {
- get { return this.textIdent; }
- set { this.textIdent = value; }
- }
-
- public bool InnerTaskStart
- {
- get { return this.innerTaskStart; }
- set { this.innerTaskStart = value; }
- }
-
- public string ExceptionStackTrace
- {
- get { return this.exceptionStackTrace; }
- set { this.exceptionStackTrace = value; }
- }
+ #endregion
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTaskStatus.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTaskStatus.cs
new file mode 100644
index 00000000..74747641
--- /dev/null
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTaskStatus.cs
@@ -0,0 +1,10 @@
+namespace WebsitePanel.EnterpriseServer
+{
+ public enum BackgroundTaskStatus
+ {
+ Run = 1,
+ Abort = 2,
+ Starting = 3,
+ Stopping = 4
+ }
+}
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/WebsitePanel.EnterpriseServer.Base.csproj b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/WebsitePanel.EnterpriseServer.Base.csproj
index 2168e6e3..dde357fa 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/WebsitePanel.EnterpriseServer.Base.csproj
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/WebsitePanel.EnterpriseServer.Base.csproj
@@ -156,6 +156,7 @@
+
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Comments/CommentsController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Comments/CommentsController.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Comments/CommentsController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Comments/CommentsController.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/ConfigSettings.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ConfigSettings.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/ConfigSettings.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ConfigSettings.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/CryptoUtils.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/CryptoUtils.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/CryptoUtils.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/CryptoUtils.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/EnterpriseServerIdentity.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/EnterpriseServerIdentity.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/EnterpriseServerIdentity.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/EnterpriseServerIdentity.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/EnterpriseServerPrincipal.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/EnterpriseServerPrincipal.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/EnterpriseServerPrincipal.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/EnterpriseServerPrincipal.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/FileUtils.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/FileUtils.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/FileUtils.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/FileUtils.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/IPAddress.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/IPAddress.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/IPAddress.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/IPAddress.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/Int128.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/Int128.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/Int128.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/Int128.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/MailHelper.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/MailHelper.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/MailHelper.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/MailHelper.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ObjectUtils.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ObjectUtils.cs
new file mode 100644
index 00000000..4359ca98
--- /dev/null
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ObjectUtils.cs
@@ -0,0 +1,668 @@
+// Copyright (c) 2012, Outercurve Foundation.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification,
+// are permitted provided that the following conditions are met:
+//
+// - Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// - Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// - Neither the name of the Outercurve Foundation nor the names of its
+// contributors may be used to endorse or promote products derived from this
+// software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+using System;
+using System.Reflection;
+using System.Data;
+using System.Collections;
+using System.Collections.Generic;
+
+using WebsitePanel.Providers;
+
+namespace WebsitePanel.EnterpriseServer
+{
+ ///
+ /// Summary description for ObjectUtils.
+ ///
+ public class ObjectUtils
+ {
+ public static DT ConvertObject(ST so)
+ {
+ Dictionary sProps = GetTypePropertiesHash(typeof(ST));
+ Dictionary dProps = GetTypePropertiesHash(typeof(DT));
+
+ DT dobj = (DT)Activator.CreateInstance(typeof(DT));
+
+ // copy properties
+ foreach (string propName in sProps.Keys)
+ {
+ if (dProps.ContainsKey(propName) && sProps[propName].Name != "Item")
+ {
+ if (sProps[propName].CanRead)
+ {
+ object val = sProps[propName].GetValue(so, null);
+ if (dProps[propName] != null)
+ {
+ if (val != null && dProps[propName].CanWrite)
+ {
+ dProps[propName].SetValue(dobj, val, null);
+ }
+ }
+ }
+ }
+ }
+ return dobj;
+ }
+
+ private static Hashtable typeProperties = new Hashtable();
+
+ public static Hashtable GetObjectProperties(object obj, bool persistentOnly)
+ {
+ Hashtable hash = new Hashtable();
+
+ Type type = obj.GetType();
+ PropertyInfo[] props = type.GetProperties(BindingFlags.Instance
+ | BindingFlags.Public);
+ foreach (PropertyInfo prop in props)
+ {
+ // check for persistent attribute
+ object[] attrs = prop.GetCustomAttributes(typeof(PersistentAttribute), false);
+ if (!persistentOnly || (persistentOnly && attrs.Length > 0) && !hash.ContainsKey(prop.Name))
+ {
+ object val = prop.GetValue(obj, null);
+ string s = "";
+ if (val != null)
+ {
+ if (prop.PropertyType == typeof(string[]))
+ s = String.Join(";", (string[])val);
+ else if (prop.PropertyType == typeof(int[]))
+ {
+ int[] ivals = (int[])val;
+ string[] svals = new string[ivals.Length];
+ for (int i = 0; i < svals.Length; i++)
+ svals[i] = ivals[i].ToString();
+ s = String.Join(";", svals);
+ }
+ else
+ s = val.ToString();
+ }
+
+ // add property to hash
+ hash.Add(prop.Name, s);
+ }
+ }
+
+ return hash;
+ }
+
+ public static void FillCollectionFromDataSet(List list, DataSet ds)
+ {
+ if (ds.Tables.Count == 0)
+ return;
+
+ FillCollectionFromDataView(list, ds.Tables[0].DefaultView);
+ }
+
+ public static void FillCollectionFromDataView(List list, DataView dv)
+ {
+ Type type = typeof(T);
+
+ PropertyInfo[] props = GetTypeProperties(type);
+
+ foreach (DataRowView dr in dv)
+ {
+ // create an instance
+ T obj = (T)Activator.CreateInstance(type);
+ list.Add(obj);
+
+ // fill properties
+ for (int i = 0; i < props.Length; i++)
+ {
+ string propName = props[i].Name;
+ if (dv.Table.Columns[propName] == null)
+ continue;
+
+ object propVal = dr[propName];
+ if (propVal == DBNull.Value)
+ props[i].SetValue(obj, GetNull(props[i].PropertyType), null);
+ else
+ {
+ try
+ {
+ // try implicit type conversion
+ props[i].SetValue(obj, propVal, null);
+ }
+ catch
+ {
+ // convert to string and then set property value
+ try
+ {
+ string strVal = propVal.ToString();
+ props[i].SetValue(obj, Cast(strVal, props[i].PropertyType), null);
+ }
+ catch
+ {
+ // skip property init
+ }
+ }
+ }
+ } // for properties
+ } // for rows
+ }
+
+ public static List CreateListFromDataReader(IDataReader reader)
+ {
+ List list = new List();
+ FillCollectionFromDataReader(list, reader);
+ return list;
+ }
+
+ public static List CreateListFromDataSet(DataSet ds)
+ {
+ List list = new List();
+ FillCollectionFromDataSet(list, ds);
+ return list;
+ }
+
+ public static void FillCollectionFromDataReader(List list, IDataReader reader)
+ {
+ Type type = typeof(T);
+
+ try
+ {
+ // get type properties
+ PropertyInfo[] props = GetTypeProperties(type);
+
+ // iterate through reader
+ while (reader.Read())
+ {
+ T obj = (T)Activator.CreateInstance(type);
+ list.Add(obj);
+
+ // set properties
+ for (int i = 0; i < props.Length; i++)
+ {
+ string propName = props[i].Name;
+
+ try
+ {
+
+ object propVal = reader[propName];
+ if (propVal == DBNull.Value)
+ props[i].SetValue(obj, GetNull(props[i].PropertyType), null);
+ else
+ {
+ try
+ {
+ // try implicit type conversion
+ props[i].SetValue(obj, propVal, null);
+ }
+ catch
+ {
+ // convert to string and then set property value
+ try
+ {
+ string strVal = propVal.ToString();
+ props[i].SetValue(obj, Cast(strVal, props[i].PropertyType), null);
+ }
+ catch { }
+ }
+ }
+ }
+ catch { } // just skip
+ } // for properties
+ }
+ }
+ finally
+ {
+ reader.Close();
+ }
+ }
+
+ public static T FillObjectFromDataView(DataView dv)
+ {
+ Type type = typeof(T);
+ T obj = default(T);
+
+ // get type properties
+ PropertyInfo[] props = GetTypeProperties(type);
+
+ // iterate through reader
+ foreach (DataRowView dr in dv)
+ {
+ obj = (T)Activator.CreateInstance(type);
+
+ // set properties
+ for (int i = 0; i < props.Length; i++)
+ {
+ string propName = props[i].Name;
+
+ try
+ {
+ // verify if there is such a column
+ if (!dr.Row.Table.Columns.Contains(propName.ToLower()))
+ {
+ // if not, we move to another property
+ // because this one we cannot set
+ continue;
+ }
+
+ object propVal = dr[propName];
+ if (propVal == DBNull.Value)
+ props[i].SetValue(obj, GetNull(props[i].PropertyType), null);
+ else
+ {
+ try
+ {
+ string strVal = propVal.ToString();
+
+ //convert to DateTime
+ if (props[i].PropertyType.UnderlyingSystemType.FullName == typeof(DateTime).FullName)
+ {
+ DateTime date = DateTime.MinValue;
+ if (DateTime.TryParse(strVal, out date))
+ {
+ props[i].SetValue(obj, date, null);
+ }
+ }
+ else
+ {
+ //Convert generic
+ props[i].SetValue(obj, Cast(strVal, props[i].PropertyType), null);
+ }
+ }
+ catch
+ {
+ // skip property init
+ }
+ }
+ }
+ catch { } // just skip
+ } // for properties
+ }
+
+ return obj;
+ }
+
+ public static T FillObjectFromDataReader(IDataReader reader)
+ {
+ Type type = typeof(T);
+
+ T obj = default(T);
+
+ try
+ {
+ // get type properties
+ PropertyInfo[] props = GetTypeProperties(type);
+
+ // iterate through reader
+ while (reader.Read())
+ {
+ obj = (T)Activator.CreateInstance(type);
+
+ // set properties
+ for (int i = 0; i < props.Length; i++)
+ {
+ string propName = props[i].Name;
+
+ try
+ {
+ if (!IsColumnExists(propName, reader.GetSchemaTable()))
+ {
+ continue;
+ }
+ object propVal = reader[propName];
+
+ if (propVal == DBNull.Value)
+ props[i].SetValue(obj, GetNull(props[i].PropertyType), null);
+ else
+ {
+ try
+ {
+ //try string first
+ if (props[i].PropertyType.UnderlyingSystemType.FullName == typeof(String).FullName)
+ {
+ props[i].SetValue(obj, propVal.ToString(), null);
+ }
+ else
+ {
+ // then, try implicit type conversion
+ props[i].SetValue(obj, propVal, null);
+ }
+ }
+ catch
+ {
+ // convert to string and then set property value
+ try
+ {
+ string strVal = propVal.ToString();
+ props[i].SetValue(obj, Cast(strVal, props[i].PropertyType), null);
+ }
+ catch
+ {
+ // skip property init
+ }
+ }
+ }
+ }
+ catch { } // just skip
+ } // for properties
+ }
+ }
+ finally
+ {
+ reader.Close();
+ }
+
+ return obj;
+ }
+
+ private static Hashtable propertiesCache = new Hashtable();
+
+ public static object CreateObjectFromDataview(Type type, DataView dv,
+ string nameColumn, string valueColumn, bool persistentOnly)
+ {
+ // create hash of properties from datareader
+ Hashtable propValues = new Hashtable();
+ foreach (DataRowView dr in dv)
+ {
+ if (propValues[dr[nameColumn]] == null && !propValues.ContainsKey(dr[nameColumn]))
+ propValues.Add(dr[nameColumn], dr[valueColumn]);
+ }
+
+ return CreateObjectFromHash(type, propValues, persistentOnly);
+ }
+
+ public static object CreateObjectFromDataReader(Type type, IDataReader reader,
+ string nameColumn, string valueColumn, bool persistentOnly)
+ {
+ // create hash of properties from datareader
+ Hashtable propValues = new Hashtable();
+ while (reader.Read())
+ {
+ if (propValues[reader[nameColumn]] == null && !propValues.ContainsKey(reader[nameColumn]))
+ propValues.Add(reader[nameColumn], reader[valueColumn]);
+ }
+ reader.Close();
+
+ return CreateObjectFromHash(type, propValues, persistentOnly);
+ }
+
+ public static object CreateObjectFromHash(Type type, Hashtable propValues, bool persistentOnly)
+ {
+ // create object
+ object obj = Activator.CreateInstance(type);
+
+ CreateObjectFromHash(obj, propValues, persistentOnly);
+
+ return obj;
+ }
+
+ public static void CopyPersistentPropertiesFromSource(T source, T target)
+ where T : ServiceProviderItem
+ {
+ //
+ var typeSource = source.GetType();
+ var typeTarget = target.GetType();
+ // get all property infos
+ Hashtable props = null;
+ if (propertiesCache[typeSource.Name] != null)
+ {
+ // load properties from cache
+ props = (Hashtable)propertiesCache[typeSource.Name];
+ }
+ else
+ {
+ // create properties cache
+ props = new Hashtable();
+ //
+ PropertyInfo[] objProps = typeSource.GetProperties(BindingFlags.Instance
+ //| BindingFlags.DeclaredOnly
+ | BindingFlags.Public);
+ foreach (PropertyInfo prop in objProps)
+ {
+ // check for persistent attribute
+ object[] attrs = prop.GetCustomAttributes(typeof(PersistentAttribute), false);
+ // Persistent only
+ if (attrs.Length > 0 && !props.ContainsKey(prop.Name))
+ {
+ // add property to hash
+ props.Add(prop.Name, prop);
+ }
+ }
+
+ if (!propertiesCache.ContainsKey(typeSource.Name))
+ {
+ // add to cache
+ propertiesCache.Add(typeSource.Name, props);
+ }
+ }
+
+ // Copy the data
+ foreach (PropertyInfo propertyInfo in props.Values)
+ {
+ propertyInfo.SetValue(target, propertyInfo.GetValue(source, null), null);
+ }
+ }
+
+ public static void CreateObjectFromHash(object obj, Hashtable propValues, bool persistentOnly)
+ {
+ Type type = obj.GetType();
+
+ // get all property infos
+ Hashtable props = null;
+ if (propertiesCache[type.Name] != null)
+ {
+ // load properties from cache
+ props = (Hashtable)propertiesCache[type.Name];
+ }
+ else
+ {
+ // create properties cache
+ props = new Hashtable();
+ PropertyInfo[] objProps = type.GetProperties(BindingFlags.Instance
+ //| BindingFlags.DeclaredOnly
+ | BindingFlags.Public);
+ foreach (PropertyInfo prop in objProps)
+ {
+ // check for persistent attribute
+ object[] attrs = prop.GetCustomAttributes(typeof(PersistentAttribute), false);
+ if (!persistentOnly || (persistentOnly && attrs.Length > 0) && !props.ContainsKey(prop.Name))
+ {
+ // add property to hash
+ props.Add(prop.Name, prop);
+ }
+ }
+
+ if (!propertiesCache.ContainsKey(type.Name))
+ {
+ // add to cache
+ propertiesCache.Add(type.Name, props);
+ }
+ }
+
+ // fill properties
+ foreach (string propName in propValues.Keys)
+ {
+ // try to locate specified property
+ if (props[propName] != null)
+ {
+ // set property
+ // we support:
+ // String
+ // Int32
+ // Boolean
+ // Float
+ PropertyInfo prop = (PropertyInfo)props[propName];
+ string val = propValues[propName].ToString();
+ if (prop.PropertyType == typeof(String))
+ prop.SetValue(obj, val, null);
+ else if (prop.PropertyType == typeof(Int32))
+ prop.SetValue(obj, Int32.Parse(val), null);
+ else
+ if (prop.PropertyType == typeof(long))
+ prop.SetValue(obj, long.Parse(val), null);
+ else
+ if (prop.PropertyType == typeof(Boolean))
+ prop.SetValue(obj, Boolean.Parse(val), null);
+ else if (prop.PropertyType == typeof(Single))
+ prop.SetValue(obj, Single.Parse(val), null);
+ else if (prop.PropertyType.IsEnum)
+ prop.SetValue(obj, Enum.Parse(prop.PropertyType, val, true), null);
+ else
+ if (prop.PropertyType == typeof(Guid))
+ prop.SetValue(obj, new Guid(val), null);
+ else
+ if (prop.PropertyType == typeof(string[]))
+ {
+ if (val == "")
+ prop.SetValue(obj, new string[0], null);
+ else
+ prop.SetValue(obj, val.Split(';'), null);
+ }
+ else if (prop.PropertyType == typeof(int[]))
+ {
+ string[] svals = val.Split(';');
+ int[] ivals = new int[svals.Length];
+
+ for (int i = 0; i < svals.Length; i++)
+ ivals[i] = Int32.Parse(svals[i]);
+
+ if (val == "")
+ ivals = new int[0];
+
+ prop.SetValue(obj, ivals, null);
+ }
+ }
+ }
+ }
+
+ private static Dictionary GetTypePropertiesHash(Type type)
+ {
+ Dictionary hash = new Dictionary();
+ PropertyInfo[] props = GetTypeProperties(type);
+ foreach (PropertyInfo prop in props)
+ {
+ if (!hash.ContainsKey(prop.Name))
+ {
+ hash.Add(prop.Name, prop);
+ }
+ }
+ return hash;
+ }
+
+ private static PropertyInfo[] GetTypeProperties(Type type)
+ {
+ string typeName = type.AssemblyQualifiedName;
+ if (typeProperties[typeName] != null)
+ return (PropertyInfo[])typeProperties[typeName];
+
+ PropertyInfo[] props = type.GetProperties(BindingFlags.Instance | BindingFlags.Public);
+ typeProperties[typeName] = props;
+ return props;
+ }
+
+ public static object GetNull(Type type)
+ {
+ if (type == typeof(string))
+ return null;
+ if (type == typeof(Int32))
+ return 0;
+ if (type == typeof(Int64))
+ return 0;
+ if (type == typeof(Boolean))
+ return false;
+ if (type == typeof(Decimal))
+ return 0M;
+ else
+ return null;
+ }
+
+ public static object Cast(string val, Type type)
+ {
+ if (type == typeof(string))
+ return val;
+ if (type == typeof(Int32))
+ return Int32.Parse(val);
+ if (type == typeof(Int64))
+ return Int64.Parse(val);
+ if (type == typeof(Boolean))
+ return Boolean.Parse(val);
+ if (type == typeof(Decimal))
+ return Decimal.Parse(val);
+ if (type == typeof(string[]) && val != null)
+ {
+ return val.Split(';');
+ }
+ if (type.IsEnum)
+ return Enum.Parse(type, val, true);
+
+ if (type == typeof(int[]) && val != null)
+ {
+ string[] sarr = val.Split(';');
+ int[] iarr = new int[sarr.Length];
+ for (int i = 0; i < sarr.Length; i++)
+ iarr[i] = Int32.Parse(sarr[i]);
+ return iarr;
+ }
+ else
+ return val;
+ }
+
+ public static string GetTypeFullName(Type type)
+ {
+ return type.FullName + ", " + type.Assembly.GetName().Name;
+ }
+
+
+ #region Helper Functions
+
+ ///
+ /// This function is used to determine whether IDataReader contains a Column.
+ ///
+ /// Name of the column.
+ /// The schema that decribes result-set contains.
+ /// True, when required column exists in the . Otherwise, false.
+ ///
+ /// The followin example shows how to look for the "Role" column in the .
+ ///
+ /// IDataReader reader = ....
+ /// if (!IsColumnExists("Role", reader.GetSchemaTable())
+ /// {
+ /// continue;
+ /// }
+ ///
+ /// object roleValue = reader["Role"];
+ ///
+ ///
+ static bool IsColumnExists(string columnName, DataTable schemaTable)
+ {
+ foreach (DataRow row in schemaTable.Rows)
+ {
+ if (String.Compare(row[0].ToString(), columnName, StringComparison.OrdinalIgnoreCase) == 0)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/SecurityContext.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/SecurityContext.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/SecurityContext.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/SecurityContext.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/ServiceProviderProxy.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ServiceProviderProxy.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/ServiceProviderProxy.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ServiceProviderProxy.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/ServiceUsernameTokenManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ServiceUsernameTokenManager.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/ServiceUsernameTokenManager.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ServiceUsernameTokenManager.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/UsernameAssertion.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/UsernameAssertion.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/UsernameAssertion.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/UsernameAssertion.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/Utils.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/Utils.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/Utils.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/Utils.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs
new file mode 100644
index 00000000..1503bab5
--- /dev/null
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs
@@ -0,0 +1,3966 @@
+// Copyright (c) 2012, Outercurve Foundation.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification,
+// are permitted provided that the following conditions are met:
+//
+// - Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// - Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// - Neither the name of the Outercurve Foundation nor the names of its
+// contributors may be used to endorse or promote products derived from this
+// software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+using System;
+using System.Configuration;
+using System.Data;
+using System.Data.SqlClient;
+using System.Text.RegularExpressions;
+using WebsitePanel.Providers.HostedSolution;
+using Microsoft.ApplicationBlocks.Data;
+using System.Collections.Generic;
+using Microsoft.Win32;
+
+namespace WebsitePanel.EnterpriseServer
+{
+ ///
+ /// Summary description for DataProvider.
+ ///
+ public static class DataProvider
+ {
+
+ static string EnterpriseServerRegistryPath = "SOFTWARE\\WebsitePanel\\EnterpriseServer";
+
+ private static string ConnectionString
+ {
+ get
+ {
+ string ConnectionKey = ConfigurationManager.AppSettings["WebsitePanel.AltConnectionString"];
+ string value = string.Empty;
+
+ if (!string.IsNullOrEmpty(ConnectionKey))
+ {
+ RegistryKey root = Registry.LocalMachine;
+ RegistryKey rk = root.OpenSubKey(EnterpriseServerRegistryPath);
+ if (rk != null)
+ {
+ value = (string)rk.GetValue(ConnectionKey, null);
+ rk.Close();
+ }
+ }
+
+ if (!string.IsNullOrEmpty(value))
+ return value;
+ else
+ return ConfigurationManager.ConnectionStrings["EnterpriseServer"].ConnectionString;
+ }
+ }
+
+ private static string ObjectQualifier
+ {
+ get
+ {
+ return "";
+ }
+ }
+
+ #region System Settings
+
+ public static IDataReader GetSystemSettings(string settingsName)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetSystemSettings",
+ new SqlParameter("@SettingsName", settingsName)
+ );
+ }
+
+ public static void SetSystemSettings(string settingsName, string xml)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "SetSystemSettings",
+ new SqlParameter("@SettingsName", settingsName),
+ new SqlParameter("@Xml", xml)
+ );
+ }
+
+ #endregion
+
+ #region Users
+ public static bool CheckUserExists(string username)
+ {
+ SqlParameter prmExists = new SqlParameter("@Exists", SqlDbType.Bit);
+ prmExists.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "CheckUserExists",
+ prmExists,
+ new SqlParameter("@username", username));
+
+ return Convert.ToBoolean(prmExists.Value);
+ }
+
+ public static DataSet GetUsersPaged(int actorId, int userId, string filterColumn, string filterValue,
+ int statusId, int roleId, string sortColumn, int startRow, int maximumRows, bool recursive)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetUsersPaged",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@UserID", userId),
+ new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)),
+ new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)),
+ new SqlParameter("@statusId", statusId),
+ new SqlParameter("@roleId", roleId),
+ new SqlParameter("@SortColumn", VerifyColumnName(sortColumn)),
+ new SqlParameter("@startRow", startRow),
+ new SqlParameter("@maximumRows", maximumRows),
+ new SqlParameter("@recursive", recursive));
+ }
+
+ public static DataSet GetUsersSummary(int actorId, int userId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetUsersSummary",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@UserID", userId));
+ }
+
+ public static DataSet GetUserDomainsPaged(int actorId, int userId, string filterColumn, string filterValue,
+ string sortColumn, int startRow, int maximumRows)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetUserDomainsPaged",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@UserID", userId),
+ new SqlParameter("@filterColumn", VerifyColumnName(filterColumn)),
+ new SqlParameter("@filterValue", VerifyColumnValue(filterValue)),
+ new SqlParameter("@sortColumn", VerifyColumnName(sortColumn)),
+ new SqlParameter("@startRow", startRow),
+ new SqlParameter("@maximumRows", maximumRows));
+ }
+
+ public static DataSet GetUsers(int actorId, int ownerId, bool recursive)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetUsers",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@OwnerID", ownerId),
+ new SqlParameter("@Recursive", recursive));
+ }
+
+ public static DataSet GetUserParents(int actorId, int userId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetUserParents",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@UserID", userId));
+ }
+
+ public static DataSet GetUserPeers(int actorId, int userId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetUserPeers",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@userId", userId));
+ }
+
+ public static IDataReader GetUserByExchangeOrganizationIdInternally(int itemId)
+ {
+ return (IDataReader)SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetUserByExchangeOrganizationIdInternally",
+ new SqlParameter("@ItemID", itemId));
+ }
+
+
+
+ public static IDataReader GetUserByIdInternally(int userId)
+ {
+ return (IDataReader)SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetUserByIdInternally",
+ new SqlParameter("@UserID", userId));
+ }
+
+ public static IDataReader GetUserByUsernameInternally(string username)
+ {
+ return (IDataReader)SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetUserByUsernameInternally",
+ new SqlParameter("@Username", username));
+ }
+
+ public static IDataReader GetUserById(int actorId, int userId)
+ {
+ return (IDataReader)SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetUserById",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@UserID", userId));
+ }
+
+ public static IDataReader GetUserByUsername(int actorId, string username)
+ {
+ return (IDataReader)SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetUserByUsername",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@Username", username));
+ }
+
+ public static int AddUser(int actorId, int ownerId, int roleId, int statusId, string subscriberNumber, int loginStatusId, bool isDemo,
+ bool isPeer, string comments, string username, string password,
+ string firstName, string lastName, string email, string secondaryEmail,
+ string address, string city, string country, string state, string zip,
+ string primaryPhone, string secondaryPhone, string fax, string instantMessenger, bool htmlMail,
+ string companyName, bool ecommerceEnabled)
+ {
+ SqlParameter prmUserId = new SqlParameter("@UserID", SqlDbType.Int);
+ prmUserId.Direction = ParameterDirection.Output;
+
+ // add user to WebsitePanel Users table
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "AddUser",
+ prmUserId,
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@OwnerID", ownerId),
+ new SqlParameter("@RoleID", roleId),
+ new SqlParameter("@StatusId", statusId),
+ new SqlParameter("@SubscriberNumber", subscriberNumber),
+ new SqlParameter("@LoginStatusId", loginStatusId),
+ new SqlParameter("@IsDemo", isDemo),
+ new SqlParameter("@IsPeer", isPeer),
+ new SqlParameter("@Comments", comments),
+ new SqlParameter("@username", username),
+ new SqlParameter("@password", password),
+ new SqlParameter("@firstName", firstName),
+ new SqlParameter("@lastName", lastName),
+ new SqlParameter("@email", email),
+ new SqlParameter("@secondaryEmail", secondaryEmail),
+ new SqlParameter("@address", address),
+ new SqlParameter("@city", city),
+ new SqlParameter("@country", country),
+ new SqlParameter("@state", state),
+ new SqlParameter("@zip", zip),
+ new SqlParameter("@primaryPhone", primaryPhone),
+ new SqlParameter("@secondaryPhone", secondaryPhone),
+ new SqlParameter("@fax", fax),
+ new SqlParameter("@instantMessenger", instantMessenger),
+ new SqlParameter("@htmlMail", htmlMail),
+ new SqlParameter("@CompanyName", companyName),
+ new SqlParameter("@EcommerceEnabled", ecommerceEnabled));
+
+ return Convert.ToInt32(prmUserId.Value);
+ }
+
+ public static void UpdateUser(int actorId, int userId, int roleId, int statusId, string subscriberNumber, int loginStatusId, bool isDemo,
+ bool isPeer, string comments, string firstName, string lastName, string email, string secondaryEmail,
+ string address, string city, string country, string state, string zip,
+ string primaryPhone, string secondaryPhone, string fax, string instantMessenger, bool htmlMail,
+ string companyName, bool ecommerceEnabled, string additionalParams)
+ {
+ // update user
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "UpdateUser",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@RoleID", roleId),
+ new SqlParameter("@StatusId", statusId),
+ new SqlParameter("@SubscriberNumber", subscriberNumber),
+ new SqlParameter("@LoginStatusId", loginStatusId),
+ new SqlParameter("@UserID", userId),
+ new SqlParameter("@IsDemo", isDemo),
+ new SqlParameter("@IsPeer", isPeer),
+ new SqlParameter("@Comments", comments),
+ new SqlParameter("@firstName", firstName),
+ new SqlParameter("@lastName", lastName),
+ new SqlParameter("@email", email),
+ new SqlParameter("@secondaryEmail", secondaryEmail),
+ new SqlParameter("@address", address),
+ new SqlParameter("@city", city),
+ new SqlParameter("@country", country),
+ new SqlParameter("@state", state),
+ new SqlParameter("@zip", zip),
+ new SqlParameter("@primaryPhone", primaryPhone),
+ new SqlParameter("@secondaryPhone", secondaryPhone),
+ new SqlParameter("@fax", fax),
+ new SqlParameter("@instantMessenger", instantMessenger),
+ new SqlParameter("@htmlMail", htmlMail),
+ new SqlParameter("@CompanyName", companyName),
+ new SqlParameter("@EcommerceEnabled", ecommerceEnabled),
+ new SqlParameter("@AdditionalParams", additionalParams));
+ }
+
+ public static void UpdateUserFailedLoginAttempt(int userId, int lockOut, bool reset)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "UpdateUserFailedLoginAttempt",
+ new SqlParameter("@UserID", userId),
+ new SqlParameter("@LockOut", lockOut),
+ new SqlParameter("@Reset", reset));
+ }
+
+ public static void DeleteUser(int actorId, int userId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "DeleteUser",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@UserID", userId));
+ }
+
+ public static void ChangeUserPassword(int actorId, int userId, string password)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "ChangeUserPassword",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@UserID", userId),
+ new SqlParameter("@password", password));
+ }
+
+ #endregion
+
+ #region User Settings
+ public static IDataReader GetUserSettings(int actorId, int userId, string settingsName)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetUserSettings",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@UserID", userId),
+ new SqlParameter("@SettingsName", settingsName));
+ }
+ public static void UpdateUserSettings(int actorId, int userId, string settingsName, string xml)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "UpdateUserSettings",
+ new SqlParameter("@UserID", userId),
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@SettingsName", settingsName),
+ new SqlParameter("@Xml", xml));
+ }
+ #endregion
+
+ #region Servers
+ public static DataSet GetAllServers(int actorId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetAllServers",
+ new SqlParameter("@actorId", actorId));
+ }
+ public static DataSet GetServers(int actorId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetServers",
+ new SqlParameter("@actorId", actorId));
+ }
+
+ public static IDataReader GetServer(int actorId, int serverId)
+ {
+ return (IDataReader)SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetServer",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@ServerID", serverId));
+ }
+
+ public static IDataReader GetServerShortDetails(int serverId)
+ {
+ return (IDataReader)SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetServerShortDetails",
+ new SqlParameter("@ServerID", serverId));
+ }
+
+ public static IDataReader GetServerByName(int actorId, string serverName)
+ {
+ return (IDataReader)SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetServerByName",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@ServerName", serverName));
+ }
+
+ public static IDataReader GetServerInternal(int serverId)
+ {
+ return (IDataReader)SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetServerInternal",
+ new SqlParameter("@ServerID", serverId));
+ }
+
+ public static int AddServer(string serverName, string serverUrl,
+ string password, string comments, bool virtualServer, string instantDomainAlias,
+ int primaryGroupId, bool adEnabled, string adRootDomain, string adUsername, string adPassword,
+ string adAuthenticationType)
+ {
+ SqlParameter prmServerId = new SqlParameter("@ServerID", SqlDbType.Int);
+ prmServerId.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "AddServer",
+ prmServerId,
+ new SqlParameter("@ServerName", serverName),
+ new SqlParameter("@ServerUrl", serverUrl),
+ new SqlParameter("@Password", password),
+ new SqlParameter("@Comments", comments),
+ new SqlParameter("@VirtualServer", virtualServer),
+ new SqlParameter("@InstantDomainAlias", instantDomainAlias),
+ new SqlParameter("@PrimaryGroupId", primaryGroupId),
+ new SqlParameter("@AdEnabled", adEnabled),
+ new SqlParameter("@AdRootDomain", adRootDomain),
+ new SqlParameter("@AdUsername", adUsername),
+ new SqlParameter("@AdPassword", adPassword),
+ new SqlParameter("@AdAuthenticationType", adAuthenticationType));
+
+ return Convert.ToInt32(prmServerId.Value);
+ }
+
+ public static void UpdateServer(int serverId, string serverName, string serverUrl,
+ string password, string comments, string instantDomainAlias,
+ int primaryGroupId, bool adEnabled, string adRootDomain, string adUsername, string adPassword,
+ string adAuthenticationType)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "UpdateServer",
+ new SqlParameter("@ServerID", serverId),
+ new SqlParameter("@ServerName", serverName),
+ new SqlParameter("@ServerUrl", serverUrl),
+ new SqlParameter("@Password", password),
+ new SqlParameter("@Comments", comments),
+ new SqlParameter("@InstantDomainAlias", instantDomainAlias),
+ new SqlParameter("@PrimaryGroupId", primaryGroupId),
+ new SqlParameter("@AdEnabled", adEnabled),
+ new SqlParameter("@AdRootDomain", adRootDomain),
+ new SqlParameter("@AdUsername", adUsername),
+ new SqlParameter("@AdPassword", adPassword),
+ new SqlParameter("@AdAuthenticationType", adAuthenticationType));
+
+ }
+
+ public static int DeleteServer(int serverId)
+ {
+ SqlParameter prmResult = new SqlParameter("@Result", SqlDbType.Int);
+ prmResult.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "DeleteServer",
+ prmResult,
+ new SqlParameter("@ServerID", serverId));
+
+ return Convert.ToInt32(prmResult.Value);
+ }
+ #endregion
+
+ #region Virtual Servers
+ public static DataSet GetVirtualServers(int actorId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetVirtualServers",
+ new SqlParameter("@actorId", actorId));
+ }
+
+ public static DataSet GetAvailableVirtualServices(int actorId, int serverId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetAvailableVirtualServices",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@ServerID", serverId));
+ }
+
+ public static DataSet GetVirtualServices(int actorId, int serverId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetVirtualServices",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@ServerID", serverId));
+ }
+
+ public static void AddVirtualServices(int serverId, string xml)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "AddVirtualServices",
+ new SqlParameter("@ServerID", serverId),
+ new SqlParameter("@xml", xml));
+ }
+
+ public static void DeleteVirtualServices(int serverId, string xml)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "DeleteVirtualServices",
+ new SqlParameter("@ServerID", serverId),
+ new SqlParameter("@xml", xml));
+ }
+
+ public static void UpdateVirtualGroups(int serverId, string xml)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "UpdateVirtualGroups",
+ new SqlParameter("@ServerID", serverId),
+ new SqlParameter("@xml", xml));
+ }
+ #endregion
+
+ #region Providers
+
+ // Providers methods
+
+ public static DataSet GetProviders()
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetProviders");
+ }
+
+ public static DataSet GetGroupProviders(int groupId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetGroupProviders",
+ new SqlParameter("@groupId", groupId));
+ }
+
+ public static IDataReader GetProvider(int providerId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetProvider",
+ new SqlParameter("@ProviderID", providerId));
+ }
+
+ public static IDataReader GetProviderByServiceID(int serviceId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetProviderByServiceID",
+ new SqlParameter("@ServiceID", serviceId));
+ }
+
+ #endregion
+
+ #region IPAddresses
+ public static IDataReader GetIPAddress(int ipAddressId)
+ {
+ return (IDataReader)SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetIPAddress",
+ new SqlParameter("@AddressID", ipAddressId));
+ }
+
+ public static IDataReader GetIPAddresses(int actorId, int poolId, int serverId)
+ {
+ IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ "GetIPAddresses",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@PoolId", poolId),
+ new SqlParameter("@ServerId", serverId));
+ return reader;
+ }
+
+ public static IDataReader GetIPAddressesPaged(int actorId, int poolId, int serverId,
+ string filterColumn, string filterValue,
+ string sortColumn, int startRow, int maximumRows)
+ {
+ IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ "GetIPAddressesPaged",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@PoolId", poolId),
+ new SqlParameter("@ServerId", serverId),
+ new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)),
+ new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)),
+ new SqlParameter("@SortColumn", VerifyColumnName(sortColumn)),
+ new SqlParameter("@startRow", startRow),
+ new SqlParameter("@maximumRows", maximumRows));
+ return reader;
+ }
+
+ public static int AddIPAddress(int poolId, int serverId, string externalIP, string internalIP,
+ string subnetMask, string defaultGateway, string comments)
+ {
+ SqlParameter prmAddresId = new SqlParameter("@AddressID", SqlDbType.Int);
+ prmAddresId.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "AddIPAddress",
+ prmAddresId,
+ new SqlParameter("@ServerID", serverId),
+ new SqlParameter("@externalIP", externalIP),
+ new SqlParameter("@internalIP", internalIP),
+ new SqlParameter("@PoolId", poolId),
+ new SqlParameter("@SubnetMask", subnetMask),
+ new SqlParameter("@DefaultGateway", defaultGateway),
+ new SqlParameter("@Comments", comments));
+
+ return Convert.ToInt32(prmAddresId.Value);
+ }
+
+ public static void UpdateIPAddress(int addressId, int poolId, int serverId,
+ string externalIP, string internalIP, string subnetMask, string defaultGateway, string comments)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "UpdateIPAddress",
+ new SqlParameter("@AddressID", addressId),
+ new SqlParameter("@externalIP", externalIP),
+ new SqlParameter("@internalIP", internalIP),
+ new SqlParameter("@ServerID", serverId),
+ new SqlParameter("@PoolId", poolId),
+ new SqlParameter("@SubnetMask", subnetMask),
+ new SqlParameter("@DefaultGateway", defaultGateway),
+ new SqlParameter("@Comments", comments));
+ }
+
+ public static void UpdateIPAddresses(string xmlIds, int poolId, int serverId,
+ string subnetMask, string defaultGateway, string comments)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "UpdateIPAddresses",
+ new SqlParameter("@Xml", xmlIds),
+ new SqlParameter("@ServerID", serverId),
+ new SqlParameter("@PoolId", poolId),
+ new SqlParameter("@SubnetMask", subnetMask),
+ new SqlParameter("@DefaultGateway", defaultGateway),
+ new SqlParameter("@Comments", comments));
+ }
+
+ public static int DeleteIPAddress(int ipAddressId)
+ {
+ SqlParameter prmResult = new SqlParameter("@Result", SqlDbType.Int);
+ prmResult.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "DeleteIPAddress",
+ prmResult,
+ new SqlParameter("@AddressID", ipAddressId));
+
+ return Convert.ToInt32(prmResult.Value);
+ }
+
+
+
+ #endregion
+
+ #region Clusters
+ public static IDataReader GetClusters(int actorId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetClusters",
+ new SqlParameter("@actorId", actorId));
+ }
+
+ public static int AddCluster(string clusterName)
+ {
+ SqlParameter prmId = new SqlParameter("@ClusterID", SqlDbType.Int);
+ prmId.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "AddCluster",
+ prmId,
+ new SqlParameter("@ClusterName", clusterName));
+
+ return Convert.ToInt32(prmId.Value);
+ }
+
+ public static void DeleteCluster(int clusterId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "DeleteCluster",
+ new SqlParameter("@ClusterId", clusterId));
+ }
+
+ #endregion
+
+ #region Global DNS records
+ public static DataSet GetDnsRecordsByService(int actorId, int serviceId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetDnsRecordsByService",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@ServiceId", serviceId));
+ }
+
+ public static DataSet GetDnsRecordsByServer(int actorId, int serverId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetDnsRecordsByServer",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@ServerId", serverId));
+ }
+
+ public static DataSet GetDnsRecordsByPackage(int actorId, int packageId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetDnsRecordsByPackage",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@PackageId", packageId));
+ }
+
+ public static DataSet GetDnsRecordsByGroup(int groupId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetDnsRecordsByGroup",
+ new SqlParameter("@GroupId", groupId));
+ }
+
+ public static DataSet GetDnsRecordsTotal(int actorId, int packageId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetDnsRecordsTotal",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@packageId", packageId));
+ }
+
+ public static IDataReader GetDnsRecord(int actorId, int recordId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetDnsRecord",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@RecordId", recordId));
+ }
+
+ public static void AddDnsRecord(int actorId, int serviceId, int serverId, int packageId, string recordType,
+ string recordName, string recordData, int mxPriority, int SrvPriority, int SrvWeight, int SrvPort, int ipAddressId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "AddDnsRecord",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@ServiceId", serviceId),
+ new SqlParameter("@ServerId", serverId),
+ new SqlParameter("@PackageId", packageId),
+ new SqlParameter("@RecordType", recordType),
+ new SqlParameter("@RecordName", recordName),
+ new SqlParameter("@RecordData", recordData),
+ new SqlParameter("@MXPriority", mxPriority),
+ new SqlParameter("@SrvPriority", SrvPriority),
+ new SqlParameter("@SrvWeight", SrvWeight),
+ new SqlParameter("@SrvPort", SrvPort),
+ new SqlParameter("@IpAddressId", ipAddressId));
+ }
+
+ public static void UpdateDnsRecord(int actorId, int recordId, string recordType,
+ string recordName, string recordData, int mxPriority, int SrvPriority, int SrvWeight, int SrvPort, int ipAddressId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "UpdateDnsRecord",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@RecordId", recordId),
+ new SqlParameter("@RecordType", recordType),
+ new SqlParameter("@RecordName", recordName),
+ new SqlParameter("@RecordData", recordData),
+ new SqlParameter("@MXPriority", mxPriority),
+ new SqlParameter("@SrvPriority", SrvPriority),
+ new SqlParameter("@SrvWeight", SrvWeight),
+ new SqlParameter("@SrvPort", SrvPort),
+ new SqlParameter("@IpAddressId", ipAddressId));
+ }
+
+
+ public static void DeleteDnsRecord(int actorId, int recordId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "DeleteDnsRecord",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@RecordId", recordId));
+ }
+ #endregion
+
+ #region Domains
+ public static DataSet GetDomains(int actorId, int packageId, bool recursive)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetDomains",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@PackageId", packageId),
+ new SqlParameter("@Recursive", recursive));
+ }
+
+ public static DataSet GetResellerDomains(int actorId, int packageId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetResellerDomains",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@PackageId", packageId));
+ }
+
+ public static DataSet GetDomainsPaged(int actorId, int packageId, int serverId, bool recursive, string filterColumn, string filterValue,
+ string sortColumn, int startRow, int maximumRows)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetDomainsPaged",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@PackageId", packageId),
+ new SqlParameter("@serverId", serverId),
+ new SqlParameter("@recursive", recursive),
+ new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)),
+ new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)),
+ new SqlParameter("@SortColumn", VerifyColumnName(sortColumn)),
+ new SqlParameter("@StartRow", startRow),
+ new SqlParameter("@MaximumRows", maximumRows));
+ }
+
+ public static IDataReader GetDomain(int actorId, int domainId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetDomain",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@domainId", domainId));
+ }
+
+ public static IDataReader GetDomainByName(int actorId, string domainName, bool searchOnDomainPointer, bool isDomainPointer)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetDomainByName",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@domainName", domainName),
+ new SqlParameter("@SearchOnDomainPointer", searchOnDomainPointer),
+ new SqlParameter("@IsDomainPointer", isDomainPointer));
+ }
+
+
+ public static DataSet GetDomainsByZoneId(int actorId, int zoneId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetDomainsByZoneID",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@ZoneID", zoneId));
+ }
+
+ public static DataSet GetDomainsByDomainItemId(int actorId, int domainId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetDomainsByDomainItemId",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@DomainID", domainId));
+ }
+
+
+
+ public static int CheckDomain(int packageId, string domainName, bool isDomainPointer)
+ {
+ SqlParameter prmId = new SqlParameter("@Result", SqlDbType.Int);
+ prmId.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "CheckDomain",
+ prmId,
+ new SqlParameter("@packageId", packageId),
+ new SqlParameter("@domainName", domainName),
+ new SqlParameter("@isDomainPointer", isDomainPointer));
+
+ return Convert.ToInt32(prmId.Value);
+ }
+
+
+
+ public static int CheckDomainUsedByHostedOrganization(string domainName)
+ {
+ SqlParameter prmId = new SqlParameter("@Result", SqlDbType.Int);
+ prmId.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "CheckDomainUsedByHostedOrganization",
+ prmId,
+ new SqlParameter("@domainName", domainName));
+
+ return Convert.ToInt32(prmId.Value);
+ }
+
+
+ public static int AddDomain(int actorId, int packageId, int zoneItemId, string domainName,
+ bool hostingAllowed, int webSiteId, int mailDomainId, bool isSubDomain, bool isInstantAlias, bool isDomainPointer)
+ {
+ SqlParameter prmId = new SqlParameter("@DomainID", SqlDbType.Int);
+ prmId.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "AddDomain",
+ prmId,
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@PackageId", packageId),
+ new SqlParameter("@ZoneItemId", zoneItemId),
+ new SqlParameter("@DomainName", domainName),
+ new SqlParameter("@HostingAllowed", hostingAllowed),
+ new SqlParameter("@WebSiteId", webSiteId),
+ new SqlParameter("@MailDomainId", mailDomainId),
+ new SqlParameter("@IsSubDomain", isSubDomain),
+ new SqlParameter("@IsInstantAlias", isInstantAlias),
+ new SqlParameter("@IsDomainPointer", isDomainPointer));
+
+ return Convert.ToInt32(prmId.Value);
+ }
+
+ public static void UpdateDomain(int actorId, int domainId, int zoneItemId,
+ bool hostingAllowed, int webSiteId, int mailDomainId, int domainItemId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "UpdateDomain",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@DomainId", domainId),
+ new SqlParameter("@ZoneItemId", zoneItemId),
+ new SqlParameter("@HostingAllowed", hostingAllowed),
+ new SqlParameter("@WebSiteId", webSiteId),
+ new SqlParameter("@MailDomainId", mailDomainId),
+ new SqlParameter("@DomainItemId", domainItemId));
+ }
+
+ public static void DeleteDomain(int actorId, int domainId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "DeleteDomain",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@DomainId", domainId));
+ }
+ #endregion
+
+ #region Services
+ public static IDataReader GetServicesByServerId(int actorId, int serverId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetServicesByServerID",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@ServerID", serverId));
+ }
+
+ public static IDataReader GetServicesByServerIdGroupName(int actorId, int serverId, string groupName)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetServicesByServerIdGroupName",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@ServerID", serverId),
+ new SqlParameter("@GroupName", groupName));
+ }
+
+ public static DataSet GetRawServicesByServerId(int actorId, int serverId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetRawServicesByServerID",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@ServerID", serverId));
+ }
+
+ public static DataSet GetServicesByGroupId(int actorId, int groupId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetServicesByGroupID",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@groupId", groupId));
+ }
+
+ public static DataSet GetServicesByGroupName(int actorId, string groupName)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetServicesByGroupName",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@GroupName", groupName));
+ }
+
+ public static IDataReader GetService(int actorId, int serviceId)
+ {
+ return (IDataReader)SqlHelper.ExecuteReader(ConnectionString,
+ CommandType.StoredProcedure,
+ ObjectQualifier + "GetService",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@ServiceID", serviceId));
+ }
+
+ public static int AddService(int serverId, int providerId, string serviceName, int serviceQuotaValue,
+ int clusterId, string comments)
+ {
+ SqlParameter prmServiceId = new SqlParameter("@ServiceID", SqlDbType.Int);
+ prmServiceId.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "AddService",
+ prmServiceId,
+ new SqlParameter("@ServerID", serverId),
+ new SqlParameter("@ProviderID", providerId),
+ new SqlParameter("@ServiceName", serviceName),
+ new SqlParameter("@ServiceQuotaValue", serviceQuotaValue),
+ new SqlParameter("@ClusterId", clusterId),
+ new SqlParameter("@comments", comments));
+
+ return Convert.ToInt32(prmServiceId.Value);
+ }
+
+ public static void UpdateService(int serviceId, string serviceName, int serviceQuotaValue,
+ int clusterId, string comments)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "UpdateService",
+ new SqlParameter("@ServiceName", serviceName),
+ new SqlParameter("@ServiceID", serviceId),
+ new SqlParameter("@ServiceQuotaValue", serviceQuotaValue),
+ new SqlParameter("@ClusterId", clusterId),
+ new SqlParameter("@Comments", comments));
+ }
+
+ public static int DeleteService(int serviceId)
+ {
+ SqlParameter prmResult = new SqlParameter("@Result", SqlDbType.Int);
+ prmResult.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "DeleteService",
+ prmResult,
+ new SqlParameter("@ServiceID", serviceId));
+
+ return Convert.ToInt32(prmResult.Value);
+ }
+
+ public static IDataReader GetServiceProperties(int actorId, int serviceId)
+ {
+ return (IDataReader)SqlHelper.ExecuteReader(ConnectionString,
+ CommandType.StoredProcedure,
+ ObjectQualifier + "GetServiceProperties",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@ServiceID", serviceId));
+ }
+
+ public static void UpdateServiceProperties(int serviceId, string xml)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "UpdateServiceProperties",
+ new SqlParameter("@ServiceId", serviceId),
+ new SqlParameter("@Xml", xml));
+ }
+
+ public static IDataReader GetResourceGroup(int groupId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString,
+ CommandType.StoredProcedure,
+ ObjectQualifier + "GetResourceGroup",
+ new SqlParameter("@groupId", groupId));
+ }
+
+ public static DataSet GetResourceGroups()
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString,
+ CommandType.StoredProcedure,
+ ObjectQualifier + "GetResourceGroups");
+ }
+ #endregion
+
+ #region Service Items
+ public static DataSet GetServiceItems(int actorId, int packageId, string groupName, string itemTypeName, bool recursive)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetServiceItems",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@PackageID", packageId),
+ new SqlParameter("@GroupName", groupName),
+ new SqlParameter("@ItemTypeName", itemTypeName),
+ new SqlParameter("@Recursive", recursive));
+
+ }
+
+ public static DataSet GetServiceItemsPaged(int actorId, int packageId, string groupName, string itemTypeName,
+ int serverId, bool recursive, string filterColumn, string filterValue,
+ string sortColumn, int startRow, int maximumRows)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetServiceItemsPaged",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@packageId", packageId),
+ new SqlParameter("@groupName", groupName),
+ new SqlParameter("@serverId", serverId),
+ new SqlParameter("@itemTypeName", itemTypeName),
+ new SqlParameter("@recursive", recursive),
+ new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)),
+ new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)),
+ new SqlParameter("@SortColumn", VerifyColumnName(sortColumn)),
+ new SqlParameter("@startRow", startRow),
+ new SqlParameter("@maximumRows", maximumRows));
+ }
+
+ public static DataSet GetSearchableServiceItemTypes()
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetSearchableServiceItemTypes");
+ }
+
+ public static DataSet GetServiceItemsByService(int actorId, int serviceId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetServiceItemsByService",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@ServiceID", serviceId));
+ }
+
+ public static int GetServiceItemsCount(string typeName, string groupName, int serviceId)
+ {
+ SqlParameter prmTotalNumber = new SqlParameter("@TotalNumber", SqlDbType.Int);
+ prmTotalNumber.Direction = ParameterDirection.Output;
+
+ DataSet ds = SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetServiceItemsCount",
+ prmTotalNumber,
+ new SqlParameter("@itemTypeName", typeName),
+ new SqlParameter("@groupName", groupName),
+ new SqlParameter("@serviceId", serviceId));
+
+ // read identity
+ return Convert.ToInt32(prmTotalNumber.Value);
+ }
+
+ public static DataSet GetServiceItemsForStatistics(int actorId, int serviceId, int packageId,
+ bool calculateDiskspace, bool calculateBandwidth, bool suspendable, bool disposable)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetServiceItemsForStatistics",
+ new SqlParameter("@ActorID", actorId),
+ new SqlParameter("@ServiceID", serviceId),
+ new SqlParameter("@packageId", packageId),
+ new SqlParameter("@calculateDiskspace", calculateDiskspace),
+ new SqlParameter("@calculateBandwidth", calculateBandwidth),
+ new SqlParameter("@suspendable", suspendable),
+ new SqlParameter("@disposable", disposable));
+ }
+
+ public static DataSet GetServiceItemsByPackage(int actorId, int packageId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetServiceItemsByPackage",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@PackageID", packageId));
+ }
+
+ public static DataSet GetServiceItem(int actorId, int itemId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetServiceItem",
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@actorId", actorId));
+ }
+
+ public static bool CheckServiceItemExists(int serviceId, string itemName, string itemTypeName)
+ {
+ SqlParameter prmExists = new SqlParameter("@Exists", SqlDbType.Bit);
+ prmExists.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "CheckServiceItemExistsInService",
+ prmExists,
+ new SqlParameter("@serviceId", serviceId),
+ new SqlParameter("@itemName", itemName),
+ new SqlParameter("@itemTypeName", itemTypeName));
+
+ return Convert.ToBoolean(prmExists.Value);
+ }
+
+ public static bool CheckServiceItemExists(string itemName, string groupName, string itemTypeName)
+ {
+ SqlParameter prmExists = new SqlParameter("@Exists", SqlDbType.Bit);
+ prmExists.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "CheckServiceItemExists",
+ prmExists,
+ new SqlParameter("@itemName", itemName),
+ new SqlParameter("@groupName", groupName),
+ new SqlParameter("@itemTypeName", itemTypeName));
+
+ return Convert.ToBoolean(prmExists.Value);
+ }
+
+ public static DataSet GetServiceItemByName(int actorId, int packageId, string groupName,
+ string itemName, string itemTypeName)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetServiceItemByName",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@packageId", packageId),
+ new SqlParameter("@itemName", itemName),
+ new SqlParameter("@itemTypeName", itemTypeName),
+ new SqlParameter("@groupName", groupName));
+ }
+
+ public static DataSet GetServiceItemsByName(int actorId, int packageId, string itemName)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetServiceItemsByName",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@packageId", packageId),
+ new SqlParameter("@itemName", itemName));
+ }
+
+ public static int AddServiceItem(int actorId, int serviceId, int packageId, string itemName,
+ string itemTypeName, string xmlProperties)
+ {
+ // add item
+ SqlParameter prmItemId = new SqlParameter("@ItemID", SqlDbType.Int);
+ prmItemId.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "AddServiceItem",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@PackageID", packageId),
+ new SqlParameter("@ServiceID", serviceId),
+ new SqlParameter("@ItemName", itemName),
+ new SqlParameter("@ItemTypeName", itemTypeName),
+ new SqlParameter("@xmlProperties", xmlProperties),
+ new SqlParameter("@CreatedDate", DateTime.Now),
+ prmItemId);
+
+ return Convert.ToInt32(prmItemId.Value);
+ }
+
+ public static void UpdateServiceItem(int actorId, int itemId, string itemName, string xmlProperties)
+ {
+ // update item
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "UpdateServiceItem",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@ItemName", itemName),
+ new SqlParameter("@ItemId", itemId),
+ new SqlParameter("@XmlProperties", xmlProperties));
+ }
+
+ public static void DeleteServiceItem(int actorId, int itemId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "DeleteServiceItem",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@ItemID", itemId));
+ }
+
+ public static void MoveServiceItem(int actorId, int itemId, int destinationServiceId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "MoveServiceItem",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@DestinationServiceID", destinationServiceId));
+ }
+
+ public static int GetPackageServiceId(int actorId, int packageId, string groupName)
+ {
+ SqlParameter prmServiceId = new SqlParameter("@ServiceID", SqlDbType.Int);
+ prmServiceId.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetPackageServiceID",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@PackageID", packageId),
+ new SqlParameter("@groupName", groupName),
+ prmServiceId);
+
+ return Convert.ToInt32(prmServiceId.Value);
+ }
+
+ public static void UpdatePackageDiskSpace(int packageId, string xml)
+ {
+ ExecuteLongNonQuery(
+ ObjectQualifier + "UpdatePackageDiskSpace",
+ new SqlParameter("@packageId", packageId),
+ new SqlParameter("@xml", xml));
+ }
+
+ public static void UpdatePackageBandwidth(int packageId, string xml)
+ {
+ ExecuteLongNonQuery(
+ ObjectQualifier + "UpdatePackageBandwidth",
+ new SqlParameter("@packageId", packageId),
+ new SqlParameter("@xml", xml));
+ }
+
+ public static DateTime GetPackageBandwidthUpdate(int packageId)
+ {
+ SqlParameter prmUpdateDate = new SqlParameter("@UpdateDate", SqlDbType.DateTime);
+ prmUpdateDate.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetPackageBandwidthUpdate",
+ prmUpdateDate,
+ new SqlParameter("@packageId", packageId));
+
+ return (prmUpdateDate.Value != DBNull.Value) ? Convert.ToDateTime(prmUpdateDate.Value) : DateTime.MinValue;
+ }
+
+ public static void UpdatePackageBandwidthUpdate(int packageId, DateTime updateDate)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "UpdatePackageBandwidthUpdate",
+ new SqlParameter("@packageId", packageId),
+ new SqlParameter("@updateDate", updateDate));
+ }
+
+ public static IDataReader GetServiceItemType(int itemTypeId)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetServiceItemType",
+ new SqlParameter("@ItemTypeID", itemTypeId)
+ );
+ }
+
+ public static IDataReader GetServiceItemTypes()
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetServiceItemTypes"
+ );
+ }
+ #endregion
+
+ #region Plans
+ // Plans methods
+ public static DataSet GetHostingPlans(int actorId, int userId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetHostingPlans",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@userId", userId));
+ }
+
+ public static DataSet GetHostingAddons(int actorId, int userId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetHostingAddons",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@userId", userId));
+ }
+
+ public static DataSet GetUserAvailableHostingPlans(int actorId, int userId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetUserAvailableHostingPlans",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@userId", userId));
+ }
+
+ public static DataSet GetUserAvailableHostingAddons(int actorId, int userId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetUserAvailableHostingAddons",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@userId", userId));
+ }
+
+ public static IDataReader GetHostingPlan(int actorId, int planId)
+ {
+ return (IDataReader)SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetHostingPlan",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@PlanId", planId));
+ }
+
+ public static DataSet GetHostingPlanQuotas(int actorId, int packageId, int planId, int serverId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetHostingPlanQuotas",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@packageId", packageId),
+ new SqlParameter("@planId", planId),
+ new SqlParameter("@serverId", serverId));
+ }
+
+ public static int AddHostingPlan(int actorId, int userId, int packageId, string planName,
+ string planDescription, bool available, int serverId, decimal setupPrice, decimal recurringPrice,
+ int recurrenceUnit, int recurrenceLength, bool isAddon, string quotasXml)
+ {
+ SqlParameter prmPlanId = new SqlParameter("@PlanID", SqlDbType.Int);
+ prmPlanId.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "AddHostingPlan",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@userId", userId),
+ new SqlParameter("@packageId", packageId),
+ new SqlParameter("@planName", planName),
+ new SqlParameter("@planDescription", planDescription),
+ new SqlParameter("@available", available),
+ new SqlParameter("@serverId", serverId),
+ new SqlParameter("@setupPrice", setupPrice),
+ new SqlParameter("@recurringPrice", recurringPrice),
+ new SqlParameter("@recurrenceUnit", recurrenceUnit),
+ new SqlParameter("@recurrenceLength", recurrenceLength),
+ new SqlParameter("@isAddon", isAddon),
+ new SqlParameter("@quotasXml", quotasXml),
+ prmPlanId);
+
+ // read identity
+ return Convert.ToInt32(prmPlanId.Value);
+ }
+
+ public static DataSet UpdateHostingPlan(int actorId, int planId, int packageId, int serverId, string planName,
+ string planDescription, bool available, decimal setupPrice, decimal recurringPrice,
+ int recurrenceUnit, int recurrenceLength, string quotasXml)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "UpdateHostingPlan",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@planId", planId),
+ new SqlParameter("@packageId", packageId),
+ new SqlParameter("@serverId", serverId),
+ new SqlParameter("@planName", planName),
+ new SqlParameter("@planDescription", planDescription),
+ new SqlParameter("@available", available),
+ new SqlParameter("@setupPrice", setupPrice),
+ new SqlParameter("@recurringPrice", recurringPrice),
+ new SqlParameter("@recurrenceUnit", recurrenceUnit),
+ new SqlParameter("@recurrenceLength", recurrenceLength),
+ new SqlParameter("@quotasXml", quotasXml));
+ }
+
+ public static int CopyHostingPlan(int planId, int userId, int packageId)
+ {
+ SqlParameter prmPlanId = new SqlParameter("@DestinationPlanID", SqlDbType.Int);
+ prmPlanId.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "CopyHostingPlan",
+ new SqlParameter("@SourcePlanID", planId),
+ new SqlParameter("@UserID", userId),
+ new SqlParameter("@PackageID", packageId),
+ prmPlanId);
+
+ return Convert.ToInt32(prmPlanId.Value);
+ }
+
+ public static int DeleteHostingPlan(int actorId, int planId)
+ {
+ SqlParameter prmResult = new SqlParameter("@Result", SqlDbType.Int);
+ prmResult.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "DeleteHostingPlan",
+ prmResult,
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@PlanId", planId));
+
+ return Convert.ToInt32(prmResult.Value);
+ }
+ #endregion
+
+ #region Packages
+
+ // Packages
+ public static DataSet GetMyPackages(int actorId, int userId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetMyPackages",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@UserID", userId));
+ }
+
+ public static DataSet GetPackages(int actorId, int userId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetPackages",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@UserID", userId));
+ }
+
+ public static DataSet GetNestedPackagesSummary(int actorId, int packageId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetNestedPackagesSummary",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@PackageID", packageId));
+ }
+
+ public static DataSet SearchServiceItemsPaged(int actorId, int userId, int itemTypeId, string filterValue,
+ string sortColumn, int startRow, int maximumRows)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "SearchServiceItemsPaged",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@UserID", userId),
+ new SqlParameter("@itemTypeId", itemTypeId),
+ new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)),
+ new SqlParameter("@SortColumn", VerifyColumnName(sortColumn)),
+ new SqlParameter("@startRow", startRow),
+ new SqlParameter("@maximumRows", maximumRows));
+ }
+
+ public static DataSet GetPackagesPaged(int actorId, int userId, string filterColumn, string filterValue,
+ string sortColumn, int startRow, int maximumRows)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetPackagesPaged",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@UserID", userId),
+ new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)),
+ new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)),
+ new SqlParameter("@SortColumn", VerifyColumnName(sortColumn)),
+ new SqlParameter("@startRow", startRow),
+ new SqlParameter("@maximumRows", maximumRows));
+ }
+
+ public static DataSet GetNestedPackagesPaged(int actorId, int packageId, string filterColumn, string filterValue,
+ int statusId, int planId, int serverId, string sortColumn, int startRow, int maximumRows)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetNestedPackagesPaged",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@packageId", packageId),
+ new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)),
+ new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)),
+ new SqlParameter("@statusId", statusId),
+ new SqlParameter("@planId", planId),
+ new SqlParameter("@serverId", serverId),
+ new SqlParameter("@SortColumn", VerifyColumnName(sortColumn)),
+ new SqlParameter("@startRow", startRow),
+ new SqlParameter("@maximumRows", maximumRows));
+ }
+
+ public static DataSet GetPackagePackages(int actorId, int packageId, bool recursive)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetPackagePackages",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@packageId", packageId),
+ new SqlParameter("@recursive", recursive));
+ }
+
+ public static IDataReader GetPackage(int actorId, int packageId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetPackage",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@PackageID", packageId));
+ }
+
+ public static DataSet GetPackageQuotas(int actorId, int packageId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetPackageQuotas",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@PackageID", packageId));
+ }
+
+ public static DataSet GetPackageQuotasForEdit(int actorId, int packageId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetPackageQuotasForEdit",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@PackageID", packageId));
+ }
+
+ public static DataSet AddPackage(int actorId, out int packageId, int userId, int planId, string packageName,
+ string packageComments, int statusId, DateTime purchaseDate)
+ {
+ SqlParameter prmPackageId = new SqlParameter("@PackageID", SqlDbType.Int);
+ prmPackageId.Direction = ParameterDirection.Output;
+
+ DataSet ds = SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "AddPackage",
+ prmPackageId,
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@userId", userId),
+ new SqlParameter("@packageName", packageName),
+ new SqlParameter("@packageComments", packageComments),
+ new SqlParameter("@statusId", statusId),
+ new SqlParameter("@planId", planId),
+ new SqlParameter("@purchaseDate", purchaseDate));
+
+ // read identity
+ packageId = Convert.ToInt32(prmPackageId.Value);
+
+ return ds;
+ }
+
+ public static DataSet UpdatePackage(int actorId, int packageId, int planId, string packageName,
+ string packageComments, int statusId, DateTime purchaseDate,
+ bool overrideQuotas, string quotasXml)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "UpdatePackage",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@packageId", packageId),
+ new SqlParameter("@packageName", packageName),
+ new SqlParameter("@packageComments", packageComments),
+ new SqlParameter("@statusId", statusId),
+ new SqlParameter("@planId", planId),
+ new SqlParameter("@purchaseDate", purchaseDate),
+ new SqlParameter("@overrideQuotas", overrideQuotas),
+ new SqlParameter("@quotasXml", quotasXml));
+ }
+
+ public static void UpdatePackageName(int actorId, int packageId, string packageName,
+ string packageComments)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "UpdatePackageName",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@packageId", packageId),
+ new SqlParameter("@packageName", packageName),
+ new SqlParameter("@packageComments", packageComments));
+ }
+
+ public static void DeletePackage(int actorId, int packageId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "DeletePackage",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@PackageID", packageId));
+ }
+
+ // Package Add-ons
+ public static DataSet GetPackageAddons(int actorId, int packageId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetPackageAddons",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@PackageID", packageId));
+ }
+
+ public static IDataReader GetPackageAddon(int actorId, int packageAddonId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetPackageAddon",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@PackageAddonID", packageAddonId));
+ }
+
+ public static DataSet AddPackageAddon(int actorId, out int addonId, int packageId, int planId, int quantity,
+ int statusId, DateTime purchaseDate, string comments)
+ {
+ SqlParameter prmPackageAddonId = new SqlParameter("@PackageAddonID", SqlDbType.Int);
+ prmPackageAddonId.Direction = ParameterDirection.Output;
+
+ DataSet ds = SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "AddPackageAddon",
+ prmPackageAddonId,
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@PackageID", packageId),
+ new SqlParameter("@planId", planId),
+ new SqlParameter("@Quantity", quantity),
+ new SqlParameter("@statusId", statusId),
+ new SqlParameter("@PurchaseDate", purchaseDate),
+ new SqlParameter("@Comments", comments));
+
+ // read identity
+ addonId = Convert.ToInt32(prmPackageAddonId.Value);
+
+ return ds;
+ }
+
+ public static DataSet UpdatePackageAddon(int actorId, int packageAddonId, int planId, int quantity,
+ int statusId, DateTime purchaseDate, string comments)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "UpdatePackageAddon",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@PackageAddonID", packageAddonId),
+ new SqlParameter("@planId", planId),
+ new SqlParameter("@Quantity", quantity),
+ new SqlParameter("@statusId", statusId),
+ new SqlParameter("@PurchaseDate", purchaseDate),
+ new SqlParameter("@Comments", comments));
+ }
+
+ public static void DeletePackageAddon(int actorId, int packageAddonId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "DeletePackageAddon",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@PackageAddonID", packageAddonId));
+ }
+
+ #endregion
+
+ #region Packages Settings
+ public static IDataReader GetPackageSettings(int actorId, int packageId, string settingsName)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetPackageSettings",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@PackageId", packageId),
+ new SqlParameter("@SettingsName", settingsName));
+ }
+ public static void UpdatePackageSettings(int actorId, int packageId, string settingsName, string xml)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "UpdatePackageSettings",
+ new SqlParameter("@PackageId", packageId),
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@SettingsName", settingsName),
+ new SqlParameter("@Xml", xml));
+ }
+ #endregion
+
+ #region Quotas
+ public static IDataReader GetProviderServiceQuota(int providerId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetProviderServiceQuota",
+ new SqlParameter("@providerId", providerId));
+ }
+
+ public static IDataReader GetPackageQuota(int actorId, int packageId, string quotaName)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetPackageQuota",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@PackageID", packageId),
+ new SqlParameter("@QuotaName", quotaName));
+ }
+ #endregion
+
+ #region Log
+ public static void AddAuditLogRecord(string recordId, int severityId,
+ int userId, string username, int packageId, int itemId, string itemName, DateTime startDate, DateTime finishDate, string sourceName,
+ string taskName, string executionLog)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "AddAuditLogRecord",
+ new SqlParameter("@recordId", recordId),
+ new SqlParameter("@severityId", severityId),
+ new SqlParameter("@UserID", userId),
+ new SqlParameter("@username", username),
+ new SqlParameter("@PackageID", packageId),
+ new SqlParameter("@ItemId", itemId),
+ new SqlParameter("@itemName", itemName),
+ new SqlParameter("@startDate", startDate),
+ new SqlParameter("@finishDate", finishDate),
+ new SqlParameter("@sourceName", sourceName),
+ new SqlParameter("@taskName", taskName),
+ new SqlParameter("@executionLog", executionLog));
+ }
+
+ public static DataSet GetAuditLogRecordsPaged(int actorId, int userId, int packageId, int itemId, string itemName, DateTime startDate, DateTime endDate,
+ int severityId, string sourceName, string taskName, string sortColumn, int startRow, int maximumRows)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetAuditLogRecordsPaged",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@UserID", userId),
+ new SqlParameter("@PackageID", packageId),
+ new SqlParameter("@itemId", itemId),
+ new SqlParameter("@itemName", itemName),
+ new SqlParameter("@StartDate", startDate),
+ new SqlParameter("@EndDate", endDate),
+ new SqlParameter("@severityId", severityId),
+ new SqlParameter("@sourceName", sourceName),
+ new SqlParameter("@taskName", taskName),
+ new SqlParameter("@sortColumn", VerifyColumnName(sortColumn)),
+ new SqlParameter("@startRow", startRow),
+ new SqlParameter("@maximumRows", maximumRows));
+ }
+
+ public static DataSet GetAuditLogSources()
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetAuditLogSources");
+ }
+
+ public static DataSet GetAuditLogTasks(string sourceName)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetAuditLogTasks",
+ new SqlParameter("@sourceName", sourceName));
+ }
+
+ public static IDataReader GetAuditLogRecord(string recordId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetAuditLogRecord",
+ new SqlParameter("@recordId", recordId));
+ }
+
+ public static void DeleteAuditLogRecords(int actorId, int userId, int itemId, string itemName, DateTime startDate, DateTime endDate,
+ int severityId, string sourceName, string taskName)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "DeleteAuditLogRecords",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@userId", userId),
+ new SqlParameter("@itemId", itemId),
+ new SqlParameter("@itemName", itemName),
+ new SqlParameter("@startDate", startDate),
+ new SqlParameter("@endDate", endDate),
+ new SqlParameter("@severityId", severityId),
+ new SqlParameter("@sourceName", sourceName),
+ new SqlParameter("@taskName", taskName));
+ }
+
+ public static void DeleteAuditLogRecordsComplete()
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "DeleteAuditLogRecordsComplete");
+ }
+
+ #endregion
+
+ #region Reports
+ public static DataSet GetPackagesBandwidthPaged(int actorId, int userId, int packageId,
+ DateTime startDate, DateTime endDate, string sortColumn,
+ int startRow, int maximumRows)
+ {
+ return ExecuteLongDataSet(
+ ObjectQualifier + "GetPackagesBandwidthPaged",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@userId", userId),
+ new SqlParameter("@packageId", packageId),
+ new SqlParameter("@StartDate", startDate),
+ new SqlParameter("@EndDate", endDate),
+ new SqlParameter("@sortColumn", VerifyColumnName(sortColumn)),
+ new SqlParameter("@startRow", startRow),
+ new SqlParameter("@maximumRows", maximumRows));
+ }
+
+ public static DataSet GetPackagesDiskspacePaged(int actorId, int userId, int packageId, string sortColumn,
+ int startRow, int maximumRows)
+ {
+ return ExecuteLongDataSet(
+ ObjectQualifier + "GetPackagesDiskspacePaged",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@userId", userId),
+ new SqlParameter("@packageId", packageId),
+ new SqlParameter("@sortColumn", VerifyColumnName(sortColumn)),
+ new SqlParameter("@startRow", startRow),
+ new SqlParameter("@maximumRows", maximumRows));
+ }
+
+ public static DataSet GetPackageBandwidth(int actorId, int packageId, DateTime startDate, DateTime endDate)
+ {
+ return ExecuteLongDataSet(
+ ObjectQualifier + "GetPackageBandwidth",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@PackageId", packageId),
+ new SqlParameter("@StartDate", startDate),
+ new SqlParameter("@EndDate", endDate));
+ }
+
+ public static DataSet GetPackageDiskspace(int actorId, int packageId)
+ {
+ return ExecuteLongDataSet(
+ ObjectQualifier + "GetPackageDiskspace",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@PackageId", packageId));
+ }
+
+ #endregion
+
+ #region Scheduler
+
+ public static IDataReader GetBackgroundTask(string taskId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetBackgroundTask",
+ new SqlParameter("@taskId", taskId));
+ }
+
+ public static IDataReader GetScheduleBackgroundTasks(int scheduleId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetScheduleBackgroundTasks",
+ new SqlParameter("@scheduleId", scheduleId));
+ }
+
+ public static IDataReader GetBackgroundTasks(int actorId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetBackgroundTasks",
+ new SqlParameter("@actorId", actorId));
+ }
+
+ public static IDataReader GetBackgroundTasks(Guid guid)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetThreadBackgroundTasks",
+ new SqlParameter("@guid", guid));
+ }
+
+ public static IDataReader GetProcessBackgroundTasks(BackgroundTaskStatus status)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetProcessBackgroundTasks",
+ new SqlParameter("@status", (int)status));
+ }
+
+ public static IDataReader GetBackgroundTopTask(Guid guid)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetBackgroundTopTask",
+ new SqlParameter("@guid", guid));
+ }
+
+ public static int AddBackgroundTask(Guid guid, string taskId, int scheduleId, int packageId, int userId,
+ int effectiveUserId, string taskName, int itemId, string itemName, DateTime startDate,
+ int indicatorCurrent, int indicatorMaximum, int maximumExecutionTime, string source,
+ int severity, bool completed, bool notifyOnComplete, BackgroundTaskStatus status)
+ {
+ SqlParameter prmId = new SqlParameter("@BackgroundTaskID", SqlDbType.Int);
+ prmId.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "AddBackgroundTask",
+ prmId,
+ new SqlParameter("@guid", guid),
+ new SqlParameter("@taskId", taskId),
+ new SqlParameter("@scheduleId", scheduleId),
+ new SqlParameter("@packageId", packageId),
+ new SqlParameter("@userId", userId),
+ new SqlParameter("@effectiveUserId", effectiveUserId),
+ new SqlParameter("@taskName", taskName),
+ new SqlParameter("@itemId", itemId),
+ new SqlParameter("@itemName", itemName),
+ new SqlParameter("@startDate", startDate),
+ new SqlParameter("@indicatorCurrent", indicatorCurrent),
+ new SqlParameter("@indicatorMaximum", indicatorMaximum),
+ new SqlParameter("@maximumExecutionTime", maximumExecutionTime),
+ new SqlParameter("@source", source),
+ new SqlParameter("@severity", severity),
+ new SqlParameter("@completed", completed),
+ new SqlParameter("@notifyOnComplete", notifyOnComplete),
+ new SqlParameter("@status", status));
+
+ // read identity
+ return Convert.ToInt32(prmId.Value);
+ }
+
+ public static void AddBackgroundTaskLog(int taskId, DateTime date, string exceptionStackTrace,
+ bool innerTaskStart, int severity, string text, int textIdent, string xmlParameters)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "AddBackgroundTaskLog",
+ new SqlParameter("@taskId", taskId),
+ new SqlParameter("@date", date),
+ new SqlParameter("@exceptionStackTrace", exceptionStackTrace),
+ new SqlParameter("@innerTaskStart", innerTaskStart),
+ new SqlParameter("@severity", severity),
+ new SqlParameter("@text", text),
+ new SqlParameter("@textIdent", textIdent),
+ new SqlParameter("@xmlParameters", xmlParameters));
+ }
+
+ public static IDataReader GetBackgroundTaskLogs(int taskId, DateTime startLogTime)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetBackgroundTaskLogs",
+ new SqlParameter("@taskId", taskId),
+ new SqlParameter("@startLogTime", startLogTime));
+ }
+
+ public static void UpdateBackgroundTask(Guid guid, int taskId, int scheduleId, int packageId, string taskName, int itemId,
+ string itemName, DateTime finishDate, int indicatorCurrent, int indicatorMaximum, int maximumExecutionTime,
+ string source, int severity, bool completed, bool notifyOnComplete, BackgroundTaskStatus status)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "UpdateBackgroundTask",
+ new SqlParameter("@Guid", guid),
+ new SqlParameter("@taskId", taskId),
+ new SqlParameter("@scheduleId", scheduleId),
+ new SqlParameter("@packageId", packageId),
+ new SqlParameter("@taskName", taskName),
+ new SqlParameter("@itemId", itemId),
+ new SqlParameter("@itemName", itemName),
+ new SqlParameter("@finishDate",
+ finishDate == DateTime.MinValue
+ ? DBNull.Value
+ : (object) finishDate),
+ new SqlParameter("@indicatorCurrent", indicatorCurrent),
+ new SqlParameter("@indicatorMaximum", indicatorMaximum),
+ new SqlParameter("@maximumExecutionTime", maximumExecutionTime),
+ new SqlParameter("@source", source),
+ new SqlParameter("@severity", severity),
+ new SqlParameter("@completed", completed),
+ new SqlParameter("@notifyOnComplete", notifyOnComplete),
+ new SqlParameter("@status", (int)status));
+
+ }
+
+ public static IDataReader GetBackgroundTaskParams(int taskId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetBackgroundTaskParams",
+ new SqlParameter("@taskId", taskId));
+ }
+
+ public static void AddBackgroundTaskParam(int taskId, string name, string value, string typeName)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "AddBackgroundTaskParam",
+ new SqlParameter("@taskId", taskId),
+ new SqlParameter("@name", name),
+ new SqlParameter("@value", value),
+ new SqlParameter("@typeName", typeName));
+ }
+
+ public static void DeleteBackgroundTaskParams(int taskId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "DeleteBackgroundTaskParams",
+ new SqlParameter("@taskId", taskId));
+ }
+
+ public static void AddBackgroundTaskStack(int taskId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "AddBackgroundTaskStack",
+ new SqlParameter("@taskId", taskId));
+ }
+
+ public static void DeleteBackgroundTasks(Guid guid)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "DeleteBackgroundTasks",
+ new SqlParameter("@guid", guid));
+ }
+
+ public static void DeleteBackgroundTask(int taskId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "DeleteBackgroundTask",
+ new SqlParameter("@id", taskId));
+ }
+
+ public static IDataReader GetScheduleTasks(int actorId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetScheduleTasks",
+ new SqlParameter("@actorId", actorId));
+ }
+
+ public static IDataReader GetScheduleTask(int actorId, string taskId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetScheduleTask",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@taskId", taskId));
+ }
+
+ public static DataSet GetSchedules(int actorId, int packageId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetSchedules",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@packageId", packageId));
+ }
+
+ public static DataSet GetSchedulesPaged(int actorId, int packageId, bool recursive,
+ string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetSchedulesPaged",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@packageId", packageId),
+ new SqlParameter("@recursive", recursive),
+ new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)),
+ new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)),
+ new SqlParameter("@SortColumn", VerifyColumnName(sortColumn)),
+ new SqlParameter("@startRow", startRow),
+ new SqlParameter("@maximumRows", maximumRows));
+ }
+
+ public static DataSet GetSchedule(int actorId, int scheduleId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetSchedule",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@scheduleId", scheduleId));
+ }
+ public static IDataReader GetScheduleInternal(int scheduleId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetScheduleInternal",
+ new SqlParameter("@scheduleId", scheduleId));
+ }
+ public static DataSet GetNextSchedule()
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetNextSchedule");
+ }
+ public static IDataReader GetScheduleParameters(int actorId, string taskId, int scheduleId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetScheduleParameters",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@taskId", taskId),
+ new SqlParameter("@scheduleId", scheduleId));
+ }
+
+ ///
+ /// Loads view configuration for the task with specified id.
+ ///
+ /// Task id which points to task for which view configuration will be loaded.
+ /// View configuration for the task with supplied id.
+ public static IDataReader GetScheduleTaskViewConfigurations(string taskId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetScheduleTaskViewConfigurations",
+ new SqlParameter("@taskId", taskId));
+ }
+
+ public static int AddSchedule(int actorId, string taskId, int packageId,
+ string scheduleName, string scheduleTypeId, int interval,
+ DateTime fromTime, DateTime toTime, DateTime startTime,
+ DateTime nextRun, bool enabled, string priorityId, int historiesNumber,
+ int maxExecutionTime, int weekMonthDay, string xmlParameters)
+ {
+ SqlParameter prmId = new SqlParameter("@ScheduleID", SqlDbType.Int);
+ prmId.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "AddSchedule",
+ prmId,
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@taskId", taskId),
+ new SqlParameter("@packageId", packageId),
+ new SqlParameter("@scheduleName", scheduleName),
+ new SqlParameter("@scheduleTypeId", scheduleTypeId),
+ new SqlParameter("@interval", interval),
+ new SqlParameter("@fromTime", fromTime),
+ new SqlParameter("@toTime", toTime),
+ new SqlParameter("@startTime", startTime),
+ new SqlParameter("@nextRun", nextRun),
+ new SqlParameter("@enabled", enabled),
+ new SqlParameter("@priorityId", priorityId),
+ new SqlParameter("@historiesNumber", historiesNumber),
+ new SqlParameter("@maxExecutionTime", maxExecutionTime),
+ new SqlParameter("@weekMonthDay", weekMonthDay),
+ new SqlParameter("@xmlParameters", xmlParameters));
+
+ // read identity
+ return Convert.ToInt32(prmId.Value);
+ }
+
+ public static void UpdateSchedule(int actorId, int scheduleId, string taskId,
+ string scheduleName, string scheduleTypeId, int interval,
+ DateTime fromTime, DateTime toTime, DateTime startTime,
+ DateTime lastRun, DateTime nextRun, bool enabled, string priorityId,
+ int historiesNumber, int maxExecutionTime, int weekMonthDay, string xmlParameters)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "UpdateSchedule",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@scheduleId", scheduleId),
+ new SqlParameter("@taskId", taskId),
+ new SqlParameter("@scheduleName", scheduleName),
+ new SqlParameter("@scheduleTypeId", scheduleTypeId),
+ new SqlParameter("@interval", interval),
+ new SqlParameter("@fromTime", fromTime),
+ new SqlParameter("@toTime", toTime),
+ new SqlParameter("@startTime", startTime),
+ new SqlParameter("@lastRun", (lastRun == DateTime.MinValue) ? DBNull.Value : (object)lastRun),
+ new SqlParameter("@nextRun", nextRun),
+ new SqlParameter("@enabled", enabled),
+ new SqlParameter("@priorityId", priorityId),
+ new SqlParameter("@historiesNumber", historiesNumber),
+ new SqlParameter("@maxExecutionTime", maxExecutionTime),
+ new SqlParameter("@weekMonthDay", weekMonthDay),
+ new SqlParameter("@xmlParameters", xmlParameters));
+ }
+
+ public static void DeleteSchedule(int actorId, int scheduleId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "DeleteSchedule",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@scheduleId", scheduleId));
+ }
+
+ public static DataSet GetScheduleHistories(int actorId, int scheduleId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetScheduleHistories",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@scheduleId", scheduleId));
+ }
+ public static IDataReader GetScheduleHistory(int actorId, int scheduleHistoryId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetScheduleHistory",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@scheduleHistoryId", scheduleHistoryId));
+ }
+ public static int AddScheduleHistory(int actorId, int scheduleId,
+ DateTime startTime, DateTime finishTime, string statusId, string executionLog)
+ {
+ SqlParameter prmId = new SqlParameter("@ScheduleHistoryID", SqlDbType.Int);
+ prmId.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "AddScheduleHistory",
+ prmId,
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@scheduleId", scheduleId),
+ new SqlParameter("@startTime", (startTime == DateTime.MinValue) ? DBNull.Value : (object)startTime),
+ new SqlParameter("@finishTime", (finishTime == DateTime.MinValue) ? DBNull.Value : (object)finishTime),
+ new SqlParameter("@statusId", statusId),
+ new SqlParameter("@executionLog", executionLog));
+
+ // read identity
+ return Convert.ToInt32(prmId.Value);
+ }
+ public static void UpdateScheduleHistory(int actorId, int scheduleHistoryId,
+ DateTime startTime, DateTime finishTime, string statusId, string executionLog)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "UpdateScheduleHistory",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@scheduleHistoryId", scheduleHistoryId),
+ new SqlParameter("@startTime", (startTime == DateTime.MinValue) ? DBNull.Value : (object)startTime),
+ new SqlParameter("@finishTime", (finishTime == DateTime.MinValue) ? DBNull.Value : (object)finishTime),
+ new SqlParameter("@statusId", statusId),
+ new SqlParameter("@executionLog", executionLog));
+ }
+ public static void DeleteScheduleHistories(int actorId, int scheduleId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "DeleteScheduleHistories",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@scheduleId", scheduleId));
+ }
+ #endregion
+
+ #region Comments
+ public static DataSet GetComments(int actorId, int userId, string itemTypeId, int itemId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetComments",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@userId", userId),
+ new SqlParameter("@itemTypeId", itemTypeId),
+ new SqlParameter("@itemId", itemId));
+ }
+
+ public static void AddComment(int actorId, string itemTypeId, int itemId,
+ string commentText, int severityId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "AddComment",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@itemTypeId", itemTypeId),
+ new SqlParameter("@itemId", itemId),
+ new SqlParameter("@commentText", commentText),
+ new SqlParameter("@severityId", severityId));
+ }
+
+ public static void DeleteComment(int actorId, int commentId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "DeleteComment",
+ new SqlParameter("@actorId", actorId),
+ new SqlParameter("@commentId", commentId));
+ }
+ #endregion
+
+ #region Helper Methods
+ private static string VerifyColumnName(string str)
+ {
+ if (str == null)
+ str = "";
+ return Regex.Replace(str, @"[^\w\. ]", "");
+ }
+
+ private static string VerifyColumnValue(string str)
+ {
+ return String.IsNullOrEmpty(str) ? str : str.Replace("'", "''");
+ }
+
+ private static DataSet ExecuteLongDataSet(string spName, params SqlParameter[] parameters)
+ {
+ return ExecuteLongDataSet(spName, CommandType.StoredProcedure, parameters);
+ }
+
+ private static DataSet ExecuteLongQueryDataSet(string spName, params SqlParameter[] parameters)
+ {
+ return ExecuteLongDataSet(spName, CommandType.Text, parameters);
+ }
+
+ private static DataSet ExecuteLongDataSet(string commandText, CommandType commandType, params SqlParameter[] parameters)
+ {
+ SqlConnection conn = new SqlConnection(ConnectionString);
+ SqlCommand cmd = new SqlCommand(commandText, conn);
+ cmd.CommandType = commandType;
+ cmd.CommandTimeout = 300;
+
+ if (parameters != null)
+ {
+ foreach (SqlParameter prm in parameters)
+ {
+ cmd.Parameters.Add(prm);
+ }
+ }
+
+ DataSet ds = new DataSet();
+ try
+ {
+ SqlDataAdapter da = new SqlDataAdapter(cmd);
+ da.Fill(ds);
+ }
+ finally
+ {
+ if (conn.State == ConnectionState.Open)
+ conn.Close();
+ }
+
+ return ds;
+ }
+
+ private static void ExecuteLongNonQuery(string spName, params SqlParameter[] parameters)
+ {
+ SqlConnection conn = new SqlConnection(ConnectionString);
+ SqlCommand cmd = new SqlCommand(spName, conn);
+ cmd.CommandType = CommandType.StoredProcedure;
+ cmd.CommandTimeout = 300;
+
+ if (parameters != null)
+ {
+ foreach (SqlParameter prm in parameters)
+ {
+ cmd.Parameters.Add(prm);
+ }
+ }
+
+ try
+ {
+ conn.Open();
+ cmd.ExecuteNonQuery();
+ }
+ finally
+ {
+ if (conn.State == ConnectionState.Open)
+ conn.Close();
+ }
+ }
+ #endregion
+
+ #region Exchange Server
+
+
+ public static int AddExchangeAccount(int itemId, int accountType, string accountName,
+ string displayName, string primaryEmailAddress, bool mailEnabledPublicFolder,
+ string mailboxManagerActions, string samAccountName, string accountPassword, int mailboxPlanId, string subscriberNumber)
+ {
+ SqlParameter outParam = new SqlParameter("@AccountID", SqlDbType.Int);
+ outParam.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "AddExchangeAccount",
+ outParam,
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@AccountType", accountType),
+ new SqlParameter("@AccountName", accountName),
+ new SqlParameter("@DisplayName", displayName),
+ new SqlParameter("@PrimaryEmailAddress", primaryEmailAddress),
+ new SqlParameter("@MailEnabledPublicFolder", mailEnabledPublicFolder),
+ new SqlParameter("@MailboxManagerActions", mailboxManagerActions),
+ new SqlParameter("@SamAccountName", samAccountName),
+ new SqlParameter("@AccountPassword", accountPassword),
+ new SqlParameter("@MailboxPlanId", (mailboxPlanId == 0) ? (object)DBNull.Value : (object)mailboxPlanId),
+ new SqlParameter("@SubscriberNumber", (string.IsNullOrEmpty(subscriberNumber) ? (object)DBNull.Value : (object)subscriberNumber))
+ );
+
+ return Convert.ToInt32(outParam.Value);
+ }
+
+
+ public static void AddExchangeAccountEmailAddress(int accountId, string emailAddress)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "AddExchangeAccountEmailAddress",
+ new SqlParameter("@AccountID", accountId),
+ new SqlParameter("@EmailAddress", emailAddress)
+ );
+ }
+
+ public static void AddExchangeOrganization(int itemId, string organizationId)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "AddExchangeOrganization",
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@OrganizationID", organizationId)
+ );
+ }
+
+ public static void AddExchangeOrganizationDomain(int itemId, int domainId, bool isHost)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "AddExchangeOrganizationDomain",
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@DomainID", domainId),
+ new SqlParameter("@IsHost", isHost)
+ );
+ }
+
+ public static void ChangeExchangeAcceptedDomainType(int itemId, int domainId, int domainTypeId)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "ChangeExchangeAcceptedDomainType",
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@DomainID", domainId),
+ new SqlParameter("@DomainTypeID", domainTypeId)
+ );
+ }
+
+ public static IDataReader GetExchangeOrganizationStatistics(int itemId)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetExchangeOrganizationStatistics",
+ new SqlParameter("@ItemID", itemId)
+ );
+ }
+
+ public static void DeleteUserEmailAddresses(int accountId, string primaryAddress)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "DeleteUserEmailAddresses",
+ new SqlParameter("@AccountID", accountId),
+ new SqlParameter("@PrimaryEmailAddress", primaryAddress)
+ );
+ }
+
+ public static void DeleteExchangeAccount(int itemId, int accountId)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "DeleteExchangeAccount",
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@AccountID", accountId)
+ );
+ }
+
+
+ public static void DeleteExchangeAccountEmailAddress(int accountId, string emailAddress)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "DeleteExchangeAccountEmailAddress",
+ new SqlParameter("@AccountID", accountId),
+ new SqlParameter("@EmailAddress", emailAddress)
+ );
+ }
+
+ public static void DeleteExchangeOrganization(int itemId)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "DeleteExchangeOrganization",
+ new SqlParameter("@ItemID", itemId)
+ );
+ }
+
+ public static void DeleteExchangeOrganizationDomain(int itemId, int domainId)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "DeleteExchangeOrganizationDomain",
+ new SqlParameter("@ItemId", itemId),
+ new SqlParameter("@DomainID", domainId)
+ );
+ }
+
+ public static bool ExchangeAccountEmailAddressExists(string emailAddress)
+ {
+ SqlParameter outParam = new SqlParameter("@Exists", SqlDbType.Bit);
+ outParam.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "ExchangeAccountEmailAddressExists",
+ new SqlParameter("@EmailAddress", emailAddress),
+ outParam
+ );
+
+ return Convert.ToBoolean(outParam.Value);
+ }
+
+ public static bool ExchangeOrganizationDomainExists(int domainId)
+ {
+ SqlParameter outParam = new SqlParameter("@Exists", SqlDbType.Bit);
+ outParam.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "ExchangeOrganizationDomainExists",
+ new SqlParameter("@DomainID", domainId),
+ outParam
+ );
+
+ return Convert.ToBoolean(outParam.Value);
+ }
+
+ public static bool ExchangeOrganizationExists(string organizationId)
+ {
+ SqlParameter outParam = new SqlParameter("@Exists", SqlDbType.Bit);
+ outParam.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "ExchangeOrganizationExists",
+ new SqlParameter("@OrganizationID", organizationId),
+ outParam
+ );
+
+ return Convert.ToBoolean(outParam.Value);
+ }
+
+ public static bool ExchangeAccountExists(string accountName)
+ {
+ SqlParameter outParam = new SqlParameter("@Exists", SqlDbType.Bit);
+ outParam.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "ExchangeAccountExists",
+ new SqlParameter("@AccountName", accountName),
+ outParam
+ );
+
+ return Convert.ToBoolean(outParam.Value);
+ }
+
+ public static void UpdateExchangeAccount(int accountId, string accountName, ExchangeAccountType accountType,
+ string displayName, string primaryEmailAddress, bool mailEnabledPublicFolder,
+ string mailboxManagerActions, string samAccountName, string accountPassword, int mailboxPlanId, string subscriberNumber)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "UpdateExchangeAccount",
+ new SqlParameter("@AccountID", accountId),
+ new SqlParameter("@AccountName", accountName),
+ new SqlParameter("@DisplayName", displayName),
+ new SqlParameter("@AccountType", (int)accountType),
+ new SqlParameter("@PrimaryEmailAddress", primaryEmailAddress),
+ new SqlParameter("@MailEnabledPublicFolder", mailEnabledPublicFolder),
+ new SqlParameter("@MailboxManagerActions", mailboxManagerActions),
+ new SqlParameter("@Password", string.IsNullOrEmpty(accountPassword) ? (object)DBNull.Value : (object)accountPassword),
+ new SqlParameter("@SamAccountName", samAccountName),
+ new SqlParameter("@MailboxPlanId", (mailboxPlanId == 0) ? (object)DBNull.Value : (object)mailboxPlanId),
+ new SqlParameter("@SubscriberNumber", (string.IsNullOrEmpty(subscriberNumber) ? (object)DBNull.Value : (object)subscriberNumber))
+ );
+ }
+
+ public static void UpdateExchangeAccountUserPrincipalName(int accountId, string userPrincipalName)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "UpdateExchangeAccountUserPrincipalName",
+ new SqlParameter("@AccountID", accountId),
+ new SqlParameter("@UserPrincipalName", userPrincipalName));
+ }
+
+ public static IDataReader GetExchangeAccount(int itemId, int accountId)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetExchangeAccount",
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@AccountID", accountId)
+ );
+ }
+
+ public static IDataReader GetExchangeAccountByAccountName(int itemId, string accountName)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetExchangeAccountByAccountName",
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@AccountName", accountName)
+ );
+ }
+
+ public static IDataReader GetExchangeAccountByMailboxPlanId(int itemId, int MailboxPlanId)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetExchangeAccountByMailboxPlanId",
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@MailboxPlanId", MailboxPlanId)
+ );
+ }
+
+
+ public static IDataReader GetExchangeAccountEmailAddresses(int accountId)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetExchangeAccountEmailAddresses",
+ new SqlParameter("@AccountID", accountId)
+ );
+ }
+
+ public static IDataReader GetExchangeOrganizationDomains(int itemId)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetExchangeOrganizationDomains",
+ new SqlParameter("@ItemID", itemId)
+ );
+ }
+
+
+ public static IDataReader GetExchangeAccounts(int itemId, int accountType)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetExchangeAccounts",
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@AccountType", accountType)
+ );
+ }
+
+ public static IDataReader GetExchangeMailboxes(int itemId)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetExchangeMailboxes",
+ new SqlParameter("@ItemID", itemId)
+ );
+ }
+
+ public static DataSet GetExchangeAccountsPaged(int actorId, int itemId, string accountTypes,
+ string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows)
+ {
+ // check input parameters
+ string[] types = accountTypes.Split(',');
+ for (int i = 0; i < types.Length; i++)
+ {
+ try
+ {
+ int type = Int32.Parse(types[i]);
+ }
+ catch
+ {
+ throw new ArgumentException("Wrong patameter", "accountTypes");
+ }
+ }
+
+ string searchTypes = String.Join(",", types);
+
+ return SqlHelper.ExecuteDataset(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetExchangeAccountsPaged",
+ new SqlParameter("@ActorID", actorId),
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@AccountTypes", searchTypes),
+ new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)),
+ new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)),
+ new SqlParameter("@SortColumn", VerifyColumnName(sortColumn)),
+ new SqlParameter("@StartRow", startRow),
+ new SqlParameter("@MaximumRows", maximumRows)
+ );
+ }
+
+ public static IDataReader SearchExchangeAccounts(int actorId, int itemId, bool includeMailboxes,
+ bool includeContacts, bool includeDistributionLists, bool includeRooms, bool includeEquipment,
+ string filterColumn, string filterValue, string sortColumn)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "SearchExchangeAccounts",
+ new SqlParameter("@ActorID", actorId),
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@IncludeMailboxes", includeMailboxes),
+ new SqlParameter("@IncludeContacts", includeContacts),
+ new SqlParameter("@IncludeDistributionLists", includeDistributionLists),
+ new SqlParameter("@IncludeRooms", includeRooms),
+ new SqlParameter("@IncludeEquipment", includeEquipment),
+ new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)),
+ new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)),
+ new SqlParameter("@SortColumn", VerifyColumnName(sortColumn))
+ );
+ }
+
+ public static IDataReader SearchExchangeAccount(int actorId, int accountType, string primaryEmailAddress)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "SearchExchangeAccount",
+ new SqlParameter("@ActorID", actorId),
+ new SqlParameter("@AccountType", accountType),
+ new SqlParameter("@PrimaryEmailAddress", primaryEmailAddress)
+ );
+ }
+
+ #endregion
+
+ #region Exchange Mailbox Plans
+ public static int AddExchangeMailboxPlan(int itemID, string mailboxPlan, bool enableActiveSync, bool enableIMAP, bool enableMAPI, bool enableOWA, bool enablePOP,
+ bool isDefault, int issueWarningPct, int keepDeletedItemsDays, int mailboxSizeMB, int maxReceiveMessageSizeKB, int maxRecipients,
+ int maxSendMessageSizeKB, int prohibitSendPct, int prohibitSendReceivePct, bool hideFromAddressBook, int mailboxPlanType,
+ bool enabledLitigationHold, long recoverabelItemsSpace, long recoverabelItemsWarning, string litigationHoldUrl, string litigationHoldMsg)
+ {
+ SqlParameter outParam = new SqlParameter("@MailboxPlanId", SqlDbType.Int);
+ outParam.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "AddExchangeMailboxPlan",
+ outParam,
+ new SqlParameter("@ItemID", itemID),
+ new SqlParameter("@MailboxPlan", mailboxPlan),
+ new SqlParameter("@EnableActiveSync", enableActiveSync),
+ new SqlParameter("@EnableIMAP", enableIMAP),
+ new SqlParameter("@EnableMAPI", enableMAPI),
+ new SqlParameter("@EnableOWA", enableOWA),
+ new SqlParameter("@EnablePOP", enablePOP),
+ new SqlParameter("@IsDefault", isDefault),
+ new SqlParameter("@IssueWarningPct", issueWarningPct),
+ new SqlParameter("@KeepDeletedItemsDays", keepDeletedItemsDays),
+ new SqlParameter("@MailboxSizeMB", mailboxSizeMB),
+ new SqlParameter("@MaxReceiveMessageSizeKB", maxReceiveMessageSizeKB),
+ new SqlParameter("@MaxRecipients", maxRecipients),
+ new SqlParameter("@MaxSendMessageSizeKB", maxSendMessageSizeKB),
+ new SqlParameter("@ProhibitSendPct", prohibitSendPct),
+ new SqlParameter("@ProhibitSendReceivePct", prohibitSendReceivePct),
+ new SqlParameter("@HideFromAddressBook", hideFromAddressBook),
+ new SqlParameter("@MailboxPlanType", mailboxPlanType),
+ new SqlParameter("@AllowLitigationHold", enabledLitigationHold),
+ new SqlParameter("@RecoverableItemsWarningPct", recoverabelItemsWarning),
+ new SqlParameter("@RecoverableItemsSpace", recoverabelItemsSpace),
+ new SqlParameter("@LitigationHoldUrl", litigationHoldUrl),
+ new SqlParameter("@LitigationHoldMsg", litigationHoldMsg)
+ );
+
+ return Convert.ToInt32(outParam.Value);
+ }
+
+
+
+ public static void UpdateExchangeMailboxPlan(int mailboxPlanID, string mailboxPlan, bool enableActiveSync, bool enableIMAP, bool enableMAPI, bool enableOWA, bool enablePOP,
+ bool isDefault, int issueWarningPct, int keepDeletedItemsDays, int mailboxSizeMB, int maxReceiveMessageSizeKB, int maxRecipients,
+ int maxSendMessageSizeKB, int prohibitSendPct, int prohibitSendReceivePct, bool hideFromAddressBook, int mailboxPlanType,
+ bool enabledLitigationHold, long recoverabelItemsSpace, long recoverabelItemsWarning, string litigationHoldUrl, string litigationHoldMsg)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "UpdateExchangeMailboxPlan",
+ new SqlParameter("@MailboxPlanID", mailboxPlanID),
+ new SqlParameter("@MailboxPlan", mailboxPlan),
+ new SqlParameter("@EnableActiveSync", enableActiveSync),
+ new SqlParameter("@EnableIMAP", enableIMAP),
+ new SqlParameter("@EnableMAPI", enableMAPI),
+ new SqlParameter("@EnableOWA", enableOWA),
+ new SqlParameter("@EnablePOP", enablePOP),
+ new SqlParameter("@IsDefault", isDefault),
+ new SqlParameter("@IssueWarningPct", issueWarningPct),
+ new SqlParameter("@KeepDeletedItemsDays", keepDeletedItemsDays),
+ new SqlParameter("@MailboxSizeMB", mailboxSizeMB),
+ new SqlParameter("@MaxReceiveMessageSizeKB", maxReceiveMessageSizeKB),
+ new SqlParameter("@MaxRecipients", maxRecipients),
+ new SqlParameter("@MaxSendMessageSizeKB", maxSendMessageSizeKB),
+ new SqlParameter("@ProhibitSendPct", prohibitSendPct),
+ new SqlParameter("@ProhibitSendReceivePct", prohibitSendReceivePct),
+ new SqlParameter("@HideFromAddressBook", hideFromAddressBook),
+ new SqlParameter("@MailboxPlanType", mailboxPlanType),
+ new SqlParameter("@AllowLitigationHold", enabledLitigationHold),
+ new SqlParameter("@RecoverableItemsWarningPct", recoverabelItemsWarning),
+ new SqlParameter("@RecoverableItemsSpace", recoverabelItemsSpace),
+ new SqlParameter("@LitigationHoldUrl", litigationHoldUrl),
+ new SqlParameter("@LitigationHoldMsg", litigationHoldMsg)
+
+ );
+ }
+
+
+
+ public static void DeleteExchangeMailboxPlan(int mailboxPlanId)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "DeleteExchangeMailboxPlan",
+ new SqlParameter("@MailboxPlanId", mailboxPlanId)
+ );
+ }
+
+
+ public static IDataReader GetExchangeMailboxPlan(int mailboxPlanId)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetExchangeMailboxPlan",
+ new SqlParameter("@MailboxPlanId", mailboxPlanId)
+ );
+ }
+
+ public static IDataReader GetExchangeMailboxPlans(int itemId)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetExchangeMailboxPlans",
+ new SqlParameter("@ItemID", itemId)
+ );
+ }
+
+
+ public static IDataReader GetExchangeOrganization(int itemId)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetExchangeOrganization",
+ new SqlParameter("@ItemID", itemId)
+ );
+ }
+
+
+ public static void SetOrganizationDefaultExchangeMailboxPlan(int itemId, int mailboxPlanId)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "SetOrganizationDefaultExchangeMailboxPlan",
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@MailboxPlanId", mailboxPlanId)
+ );
+ }
+
+ public static void SetExchangeAccountMailboxPlan(int accountId, int mailboxPlanId)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "SetExchangeAccountMailboxplan",
+ new SqlParameter("@AccountID", accountId),
+ new SqlParameter("@MailboxPlanId", (mailboxPlanId == 0) ? (object)DBNull.Value : (object)mailboxPlanId)
+ );
+ }
+
+ #endregion
+
+ #region Exchange Disclaimers
+ public static int AddExchangeDisclaimer(int itemID, ExchangeDisclaimer disclaimer)
+ {
+ SqlParameter outParam = new SqlParameter("@ExchangeDisclaimerId", SqlDbType.Int);
+ outParam.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "AddExchangeDisclaimer",
+ outParam,
+
+ new SqlParameter("@ItemID", itemID),
+ new SqlParameter("@DisclaimerName", disclaimer.DisclaimerName),
+ new SqlParameter("@DisclaimerText", disclaimer.DisclaimerText)
+ );
+
+ return Convert.ToInt32(outParam.Value);
+ }
+
+ public static void UpdateExchangeDisclaimer(int itemID, ExchangeDisclaimer disclaimer)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "UpdateExchangeDisclaimer",
+ new SqlParameter("@ExchangeDisclaimerId", disclaimer.ExchangeDisclaimerId),
+ new SqlParameter("@DisclaimerName", disclaimer.DisclaimerName),
+ new SqlParameter("@DisclaimerText", disclaimer.DisclaimerText)
+ );
+ }
+
+ public static void DeleteExchangeDisclaimer(int exchangeDisclaimerId)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "DeleteExchangeDisclaimer",
+ new SqlParameter("@ExchangeDisclaimerId", exchangeDisclaimerId)
+ );
+ }
+
+ public static IDataReader GetExchangeDisclaimer(int exchangeDisclaimerId)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetExchangeDisclaimer",
+ new SqlParameter("@ExchangeDisclaimerId", exchangeDisclaimerId)
+ );
+ }
+
+ public static IDataReader GetExchangeDisclaimers(int itemId)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetExchangeDisclaimers",
+ new SqlParameter("@ItemID", itemId)
+ );
+ }
+
+ public static void SetExchangeAccountDisclaimerId(int AccountID, int ExchangeDisclaimerId)
+ {
+ object id = null;
+ if (ExchangeDisclaimerId != -1) id = ExchangeDisclaimerId;
+
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "SetExchangeAccountDisclaimerId",
+ new SqlParameter("@AccountID", AccountID),
+ new SqlParameter("@ExchangeDisclaimerId", id)
+ );
+ }
+
+ public static int GetExchangeAccountDisclaimerId(int AccountID)
+ {
+ object objReturn = SqlHelper.ExecuteScalar(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetExchangeAccountDisclaimerId",
+ new SqlParameter("@AccountID", AccountID)
+ );
+
+ int ret;
+ if (!int.TryParse(objReturn.ToString(), out ret)) return -1;
+ return ret;
+ }
+
+ #endregion
+
+ #region Organizations
+
+ public static void DeleteOrganizationUser(int itemId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, "DeleteOrganizationUsers", new SqlParameter("@ItemID", itemId));
+ }
+
+ public static int GetItemIdByOrganizationId(string id)
+ {
+ object obj = SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "GetItemIdByOrganizationId",
+ new SqlParameter("@OrganizationId", id));
+
+ return (obj == null || DBNull.Value == obj) ? 0 : (int)obj;
+
+ }
+
+ public static IDataReader GetOrganizationStatistics(int itemId)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetOrganizationStatistics",
+ new SqlParameter("@ItemID", itemId)
+ );
+ }
+
+ public static IDataReader SearchOrganizationAccounts(int actorId, int itemId,
+ string filterColumn, string filterValue, string sortColumn, bool includeMailboxes)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "SearchOrganizationAccounts",
+ new SqlParameter("@ActorID", actorId),
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)),
+ new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)),
+ new SqlParameter("@SortColumn", VerifyColumnName(sortColumn)),
+ new SqlParameter("@IncludeMailboxes", includeMailboxes)
+ );
+ }
+
+ #endregion
+
+ #region CRM
+
+ public static int GetCRMUsersCount(int itemId, string name, string email)
+ {
+ SqlParameter[] sqlParams = new SqlParameter[]
+ {
+ new SqlParameter("@ItemID", itemId),
+ GetFilterSqlParam("@Name", name),
+ GetFilterSqlParam("@Email", email),
+ };
+
+ return (int)SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "GetCRMUsersCount", sqlParams);
+
+ }
+
+ private static SqlParameter GetFilterSqlParam(string paramName, string value)
+ {
+ if (string.IsNullOrEmpty(value))
+ return new SqlParameter(paramName, DBNull.Value);
+
+ return new SqlParameter(paramName, value);
+ }
+
+ public static IDataReader GetCrmUsers(int itemId, string sortColumn, string sortDirection, string name, string email, int startRow, int count)
+ {
+ SqlParameter[] sqlParams = new SqlParameter[]
+ {
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@SortColumn", sortColumn),
+ new SqlParameter("@SortDirection", sortDirection),
+ GetFilterSqlParam("@Name", name),
+ GetFilterSqlParam("@Email", email),
+ new SqlParameter("@StartRow", startRow),
+ new SqlParameter("Count", count)
+ };
+
+
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetCRMUsers", sqlParams);
+ }
+
+ public static IDataReader GetCRMOrganizationUsers(int itemId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, "GetCRMOrganizationUsers",
+ new SqlParameter[] { new SqlParameter("@ItemID", itemId) });
+ }
+
+ public static void CreateCRMUser(int itemId, Guid crmId, Guid businessUnitId)
+ {
+ SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, "InsertCRMUser",
+ new SqlParameter[]
+ {
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@CrmUserID", crmId),
+ new SqlParameter("@BusinessUnitId", businessUnitId)
+ });
+
+ }
+
+
+ public static IDataReader GetCrmUser(int itemId)
+ {
+ IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, "GetCRMUser",
+ new SqlParameter[]
+ {
+ new SqlParameter("@AccountID", itemId)
+ });
+ return reader;
+
+ }
+
+ public static int GetCrmUserCount(int itemId)
+ {
+ return (int)SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "GetOrganizationCRMUserCount",
+ new SqlParameter[] { new SqlParameter("@ItemID", itemId) });
+ }
+
+ public static void DeleteCrmOrganization(int organizationId)
+ {
+ SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "DeleteCRMOrganization",
+ new SqlParameter[] { new SqlParameter("@ItemID", organizationId) });
+ }
+
+ #endregion
+
+ #region VPS - Virtual Private Servers
+
+ public static IDataReader GetVirtualMachinesPaged(int actorId, int packageId, string filterColumn, string filterValue,
+ string sortColumn, int startRow, int maximumRows, bool recursive)
+ {
+ IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ "GetVirtualMachinesPaged",
+ new SqlParameter("@ActorID", actorId),
+ new SqlParameter("@PackageID", packageId),
+ new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)),
+ new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)),
+ new SqlParameter("@SortColumn", VerifyColumnName(sortColumn)),
+ new SqlParameter("@StartRow", startRow),
+ new SqlParameter("@MaximumRows", maximumRows),
+ new SqlParameter("@Recursive", recursive));
+ return reader;
+ }
+ #endregion
+
+ public static IDataReader GetVirtualMachinesForPCPaged(int actorId, int packageId, string filterColumn, string filterValue,
+ string sortColumn, int startRow, int maximumRows, bool recursive)
+ {
+ IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ "GetVirtualMachinesPagedForPC",
+ new SqlParameter("@ActorID", actorId),
+ new SqlParameter("@PackageID", packageId),
+ new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)),
+ new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)),
+ new SqlParameter("@SortColumn", VerifyColumnName(sortColumn)),
+ new SqlParameter("@StartRow", startRow),
+ new SqlParameter("@MaximumRows", maximumRows),
+ new SqlParameter("@Recursive", recursive));
+ return reader;
+ }
+
+
+ #region VPS - External Network
+
+ public static IDataReader GetUnallottedIPAddresses(int packageId, int serviceId, int poolId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ "GetUnallottedIPAddresses",
+ new SqlParameter("@PackageId", packageId),
+ new SqlParameter("@ServiceId", serviceId),
+ new SqlParameter("@PoolId", poolId));
+ }
+
+
+ public static void AllocatePackageIPAddresses(int packageId, string xml)
+ {
+ SqlParameter[] param = new[]
+ {
+ new SqlParameter("@PackageID", packageId),
+ new SqlParameter("@xml", xml)
+ };
+
+ ExecuteLongNonQuery("AllocatePackageIPAddresses", param);
+ }
+
+ public static IDataReader GetPackageIPAddresses(int packageId, int poolId, string filterColumn, string filterValue,
+ string sortColumn, int startRow, int maximumRows, bool recursive)
+ {
+ IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ "GetPackageIPAddresses",
+ new SqlParameter("@PackageID", packageId),
+ new SqlParameter("@PoolId", poolId),
+ new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)),
+ new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)),
+ new SqlParameter("@SortColumn", VerifyColumnName(sortColumn)),
+ new SqlParameter("@startRow", startRow),
+ new SqlParameter("@maximumRows", maximumRows),
+ new SqlParameter("@Recursive", recursive));
+ return reader;
+ }
+
+
+ public static void DeallocatePackageIPAddress(int id)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, "DeallocatePackageIPAddress",
+ new SqlParameter("@PackageAddressID", id));
+ }
+ #endregion
+
+ #region VPS - Private Network
+
+ public static IDataReader GetPackagePrivateIPAddressesPaged(int packageId, string filterColumn, string filterValue,
+ string sortColumn, int startRow, int maximumRows)
+ {
+ IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ "GetPackagePrivateIPAddressesPaged",
+ new SqlParameter("@PackageID", packageId),
+ new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)),
+ new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)),
+ new SqlParameter("@SortColumn", VerifyColumnName(sortColumn)),
+ new SqlParameter("@startRow", startRow),
+ new SqlParameter("@maximumRows", maximumRows));
+ return reader;
+ }
+
+ public static IDataReader GetPackagePrivateIPAddresses(int packageId)
+ {
+ IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ "GetPackagePrivateIPAddresses",
+ new SqlParameter("@PackageID", packageId));
+ return reader;
+ }
+ #endregion
+
+ #region VPS - External Network Adapter
+ public static IDataReader GetPackageUnassignedIPAddresses(int actorId, int packageId, int poolId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ "GetPackageUnassignedIPAddresses",
+ new SqlParameter("@ActorID", actorId),
+ new SqlParameter("@PackageID", packageId),
+ new SqlParameter("@PoolId", poolId));
+ }
+
+ public static IDataReader GetPackageIPAddress(int packageAddressId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ "GetPackageIPAddress",
+ new SqlParameter("@PackageAddressId", packageAddressId));
+ }
+
+ public static IDataReader GetItemIPAddresses(int actorId, int itemId, int poolId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ "GetItemIPAddresses",
+ new SqlParameter("@ActorID", actorId),
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@PoolID", poolId));
+ }
+
+ public static int AddItemIPAddress(int actorId, int itemId, int packageAddressId)
+ {
+ return SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ "AddItemIPAddress",
+ new SqlParameter("@ActorID", actorId),
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@PackageAddressID", packageAddressId));
+ }
+
+ public static int SetItemPrimaryIPAddress(int actorId, int itemId, int packageAddressId)
+ {
+ return SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ "SetItemPrimaryIPAddress",
+ new SqlParameter("@ActorID", actorId),
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@PackageAddressID", packageAddressId));
+ }
+
+ public static int DeleteItemIPAddress(int actorId, int itemId, int packageAddressId)
+ {
+ return SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ "DeleteItemIPAddress",
+ new SqlParameter("@ActorID", actorId),
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@PackageAddressID", packageAddressId));
+ }
+
+ public static int DeleteItemIPAddresses(int actorId, int itemId)
+ {
+ return SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ "DeleteItemIPAddresses",
+ new SqlParameter("@ActorID", actorId),
+ new SqlParameter("@ItemID", itemId));
+ }
+ #endregion
+
+ #region VPS - Private Network Adapter
+ public static IDataReader GetItemPrivateIPAddresses(int actorId, int itemId)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ "GetItemPrivateIPAddresses",
+ new SqlParameter("@ActorID", actorId),
+ new SqlParameter("@ItemID", itemId));
+ }
+
+ public static int AddItemPrivateIPAddress(int actorId, int itemId, string ipAddress)
+ {
+ return SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ "AddItemPrivateIPAddress",
+ new SqlParameter("@ActorID", actorId),
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@IPAddress", ipAddress));
+ }
+
+ public static int SetItemPrivatePrimaryIPAddress(int actorId, int itemId, int privateAddressId)
+ {
+ return SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ "SetItemPrivatePrimaryIPAddress",
+ new SqlParameter("@ActorID", actorId),
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@PrivateAddressID", privateAddressId));
+ }
+
+ public static int DeleteItemPrivateIPAddress(int actorId, int itemId, int privateAddressId)
+ {
+ return SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ "DeleteItemPrivateIPAddress",
+ new SqlParameter("@ActorID", actorId),
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@PrivateAddressID", privateAddressId));
+ }
+
+ public static int DeleteItemPrivateIPAddresses(int actorId, int itemId)
+ {
+ return SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ "DeleteItemPrivateIPAddresses",
+ new SqlParameter("@ActorID", actorId),
+ new SqlParameter("@ItemID", itemId));
+ }
+ #endregion
+
+ #region BlackBerry
+
+ public static void AddBlackBerryUser(int accountId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString,
+ CommandType.StoredProcedure,
+ "AddBlackBerryUser",
+ new[]
+ {
+ new SqlParameter("@AccountID", accountId)
+ });
+ }
+
+
+ public static bool CheckBlackBerryUserExists(int accountId)
+ {
+ int res = (int)SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "CheckBlackBerryUserExists",
+ new SqlParameter("@AccountID", accountId));
+ return res > 0;
+ }
+
+
+ public static IDataReader GetBlackBerryUsers(int itemId, string sortColumn, string sortDirection, string name, string email, int startRow, int count)
+ {
+ SqlParameter[] sqlParams = new SqlParameter[]
+ {
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@SortColumn", sortColumn),
+ new SqlParameter("@SortDirection", sortDirection),
+ GetFilterSqlParam("@Name", name),
+ GetFilterSqlParam("@Email", email),
+ new SqlParameter("@StartRow", startRow),
+ new SqlParameter("Count", count)
+ };
+
+
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetBlackBerryUsers", sqlParams);
+ }
+
+ public static int GetBlackBerryUsersCount(int itemId, string name, string email)
+ {
+ SqlParameter[] sqlParams = new SqlParameter[]
+ {
+ new SqlParameter("@ItemID", itemId),
+ GetFilterSqlParam("@Name", name),
+ GetFilterSqlParam("@Email", email),
+ };
+
+ return
+ (int)
+ SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "GetBlackBerryUsersCount", sqlParams);
+ }
+
+ public static void DeleteBlackBerryUser(int accountId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString,
+ CommandType.StoredProcedure,
+ "DeleteBlackBerryUser",
+ new[]
+ {
+ new SqlParameter("@AccountID", accountId)
+ });
+
+ }
+
+ #endregion
+
+ #region OCS
+
+ public static void AddOCSUser(int accountId, string instanceId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString,
+ CommandType.StoredProcedure,
+ "AddOCSUser",
+ new[]
+ {
+ new SqlParameter("@AccountID", accountId),
+ new SqlParameter("@InstanceID", instanceId)
+ });
+ }
+
+
+ public static bool CheckOCSUserExists(int accountId)
+ {
+ int res = (int)SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "CheckOCSUserExists",
+ new SqlParameter("@AccountID", accountId));
+ return res > 0;
+ }
+
+
+ public static IDataReader GetOCSUsers(int itemId, string sortColumn, string sortDirection, string name, string email, int startRow, int count)
+ {
+ SqlParameter[] sqlParams = new SqlParameter[]
+ {
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@SortColumn", sortColumn),
+ new SqlParameter("@SortDirection", sortDirection),
+ GetFilterSqlParam("@Name", name),
+ GetFilterSqlParam("@Email", email),
+ new SqlParameter("@StartRow", startRow),
+ new SqlParameter("Count", count)
+ };
+
+
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetOCSUsers", sqlParams);
+ }
+
+ public static int GetOCSUsersCount(int itemId, string name, string email)
+ {
+ SqlParameter[] sqlParams = new SqlParameter[]
+ {
+ new SqlParameter("@ItemID", itemId),
+ GetFilterSqlParam("@Name", name),
+ GetFilterSqlParam("@Email", email),
+ };
+
+ return
+ (int)
+ SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "GetOCSUsersCount", sqlParams);
+ }
+
+ public static void DeleteOCSUser(string instanceId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString,
+ CommandType.StoredProcedure,
+ "DeleteOCSUser",
+ new[]
+ {
+ new SqlParameter("@InstanceId", instanceId)
+ });
+
+ }
+
+ public static string GetOCSUserInstanceID(int accountId)
+ {
+ return (string)SqlHelper.ExecuteScalar(ConnectionString,
+ CommandType.StoredProcedure,
+ "GetInstanceID",
+ new[]
+ {
+ new SqlParameter("@AccountID", accountId)
+ });
+ }
+
+ #endregion
+
+ #region SSL
+ public static int AddSSLRequest(int actorId, int packageId, int siteID, int userID, string friendlyname, string hostname, string csr, int csrLength, string distinguishedName, bool isRenewal, int previousID)
+ {
+ SqlParameter prmId = new SqlParameter("@SSLID", SqlDbType.Int);
+ prmId.Direction = ParameterDirection.Output;
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "AddSSLRequest", prmId,
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@PackageId", packageId),
+ new SqlParameter("@UserID", userID),
+ new SqlParameter("@WebSiteID", siteID),
+ new SqlParameter("@FriendlyName", friendlyname),
+ new SqlParameter("@HostName", hostname),
+ new SqlParameter("@CSR", csr),
+ new SqlParameter("@CSRLength", csrLength),
+ new SqlParameter("@DistinguishedName", distinguishedName),
+ new SqlParameter("@IsRenewal", isRenewal),
+ new SqlParameter("@PreviousId", previousID)
+ );
+ return Convert.ToInt32(prmId.Value);
+
+ }
+
+ public static void CompleteSSLRequest(int actorId, int packageId, int id, string certificate, string distinguishedName, string serialNumber, byte[] hash, DateTime validFrom, DateTime expiryDate)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "CompleteSSLRequest",
+ new SqlParameter("@ActorID", actorId),
+ new SqlParameter("@PackageID", packageId),
+ new SqlParameter("@ID", id),
+ new SqlParameter("@DistinguishedName", distinguishedName),
+ new SqlParameter("@Certificate", certificate),
+ new SqlParameter("@SerialNumber", serialNumber),
+ new SqlParameter("@Hash", Convert.ToBase64String(hash)),
+ new SqlParameter("@ValidFrom", validFrom),
+ new SqlParameter("@ExpiryDate", expiryDate));
+
+ }
+
+ public static void AddPFX(int actorId, int packageId, int siteID, int userID, string hostname, string friendlyName, string distinguishedName, int csrLength, string serialNumber, DateTime validFrom, DateTime expiryDate)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "AddPFX",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@PackageId", packageId),
+ new SqlParameter("@UserID", userID),
+ new SqlParameter("@WebSiteID", siteID),
+ new SqlParameter("@FriendlyName", friendlyName),
+ new SqlParameter("@HostName", hostname),
+ new SqlParameter("@CSRLength", csrLength),
+ new SqlParameter("@DistinguishedName", distinguishedName),
+ new SqlParameter("@SerialNumber", serialNumber),
+ new SqlParameter("@ValidFrom", validFrom),
+ new SqlParameter("@ExpiryDate", expiryDate));
+
+ }
+
+ public static DataSet GetSSL(int actorId, int packageId, int id)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetSSL",
+ new SqlParameter("@SSLID", id));
+
+ }
+
+ public static DataSet GetCertificatesForSite(int actorId, int packageId, int siteId)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetCertificatesForSite",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@PackageId", packageId),
+ new SqlParameter("@websiteid", siteId));
+
+ }
+
+ public static DataSet GetPendingCertificates(int actorId, int packageId, int id, bool recursive)
+ {
+ return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetPendingSSLForWebsite",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@PackageId", packageId),
+ new SqlParameter("@websiteid", id),
+ new SqlParameter("@Recursive", recursive));
+
+ }
+
+ public static IDataReader GetSSLCertificateByID(int actorId, int id)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetSSLCertificateByID",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@ID", id));
+ }
+
+ public static int CheckSSL(int siteID, bool renewal)
+ {
+ SqlParameter prmId = new SqlParameter("@Result", SqlDbType.Int);
+ prmId.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "CheckSSL",
+ prmId,
+ new SqlParameter("@siteID", siteID),
+ new SqlParameter("@Renewal", renewal));
+
+ return Convert.ToInt32(prmId.Value);
+ }
+
+ public static IDataReader GetSiteCert(int actorId, int siteID)
+ {
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetSSLCertificateByID",
+ new SqlParameter("@ActorId", actorId),
+ new SqlParameter("@ID", siteID));
+ }
+
+ public static void DeleteCertificate(int actorId, int packageId, int id)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "DeleteCertificate",
+ new SqlParameter("@ActorID", actorId),
+ new SqlParameter("@PackageID", packageId),
+ new SqlParameter("@id", id));
+ }
+
+ public static bool CheckSSLExistsForWebsite(int siteId)
+ {
+ SqlParameter prmId = new SqlParameter("@Result", SqlDbType.Bit);
+ prmId.Direction = ParameterDirection.Output;
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "CheckSSLExistsForWebsite", prmId,
+ new SqlParameter("@siteID", siteId),
+ new SqlParameter("@SerialNumber", ""));
+ return Convert.ToBoolean(prmId.Value);
+ }
+ #endregion
+
+ #region Lync
+
+ public static void AddLyncUser(int accountId, int lyncUserPlanId, string sipAddress)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString,
+ CommandType.StoredProcedure,
+ "AddLyncUser",
+ new[]
+ {
+ new SqlParameter("@AccountID", accountId),
+ new SqlParameter("@LyncUserPlanID", lyncUserPlanId),
+ new SqlParameter("@SipAddress", sipAddress)
+ });
+ }
+
+ public static void UpdateLyncUser(int accountId, string sipAddress)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString,
+ CommandType.StoredProcedure,
+ "UpdateLyncUser",
+ new[]
+ {
+ new SqlParameter("@AccountID", accountId),
+ new SqlParameter("@SipAddress", sipAddress)
+ });
+ }
+
+
+ public static bool CheckLyncUserExists(int accountId)
+ {
+ int res = (int)SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "CheckLyncUserExists",
+ new SqlParameter("@AccountID", accountId));
+ return res > 0;
+ }
+
+ public static bool LyncUserExists(int accountId, string sipAddress)
+ {
+ SqlParameter outParam = new SqlParameter("@Exists", SqlDbType.Bit);
+ outParam.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "LyncUserExists",
+ new SqlParameter("@AccountID", accountId),
+ new SqlParameter("@SipAddress", sipAddress),
+ outParam
+ );
+
+ return Convert.ToBoolean(outParam.Value);
+ }
+
+
+
+ public static IDataReader GetLyncUsers(int itemId, string sortColumn, string sortDirection, int startRow, int count)
+ {
+ SqlParameter[] sqlParams = new SqlParameter[]
+ {
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@SortColumn", sortColumn),
+ new SqlParameter("@SortDirection", sortDirection),
+ new SqlParameter("@StartRow", startRow),
+ new SqlParameter("Count", count)
+ };
+
+
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetLyncUsers", sqlParams);
+ }
+
+
+ public static IDataReader GetLyncUsersByPlanId(int itemId, int planId)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetLyncUsersByPlanId",
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@PlanId", planId)
+ );
+ }
+
+ public static int GetLyncUsersCount(int itemId)
+ {
+ SqlParameter[] sqlParams = new SqlParameter[]
+ {
+ new SqlParameter("@ItemID", itemId)
+ };
+
+ return
+ (int)
+ SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "GetLyncUsersCount", sqlParams);
+ }
+
+ public static void DeleteLyncUser(int accountId)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString,
+ CommandType.StoredProcedure,
+ "DeleteLyncUser",
+ new[]
+ {
+ new SqlParameter("@AccountId", accountId)
+ });
+
+ }
+
+ public static int AddLyncUserPlan(int itemID, LyncUserPlan lyncUserPlan)
+ {
+ SqlParameter outParam = new SqlParameter("@LyncUserPlanId", SqlDbType.Int);
+ outParam.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "AddLyncUserPlan",
+ outParam,
+
+ new SqlParameter("@ItemID", itemID),
+ new SqlParameter("@LyncUserPlanName", lyncUserPlan.LyncUserPlanName),
+ new SqlParameter("@LyncUserPlanType", lyncUserPlan.LyncUserPlanType),
+ new SqlParameter("@IM", lyncUserPlan.IM),
+ new SqlParameter("@Mobility", lyncUserPlan.Mobility),
+ new SqlParameter("@MobilityEnableOutsideVoice", lyncUserPlan.MobilityEnableOutsideVoice),
+ new SqlParameter("@Federation", lyncUserPlan.Federation),
+ new SqlParameter("@Conferencing", lyncUserPlan.Conferencing),
+ new SqlParameter("@EnterpriseVoice", lyncUserPlan.EnterpriseVoice),
+ new SqlParameter("@VoicePolicy", lyncUserPlan.VoicePolicy),
+ new SqlParameter("@IsDefault", lyncUserPlan.IsDefault)
+ );
+
+ return Convert.ToInt32(outParam.Value);
+ }
+
+
+ public static void UpdateLyncUserPlan(int itemID, LyncUserPlan lyncUserPlan)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "UpdateLyncUserPlan",
+ new SqlParameter("@LyncUserPlanId", lyncUserPlan.LyncUserPlanId),
+ new SqlParameter("@LyncUserPlanName", lyncUserPlan.LyncUserPlanName),
+ new SqlParameter("@LyncUserPlanType", lyncUserPlan.LyncUserPlanType),
+ new SqlParameter("@IM", lyncUserPlan.IM),
+ new SqlParameter("@Mobility", lyncUserPlan.Mobility),
+ new SqlParameter("@MobilityEnableOutsideVoice", lyncUserPlan.MobilityEnableOutsideVoice),
+ new SqlParameter("@Federation", lyncUserPlan.Federation),
+ new SqlParameter("@Conferencing", lyncUserPlan.Conferencing),
+ new SqlParameter("@EnterpriseVoice", lyncUserPlan.EnterpriseVoice),
+ new SqlParameter("@VoicePolicy", lyncUserPlan.VoicePolicy),
+ new SqlParameter("@IsDefault", lyncUserPlan.IsDefault)
+ );
+ }
+
+ public static void DeleteLyncUserPlan(int lyncUserPlanId)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "DeleteLyncUserPlan",
+ new SqlParameter("@LyncUserPlanId", lyncUserPlanId)
+ );
+ }
+
+ public static IDataReader GetLyncUserPlan(int lyncUserPlanId)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetLyncUserPlan",
+ new SqlParameter("@LyncUserPlanId", lyncUserPlanId)
+ );
+ }
+
+
+ public static IDataReader GetLyncUserPlans(int itemId)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetLyncUserPlans",
+ new SqlParameter("@ItemID", itemId)
+ );
+ }
+
+
+ public static void SetOrganizationDefaultLyncUserPlan(int itemId, int lyncUserPlanId)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "SetOrganizationDefaultLyncUserPlan",
+ new SqlParameter("@ItemID", itemId),
+ new SqlParameter("@LyncUserPlanId", lyncUserPlanId)
+ );
+ }
+
+ public static IDataReader GetLyncUserPlanByAccountId(int AccountId)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetLyncUserPlanByAccountId",
+ new SqlParameter("@AccountID", AccountId)
+ );
+ }
+
+
+ public static void SetLyncUserLyncUserplan(int accountId, int lyncUserPlanId)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "SetLyncUserLyncUserplan",
+ new SqlParameter("@AccountID", accountId),
+ new SqlParameter("@LyncUserPlanId", (lyncUserPlanId == 0) ? (object)DBNull.Value : (object)lyncUserPlanId)
+ );
+ }
+
+
+ #endregion
+
+ public static int GetPackageIdByName(string Name)
+ {
+ int packageId = -1;
+ List providers = ServerController.GetProviders();
+ foreach (ProviderInfo providerInfo in providers)
+ {
+ if (string.Equals(Name, providerInfo.ProviderName, StringComparison.OrdinalIgnoreCase))
+ {
+ packageId = providerInfo.ProviderId;
+ break;
+ }
+ }
+
+ //if (-1 == packageId)
+ //{
+ // throw new Exception("Provider not found");
+ //}
+
+ return packageId;
+ }
+
+ public static int GetServiceIdByProviderForServer(int providerId, int serverId)
+ {
+ IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.Text,
+ @"SELECT TOP 1
+ ServiceID
+ FROM Services
+ WHERE ProviderID = @ProviderID AND ServerID = @ServerID",
+ new SqlParameter("@ProviderID", providerId),
+ new SqlParameter("@ServerID", serverId));
+
+ if (reader.Read())
+ {
+ return (int)reader["ServiceID"];
+ }
+
+ return -1;
+ }
+
+ #region Helicon Zoo
+
+ public static void GetHeliconZooProviderAndGroup(string providerName, out int providerId, out int groupId)
+ {
+ IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.Text,
+ @"SELECT TOP 1
+ ProviderID, GroupID
+ FROM Providers
+ WHERE ProviderName = @ProviderName",
+ new SqlParameter("@ProviderName", providerName));
+
+ reader.Read();
+
+ providerId = (int)reader["ProviderID"];
+ groupId = (int)reader["GroupID"];
+
+ }
+
+ public static IDataReader GetHeliconZooQuotas(int providerId)
+ {
+ IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.Text,
+ @"SELECT
+ Q.QuotaID,
+ Q.GroupID,
+ Q.QuotaName,
+ Q.QuotaDescription,
+ Q.QuotaTypeID,
+ Q.ServiceQuota
+ FROM Providers AS P
+ INNER JOIN Quotas AS Q ON P.GroupID = Q.GroupID
+ WHERE P.ProviderID = @ProviderID",
+ new SqlParameter("@ProviderID", providerId));
+
+ return reader;
+ }
+
+ public static void RemoveHeliconZooQuota(int groupId, string engineName)
+ {
+ int quotaId;
+
+ // find quota id
+ IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.Text,
+ @"SELECT TOP 1
+ QuotaID
+ FROM Quotas
+ WHERE QuotaName = @QuotaName AND GroupID = @GroupID",
+ new SqlParameter("@QuotaName", engineName),
+ new SqlParameter("@GroupID", groupId));
+
+ reader.Read();
+ quotaId = (int)reader["QuotaID"];
+
+ // delete references from HostingPlanQuotas
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.Text,
+ "DELETE FROM HostingPlanQuotas WHERE QuotaID = @QuotaID",
+ new SqlParameter("@QuotaID", quotaId)
+ );
+
+ // delete from Quotas
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.Text,
+ "DELETE FROM Quotas WHERE QuotaID = @QuotaID",
+ new SqlParameter("@QuotaID", quotaId)
+ );
+
+ }
+
+ public static void AddHeliconZooQuota(int groupId, int quotaId, string engineName, string engineDescription, int quotaOrder)
+ {
+ SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.Text,
+ @"INSERT INTO Quotas (QuotaID, GroupID, QuotaOrder, QuotaName, QuotaDescription, QuotaTypeID, ServiceQuota)
+ VALUES (@QuotaID, @GroupID, @QuotaOrder, @QuotaName, @QuotaDescription, 1, 0)",
+ new SqlParameter("@QuotaID", quotaId),
+ new SqlParameter("@GroupID", groupId),
+ new SqlParameter("@QuotaOrder", quotaOrder),
+ new SqlParameter("@QuotaName", engineName),
+ new SqlParameter("@QuotaDescription", engineDescription)
+ );
+ }
+
+ public static IDataReader GetEnabledHeliconZooQuotasForPackage(int packageId)
+ {
+ int providerId, groupId;
+
+ GetHeliconZooProviderAndGroup("HeliconZoo", out providerId, out groupId);
+
+ IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.Text,
+ @"SELECT HostingPlanQuotas.QuotaID, Quotas.QuotaName, Quotas.QuotaDescription
+ FROM HostingPlanQuotas
+ INNER JOIN Packages ON HostingPlanQuotas.PlanID = Packages.PlanID
+ INNER JOIN Quotas ON HostingPlanQuotas.QuotaID = Quotas.QuotaID
+ WHERE
+ (Packages.PackageID = @PackageID) AND (Quotas.GroupID = @GroupID) AND (HostingPlanQuotas.QuotaValue = 1)",
+ new SqlParameter("@PackageID", packageId),
+ new SqlParameter("@GroupID", groupId)
+ );
+
+ return reader;
+ }
+
+ public static int GetServerIdForPackage(int packageId)
+ {
+ IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.Text,
+ @"SELECT TOP 1
+ ServerID
+ FROM Packages
+ WHERE PackageID = @PackageID",
+ new SqlParameter("@PackageID", packageId)
+ );
+
+ if (reader.Read())
+ {
+ return (int)reader["ServerID"];
+ }
+
+ return -1;
+ }
+
+ #endregion
+ }
+}
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/EcommerceProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/EcommerceProvider.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/EcommerceProvider.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/EcommerceProvider.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/SQLHelper.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/SQLHelper.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/SQLHelper.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/SQLHelper.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DatabaseServers/DatabaseServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DatabaseServers/DatabaseServerController.cs
similarity index 96%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DatabaseServers/DatabaseServerController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DatabaseServers/DatabaseServerController.cs
index 26a3fac9..99e2d55d 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DatabaseServers/DatabaseServerController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DatabaseServers/DatabaseServerController.cs
@@ -200,8 +200,8 @@ namespace WebsitePanel.EnterpriseServer
if (packageCheck < 0) return packageCheck;
// place log record
- TaskManager.StartTask("SQL_DATABASE", "UPDATE", origItem.Name);
- TaskManager.ItemId = item.Id;
+ TaskManager.StartTask("SQL_DATABASE", "UPDATE", origItem.Name, item.Id);
+
TaskManager.WriteParameter("Provider", origItem.GroupName);
try
@@ -237,9 +237,7 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_MSSQL_DATABASES_PACKAGE_ITEM_NOT_FOUND;
// place log record
- TaskManager.StartTask("SQL_DATABASE", "DELETE", origItem.Name);
- TaskManager.ItemId = itemId;
- TaskManager.WriteParameter("Provider", origItem.GroupName);
+ TaskManager.StartTask("SQL_DATABASE", "DELETE", origItem.Name, itemId, new BackgroundTaskParameter("Provider", origItem.GroupName));
try
{
@@ -305,8 +303,7 @@ namespace WebsitePanel.EnterpriseServer
return null;
// place log record
- TaskManager.StartTask("SQL_DATABASE", "BACKUP", item.Name);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("SQL_DATABASE", "BACKUP", item.Name, itemId);
try
{
@@ -398,8 +395,7 @@ namespace WebsitePanel.EnterpriseServer
if (packageCheck < 0) return packageCheck;
// place log record
- TaskManager.StartTask("SQL_DATABASE", "RESTORE", item.Name);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("SQL_DATABASE", "RESTORE", item.Name, itemId);
try
{
@@ -468,8 +464,7 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_MSSQL_DATABASES_PACKAGE_ITEM_NOT_FOUND;
// place log record
- TaskManager.StartTask("SQL_DATABASE", "TRUNCATE", origItem.Name);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("SQL_DATABASE", "TRUNCATE", origItem.Name, itemId);
try
{
@@ -701,8 +696,7 @@ namespace WebsitePanel.EnterpriseServer
if (packageCheck < 0) return packageCheck;
// place log record
- TaskManager.StartTask("SQL_USER", "UPDATE", origItem.Name);
- TaskManager.ItemId = item.Id;
+ TaskManager.StartTask("SQL_USER", "UPDATE", origItem.Name, item.Id);
try
{
@@ -746,8 +740,7 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_MSSQL_USERS_PACKAGE_ITEM_NOT_FOUND;
// place log record
- TaskManager.StartTask("SQL_USER", "DELETE", origItem.Name);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("SQL_USER", "DELETE", origItem.Name, itemId);
try
{
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DnsServers/DnsServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DnsServers/DnsServerController.cs
similarity index 97%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DnsServers/DnsServerController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DnsServers/DnsServerController.cs
index de9aa5fd..10d4bbea 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DnsServers/DnsServerController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DnsServers/DnsServerController.cs
@@ -214,12 +214,10 @@ namespace WebsitePanel.EnterpriseServer
//
if (zoneItem != null)
{
- TaskManager.StartTask("DNS_ZONE", "DELETE", zoneItem.Name);
+ TaskManager.StartTask("DNS_ZONE", "DELETE", zoneItem.Name, zoneItemId);
//
try
{
- //
- TaskManager.ItemId = zoneItemId;
// delete DNS zone
DNSServer dns = new DNSServer();
ServiceProviderProxy.Init(dns, zoneItem.ServiceId);
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/CategoryController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/CategoryController.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/CategoryController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/CategoryController.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/ContractSystem/ContractController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/ContractSystem/ContractController.cs
similarity index 96%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/ContractSystem/ContractController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/ContractSystem/ContractController.cs
index 05920e1a..1fcab30c 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/ContractSystem/ContractController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/ContractSystem/ContractController.cs
@@ -84,8 +84,10 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.ContractSystem
//
result.Succeed = true;
result.SetProperty("ContractId", contractId);
+
// Add contract object
- ES.TaskManager.TaskParameters[SystemTaskParams.PARAM_CONTRACT] = GetContract(contractId);
+ ES.TaskManager.UpdateParam(SystemTaskParams.PARAM_CONTRACT, GetContract(contractId));
+
//
return result;
}
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Helpers.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Helpers.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Helpers.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Helpers.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/InvoiceController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/InvoiceController.cs
similarity index 94%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/InvoiceController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/InvoiceController.cs
index bd06bd04..65ccd06e 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/InvoiceController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/InvoiceController.cs
@@ -224,10 +224,15 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer
InvoiceController.UpdateInvoice(invoice.InvoiceId, invoice.InvoiceNumber, invoice.DueDate,
invoice.Total, invoice.SubTotal, invoice.TaxationId, invoice.TaxAmount, invoice.Currency);
//
- ES.TaskManager.TaskParameters[SystemTaskParams.PARAM_CONTRACT] = contract;
- ES.TaskManager.TaskParameters[SystemTaskParams.PARAM_INVOICE] = invoice;
- ES.TaskManager.TaskParameters[SystemTaskParams.PARAM_INVOICE_LINES] = invoiceLines;
- ES.TaskManager.TaskParameters[SystemTaskParams.PARAM_EXTRA_ARGS] = extraArgs;
+
+ Hashtable parameters = new Hashtable();
+
+ parameters.Add(SystemTaskParams.PARAM_CONTRACT, contract);
+ parameters.Add(SystemTaskParams.PARAM_INVOICE, invoice);
+ parameters.Add(SystemTaskParams.PARAM_INVOICE_LINES, invoiceLines);
+ parameters.Add(SystemTaskParams.PARAM_EXTRA_ARGS, extraArgs);
+
+ TaskManager.UpdateParams(parameters);
//
return result;
}
@@ -248,7 +253,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer
invoiceNumber, dueDate, total, subTotal, taxationId, taxAmount, currency);
}
- internal static Invoice GetCustomerInvoiceInternally(int invoiceId)
+ public static Invoice GetCustomerInvoiceInternally(int invoiceId)
{
return ES.ObjectUtils.FillObjectFromDataReader(
EcommerceProvider.GetCustomerInvoice(ES.SecurityContext.User.UserId, invoiceId));
@@ -260,7 +265,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer
EcommerceProvider.GetCustomerInvoiceItems(ES.SecurityContext.User.UserId, invoiceId));
}
- internal static string GetCustomerInvoiceFormattedInternally(int invoiceId, string cultureName)
+ public static string GetCustomerInvoiceFormattedInternally(int invoiceId, string cultureName)
{
Invoice invoice = GetCustomerInvoiceInternally(invoiceId);
//
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/MiscController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/MiscController.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/MiscController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/MiscController.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/PaymentGatewayController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/PaymentGatewayController.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/PaymentGatewayController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/PaymentGatewayController.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/DomainNameController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/DomainNameController.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/DomainNameController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/DomainNameController.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/HostingAddonController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/HostingAddonController.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/HostingAddonController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/HostingAddonController.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/HostingPackageController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/HostingPackageController.cs
similarity index 96%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/HostingPackageController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/HostingPackageController.cs
index 196c6f88..dca4232f 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/HostingPackageController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/HostingPackageController.cs
@@ -162,7 +162,8 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer
TaskManager.WriteParameter(USERNAME_PARAM, context.ConsumerInfo[ContractAccount.USERNAME]);
TaskManager.WriteParameter(SVC_PARAM, context.ServiceInfo.ServiceName);
TaskManager.WriteParameter(SVC_ID_PARAM, context.ServiceInfo.ServiceId);
- TaskManager.TaskParameters[SystemTaskParams.PARAM_SEND_EMAIL] = context.SendEmail;
+
+ TaskManager.UpdateParam(SystemTaskParams.PARAM_SEND_EMAIL, context.SendEmail);
// 0. Do security checks
if (!CheckOperationClientPermissions(result))
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/IServiceProvisioning.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/IServiceProvisioning.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/IServiceProvisioning.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/IServiceProvisioning.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/ProvisioningContext.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/ProvisioningContext.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/ProvisioningContext.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/ProvisioningContext.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/ServiceProvisioningBase.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/ServiceProvisioningBase.cs
similarity index 92%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/ServiceProvisioningBase.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/ServiceProvisioningBase.cs
index 50673c48..1988b103 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/ServiceProvisioningBase.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/ServiceProvisioningBase.cs
@@ -235,10 +235,13 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer
protected void SetOutboundParameters(ProvisioningContext context)
{
// set task outbound parameters
- TaskManager.TaskParameters[SystemTaskParams.PARAM_SERVICE] = context.ServiceInfo;
- TaskManager.TaskParameters[SystemTaskParams.PARAM_CONTRACT] = context.ContractInfo;
- TaskManager.TaskParameters[SystemTaskParams.PARAM_CONTRACT_ACCOUNT] = context.ConsumerInfo;
- TaskManager.TaskParameters[SystemTaskParams.PARAM_SEND_EMAIL] = context.SendEmail;
+ Hashtable parameters = new Hashtable();
+ parameters.Add(SystemTaskParams.PARAM_SERVICE, context.ServiceInfo);
+ parameters.Add(SystemTaskParams.PARAM_CONTRACT, context.ContractInfo);
+ parameters.Add(SystemTaskParams.PARAM_CONTRACT_ACCOUNT, context.ConsumerInfo);
+ parameters.Add(SystemTaskParams.PARAM_SEND_EMAIL, context.SendEmail);
+
+ TaskManager.UpdateParams(parameters);
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/ServiceController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/ServiceController.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/ServiceController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/ServiceController.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/ServiceHandlers/ServiceHandlerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/ServiceHandlers/ServiceHandlerController.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/ServiceHandlers/ServiceHandlerController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/ServiceHandlers/ServiceHandlerController.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/StorefrontController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/StorefrontController.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/StorefrontController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/StorefrontController.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/StorehouseController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/StorehouseController.cs
similarity index 95%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/StorehouseController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/StorehouseController.cs
index 737fdb5c..6ea4ddc6 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/StorehouseController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/StorehouseController.cs
@@ -763,7 +763,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer
return EcommerceProvider.DeleteTaxation(SecurityContext.User.UserId, userId, taxationId);
}
- internal static void SetPaymentProfile(string contractId, CheckoutDetails newProfile)
+ public static void SetPaymentProfile(string contractId, CheckoutDetails newProfile)
{
try
{
@@ -864,7 +864,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer
return details;
}
- internal static bool PaymentProfileExists(string contractId)
+ public static bool PaymentProfileExists(string contractId)
{
return EcommerceProvider.PaymentProfileExists(SecurityContext.User.UserId, contractId);
}
@@ -1145,10 +1145,15 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer
//
int resultCode = EcommerceProvider.UpdateCustomerPayment(SecurityContext.User.UserId, paymentId, invoiceId,
transactionId, total, currency, methodName, pluginId, (int)status);
+
//
- TaskManager.TaskParameters[SystemTaskParams.PARAM_CONTRACT] = ContractSystem.ContractController.GetContract(contractId);
- TaskManager.TaskParameters[SystemTaskParams.PARAM_INVOICE] = InvoiceController.GetCustomerInvoiceInternally(invoiceId);
- TaskManager.TaskParameters[SystemTaskParams.PARAM_PAYMENT] = GetCustomerPayment(paymentId);
+ Hashtable parameters = new Hashtable();
+ parameters[SystemTaskParams.PARAM_CONTRACT] = ContractSystem.ContractController.GetContract(contractId);
+ parameters[SystemTaskParams.PARAM_INVOICE] = InvoiceController.GetCustomerInvoiceInternally(invoiceId);
+ parameters[SystemTaskParams.PARAM_PAYMENT] = GetCustomerPayment(paymentId);
+
+ TaskManager.UpdateParams(parameters);
+
//
return resultCode;
}
@@ -1209,9 +1214,12 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer
// TRACE
TaskManager.WriteParameter("PaymentID", resultCode);
//
- TaskManager.TaskParameters[SystemTaskParams.PARAM_CONTRACT] = contract;
- TaskManager.TaskParameters[SystemTaskParams.PARAM_INVOICE] = invoice;
- TaskManager.TaskParameters[SystemTaskParams.PARAM_PAYMENT] = GetCustomerPayment(resultCode);
+ Hashtable parameters = new Hashtable();
+ parameters[SystemTaskParams.PARAM_CONTRACT] = contract;
+ parameters[SystemTaskParams.PARAM_INVOICE] = invoice;
+ parameters[SystemTaskParams.PARAM_PAYMENT] = GetCustomerPayment(resultCode);
+
+ TaskManager.UpdateParams(parameters);
//
return resultCode;
}
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/SystemPluginController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/SystemPluginController.cs
similarity index 96%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/SystemPluginController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/SystemPluginController.cs
index c9f01256..e93e8cf4 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/SystemPluginController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/SystemPluginController.cs
@@ -252,7 +252,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer
EcommerceProvider.GetSupportedPluginById(pluginId));
}
- internal static CheckoutFormParams GetCheckoutFormParams(string contractId, int invoiceId,
+ public static CheckoutFormParams GetCheckoutFormParams(string contractId, int invoiceId,
string methodName, KeyValueBunch options)
{
Contract contractInfo = ContractSystem.ContractController.GetContract(contractId);
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs
similarity index 81%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs
index d13af554..114c09e6 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs
@@ -45,9 +45,11 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers
///
public override void OnComplete()
{
- if (!TaskManager.HasErrors)
+ BackgroundTask topTask = TaskManager.TopTask;
+
+ if (!TaskManager.HasErrors(topTask))
{
- switch (TaskManager.TaskName)
+ switch (topTask.TaskName)
{
case SystemTasks.SVC_SUSPEND:
case SystemTasks.SVC_CANCEL:
@@ -72,7 +74,10 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers
// send an e-mail notification
try
{
- bool sendNotification = (bool)TaskManager.TaskParameters[SystemTaskParams.PARAM_SEND_EMAIL];
+ BackgroundTask topTask = TaskManager.TopTask;
+
+ bool sendNotification = Utils.ParseBool(topTask.GetParamValue(SystemTaskParams.PARAM_SEND_EMAIL), false);
+
// Ensure notification is required
if (!sendNotification)
{
@@ -80,7 +85,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers
return;
}
- Service service = (Service)TaskManager.TaskParameters[SystemTaskParams.PARAM_SERVICE];
+ Service service = (Service)topTask.GetParamValue(SystemTaskParams.PARAM_SERVICE);
int smtpResult = 0;
switch (service.Status)
{
@@ -112,9 +117,11 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers
//
try
{
+ BackgroundTask topTask = TaskManager.TopTask;
+
// Read task parameters
- Invoice invoice = (Invoice)TaskManager.TaskParameters[SystemTaskParams.PARAM_INVOICE];
- CustomerPayment payment = (CustomerPayment)TaskManager.TaskParameters[SystemTaskParams.PARAM_PAYMENT];
+ Invoice invoice = (Invoice)topTask.GetParamValue(SystemTaskParams.PARAM_INVOICE);
+ CustomerPayment payment = (CustomerPayment)topTask.GetParamValue(SystemTaskParams.PARAM_PAYMENT);
//
if (payment.Status == TransactionStatus.Approved)
{
@@ -139,11 +146,13 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers
//
try
{
+ BackgroundTask topTask = TaskManager.TopTask;
+
// Read task parameters
- Contract contract = (Contract)TaskManager.TaskParameters[SystemTaskParams.PARAM_CONTRACT];
- Invoice invoice = (Invoice)TaskManager.TaskParameters[SystemTaskParams.PARAM_INVOICE];
- List invoiceLines = (List)TaskManager.TaskParameters[SystemTaskParams.PARAM_INVOICE_LINES];
- KeyValueBunch extraArgs = (KeyValueBunch)TaskManager.TaskParameters[SystemTaskParams.PARAM_EXTRA_ARGS];
+ Contract contract = (Contract)topTask.GetParamValue(SystemTaskParams.PARAM_CONTRACT);
+ Invoice invoice = (Invoice)topTask.GetParamValue(SystemTaskParams.PARAM_INVOICE);
+ List invoiceLines = (List)topTask.GetParamValue(SystemTaskParams.PARAM_INVOICE_LINES);
+ KeyValueBunch extraArgs = (KeyValueBunch)topTask.GetParamValue(SystemTaskParams.PARAM_EXTRA_ARGS);
// modify invoice direct url
if (extraArgs != null && !String.IsNullOrEmpty(extraArgs["InvoiceDirectURL"]))
extraArgs["InvoiceDirectURL"] += "&InvoiceId=" + invoice.InvoiceId;
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs
similarity index 82%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs
index 1ce637c4..b7b8efec 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs
@@ -44,9 +44,11 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers
public override void OnComplete()
{
- if (!TaskManager.HasErrors)
+ BackgroundTask topTask = TaskManager.TopTask;
+
+ if (!TaskManager.HasErrors(topTask))
{
- switch (TaskManager.TaskName)
+ switch (topTask.TaskName)
{
case SystemTasks.TASK_ADD_INVOICE:
RegisterInvoiceActivationTrigger();
@@ -65,7 +67,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers
private void RegisterInvoiceActivationTrigger()
{
// Read contract invoice
- Invoice invoice = (Invoice)TaskManager.TaskParameters[SystemTaskParams.PARAM_INVOICE];
+ Invoice invoice = (Invoice)TaskManager.TopTask.GetParamValue(SystemTaskParams.PARAM_INVOICE);
//
TriggerSystem.TriggerController.AddSystemTrigger(invoice.InvoiceId.ToString(),
ActivateInvoiceTrigger.STATUS_AWAITING_PAYMENT, typeof(ActivateInvoiceTrigger));
@@ -73,10 +75,12 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers
private void RegisterContractActivationTrigger()
{
+ BackgroundTask topTask = TaskManager.TopTask;
+
// Ensure the contract has been registered successfully
- if (TaskManager.TaskParameters.ContainsKey(SystemTaskParams.PARAM_CONTRACT))
+ if (topTask.ContainsParam(SystemTaskParams.PARAM_CONTRACT))
{
- Contract contract = (Contract)TaskManager.TaskParameters[SystemTaskParams.PARAM_CONTRACT];
+ Contract contract = (Contract)topTask.GetParamValue(SystemTaskParams.PARAM_CONTRACT);
//
if (contract.Status == ContractStatus.Pending)
{
@@ -88,8 +92,10 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers
private void ActivatePaymentSystemTriggers()
{
- CustomerPayment payment = (CustomerPayment)TaskManager.TaskParameters[SystemTaskParams.PARAM_PAYMENT];
- Contract contract = (Contract)TaskManager.TaskParameters[SystemTaskParams.PARAM_CONTRACT];
+ BackgroundTask topTask = TaskManager.TopTask;
+
+ CustomerPayment payment = (CustomerPayment)topTask.GetParamValue(SystemTaskParams.PARAM_PAYMENT);
+ Contract contract = (Contract)topTask.GetParamValue(SystemTaskParams.PARAM_CONTRACT);
// Run activate contract trigger if the transaction was approved
if (payment.Status == TransactionStatus.Approved)
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TriggerSystem/CommonTrigger.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TriggerSystem/CommonTrigger.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TriggerSystem/CommonTrigger.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TriggerSystem/CommonTrigger.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TriggerSystem/TriggerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TriggerSystem/TriggerController.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TriggerSystem/TriggerController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TriggerSystem/TriggerController.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/ExchangeServer/ExchangeServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/ExchangeServer/ExchangeServerController.cs
new file mode 100644
index 00000000..c75be2e8
--- /dev/null
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/ExchangeServer/ExchangeServerController.cs
@@ -0,0 +1,5077 @@
+// Copyright (c) 2012, Outercurve Foundation.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification,
+// are permitted provided that the following conditions are met:
+//
+// - Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// - Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// - Neither the name of the Outercurve Foundation nor the names of its
+// contributors may be used to endorse or promote products derived from this
+// software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.Data;
+using System.Net.Mail;
+using System.Threading;
+using WebsitePanel.EnterpriseServer.Code.HostedSolution;
+using WebsitePanel.Providers;
+using WebsitePanel.Providers.Common;
+using WebsitePanel.Providers.Exchange;
+using WebsitePanel.Providers.HostedSolution;
+using WebsitePanel.Providers.OCS;
+using WebsitePanel.Providers.ResultObjects;
+
+
+namespace WebsitePanel.EnterpriseServer
+{
+ public class ExchangeServerController
+ {
+ #region Organizations
+ public static DataSet GetRawExchangeOrganizationsPaged(int packageId, bool recursive,
+ string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows)
+ {
+ #region Demo Mode
+ if (IsDemoMode)
+ {
+ DataSet ds = new DataSet();
+
+ // total records
+ DataTable dtTotal = ds.Tables.Add();
+ dtTotal.Columns.Add("Records", typeof(int));
+ dtTotal.Rows.Add(3);
+
+ // organizations
+ DataTable dtItems = ds.Tables.Add();
+ dtItems.Columns.Add("ItemID", typeof(int));
+ dtItems.Columns.Add("OrganizationID", typeof(string));
+ dtItems.Columns.Add("ItemName", typeof(string));
+ dtItems.Columns.Add("PackageName", typeof(string));
+ dtItems.Columns.Add("PackageID", typeof(int));
+ dtItems.Columns.Add("Username", typeof(string));
+ dtItems.Columns.Add("UserID", typeof(int));
+ dtItems.Rows.Add(1, "fabrikam", "Fabrikam Inc", "Hosted Exchange", 1, "Customer", 1);
+ dtItems.Rows.Add(1, "contoso", "Contoso", "Hosted Exchange", 1, "Customer", 1);
+ dtItems.Rows.Add(1, "gencons", "General Consultants", "Hosted Exchange", 1, "Customer", 1);
+
+ return ds;
+ }
+ #endregion
+
+ return PackageController.GetRawPackageItemsPaged(
+ packageId, ResourceGroups.Exchange, typeof(Organization),
+ recursive, filterColumn, filterValue, sortColumn, startRow, maximumRows);
+ }
+
+ public static OrganizationsPaged GetExchangeOrganizationsPaged(int packageId, bool recursive,
+ string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows)
+ {
+ ServiceItemsPaged items = PackageController.GetPackageItemsPaged(
+ packageId, ResourceGroups.Exchange, typeof(Organization),
+ recursive, filterColumn, filterValue, sortColumn, startRow, maximumRows);
+
+ OrganizationsPaged orgs = new OrganizationsPaged();
+ orgs.RecordsCount = items.RecordsCount;
+ orgs.PageItems = new Organization[items.PageItems.Length];
+
+ for (int i = 0; i < orgs.PageItems.Length; i++)
+ orgs.PageItems[i] = (Organization)items.PageItems[i];
+
+ return orgs;
+ }
+
+ public static List GetExchangeOrganizations(int packageId, bool recursive)
+ {
+ List items = PackageController.GetPackageItemsByType(
+ packageId, typeof(Organization), recursive);
+
+ return items.ConvertAll(
+ new Converter(
+ delegate(ServiceProviderItem item) { return (Organization)item; }));
+ }
+
+ public static List GetExchangeOrganizationsInternal(int packageId, bool recursive)
+ {
+ List items = PackageController.GetPackageItemsByTypeInternal(packageId, null, typeof(Organization), recursive);
+
+ return items.ConvertAll(
+ new Converter(
+ delegate(ServiceProviderItem item) { return (Organization)item; }));
+ }
+
+ public static Organization GetOrganization(int itemId)
+ {
+ #region Demo Mode
+ if (IsDemoMode)
+ {
+ // load package by user
+ Organization org = new Organization();
+ org.PackageId = 0;
+ org.Id = 1;
+ org.OrganizationId = "fabrikam";
+ org.Name = "Fabrikam Inc";
+ org.KeepDeletedItemsDays = 14;
+ return org;
+ }
+ #endregion
+
+ return (Organization)PackageController.GetPackageItem(itemId);
+ }
+
+ public static OrganizationStatistics GetOrganizationStatistics(int itemId)
+ {
+ return GetOrganizationStatisticsInternal(itemId, false);
+ }
+
+ public static OrganizationStatistics GetOrganizationStatisticsByOrganization(int itemId)
+ {
+ return GetOrganizationStatisticsInternal(itemId, true);
+ }
+
+
+ private static OrganizationStatistics GetOrganizationStatisticsInternal(int itemId, bool byOrganization)
+ {
+ #region Demo Mode
+ if (IsDemoMode)
+ {
+ OrganizationStatistics stats = new OrganizationStatistics();
+ stats.AllocatedMailboxes = 10;
+ stats.CreatedMailboxes = 4;
+ stats.AllocatedContacts = 4;
+ stats.CreatedContacts = 2;
+ stats.AllocatedDistributionLists = 5;
+ stats.CreatedDistributionLists = 1;
+ stats.AllocatedPublicFolders = 40;
+ stats.CreatedPublicFolders = 4;
+ stats.AllocatedDomains = 5;
+ stats.CreatedDomains = 2;
+ stats.AllocatedDiskSpace = 200;
+ stats.UsedDiskSpace = 70;
+ return stats;
+ }
+ #endregion
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_ORG_STATS", itemId);
+
+ try
+ {
+ Organization org = (Organization)PackageController.GetPackageItem(itemId);
+ if (org == null)
+ return null;
+
+ OrganizationStatistics stats = new OrganizationStatistics();
+
+ if (byOrganization)
+ {
+ OrganizationStatistics tempStats = ObjectUtils.FillObjectFromDataReader(DataProvider.GetExchangeOrganizationStatistics(org.Id));
+
+ stats.CreatedMailboxes = tempStats.CreatedMailboxes;
+ stats.CreatedContacts = tempStats.CreatedContacts;
+ stats.CreatedDistributionLists = tempStats.CreatedDistributionLists;
+ stats.CreatedDomains = tempStats.CreatedDomains;
+ stats.CreatedPublicFolders = tempStats.CreatedPublicFolders;
+ stats.UsedDiskSpace = tempStats.UsedDiskSpace;
+ stats.UsedLitigationHoldSpace = tempStats.UsedLitigationHoldSpace;
+ }
+ else
+ {
+ UserInfo user = ObjectUtils.FillObjectFromDataReader(DataProvider.GetUserByExchangeOrganizationIdInternally(org.Id));
+ List Packages = PackageController.GetPackages(user.UserId);
+
+ if ((Packages != null) & (Packages.Count > 0))
+ {
+ foreach (PackageInfo Package in Packages)
+ {
+ List orgs = null;
+
+ orgs = GetExchangeOrganizations(Package.PackageId, false);
+
+ if ((orgs != null) & (orgs.Count > 0))
+ {
+ foreach (Organization o in orgs)
+ {
+ OrganizationStatistics tempStats = ObjectUtils.FillObjectFromDataReader(DataProvider.GetExchangeOrganizationStatistics(o.Id));
+
+ stats.CreatedMailboxes += tempStats.CreatedMailboxes;
+ stats.CreatedContacts += tempStats.CreatedContacts;
+ stats.CreatedDistributionLists += tempStats.CreatedDistributionLists;
+ stats.CreatedDomains += tempStats.CreatedDomains;
+ stats.CreatedPublicFolders += tempStats.CreatedPublicFolders;
+ stats.UsedDiskSpace += tempStats.UsedDiskSpace;
+ stats.UsedLitigationHoldSpace += tempStats.UsedLitigationHoldSpace;
+ }
+ }
+ }
+ }
+ }
+
+ // disk space
+ //stats.UsedDiskSpace = org.DiskSpace;
+
+
+ // allocated quotas
+ PackageContext cntx = PackageController.GetPackageContext(org.PackageId);
+ stats.AllocatedMailboxes = cntx.Quotas[Quotas.EXCHANGE2007_MAILBOXES].QuotaAllocatedValue;
+ stats.AllocatedContacts = cntx.Quotas[Quotas.EXCHANGE2007_CONTACTS].QuotaAllocatedValue;
+ stats.AllocatedDistributionLists = cntx.Quotas[Quotas.EXCHANGE2007_DISTRIBUTIONLISTS].QuotaAllocatedValue;
+ stats.AllocatedPublicFolders = cntx.Quotas[Quotas.EXCHANGE2007_PUBLICFOLDERS].QuotaAllocatedValue;
+ stats.AllocatedDiskSpace = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue;
+ stats.AllocatedLitigationHoldSpace = cntx.Quotas[Quotas.EXCHANGE2007_RECOVERABLEITEMSSPACE].QuotaAllocatedValue;
+
+ return stats;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+
+
+ public static int CalculateOrganizationDiskspace(int itemId)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "CALCULATE_DISKSPACE", itemId);
+
+ try
+ {
+ // create thread parameters
+ ThreadStartParameters prms = new ThreadStartParameters();
+ prms.UserId = SecurityContext.User.UserId;
+ prms.Parameters = new object[] { itemId };
+
+ Thread t = new Thread(CalculateOrganizationDiskspaceAsync);
+ t.Start(prms);
+ return 0;
+
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ private static void CalculateOrganizationDiskspaceAsync(object objPrms)
+ {
+ ThreadStartParameters prms = (ThreadStartParameters)objPrms;
+
+ // impersonate thread
+ SecurityContext.SetThreadPrincipal(prms.UserId);
+
+ int itemId = (int)prms.Parameters[0];
+
+ // calculate disk space
+ CalculateOrganizationDiskspaceInternal(itemId);
+ }
+
+ internal static void CalculateOrganizationDiskspaceInternal(int itemId)
+ {
+ try
+ {
+ // calculate disk space
+ Organization org = (Organization)PackageController.GetPackageItem(itemId);
+ if (org == null)
+ return;
+
+ SoapServiceProviderItem soapOrg = SoapServiceProviderItem.Wrap(org);
+
+
+ int exchangeServiceId = PackageController.GetPackageServiceId(org.PackageId, ResourceGroups.Exchange);
+
+ if (exchangeServiceId != 0)
+ {
+ ServiceProvider exchange = GetServiceProvider(exchangeServiceId, org.ServiceId);
+
+ ServiceProviderItemDiskSpace[] itemsDiskspace = exchange.GetServiceItemsDiskSpace(new SoapServiceProviderItem[] { soapOrg });
+
+
+ if (itemsDiskspace != null && itemsDiskspace.Length > 0)
+ {
+ // set disk space
+ org.DiskSpace = (int)Math.Round(((float)itemsDiskspace[0].DiskSpace / 1024 / 1024));
+
+ // save organization
+ UpdateOrganization(org);
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ // write to audit log
+ TaskManager.WriteError(ex);
+ }
+ }
+
+ private static bool OrganizationIdentifierExists(string organizationId)
+ {
+ return DataProvider.ExchangeOrganizationExists(organizationId);
+ }
+
+
+
+
+
+ private static int ExtendToExchangeOrganization(ref Organization org)
+ {
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "CREATE_ORG", org.Name, new BackgroundTaskParameter("Organization ID", org.OrganizationId));
+
+ try
+ {
+ // provision organization in Exchange
+ int serviceId = GetExchangeServiceID(org.PackageId);
+ int[] hubTransportServiceIds;
+ int[] clientAccessServiceIds;
+
+ GetExchangeServices(serviceId, out hubTransportServiceIds, out clientAccessServiceIds);
+
+
+ ExchangeServer mailboxRole = GetExchangeServer(serviceId, org.ServiceId);
+
+
+ bool authDomainCreated = false;
+ int itemId = 0;
+ bool organizationExtended = false;
+
+ List domains = null;
+ try
+ {
+ PackageContext cntx = PackageController.GetPackageContext(org.PackageId);
+
+ // 1) Create Organization (Mailbox)
+ // ================================
+ Organization exchangeOrganization = mailboxRole.ExtendToExchangeOrganization(org.OrganizationId,
+ org.SecurityGroup,
+ Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_ISCONSUMER].QuotaAllocatedValue));
+
+ organizationExtended = true;
+
+ exchangeOrganization.OrganizationId = org.OrganizationId;
+ exchangeOrganization.PackageId = org.PackageId;
+ exchangeOrganization.ServiceId = org.ServiceId;
+
+ exchangeOrganization.DefaultDomain = org.DefaultDomain;
+ exchangeOrganization.Name = org.Name;
+ exchangeOrganization.Id = org.Id;
+ exchangeOrganization.SecurityGroup = org.SecurityGroup;
+ exchangeOrganization.DistinguishedName = org.DistinguishedName;
+ exchangeOrganization.CrmAdministratorId = org.CrmAdministratorId;
+ exchangeOrganization.CrmCollation = org.CrmCollation;
+ exchangeOrganization.CrmCurrency = org.CrmCurrency;
+ exchangeOrganization.CrmLanguadgeCode = org.CrmLanguadgeCode;
+ exchangeOrganization.CrmOrganizationId = org.CrmOrganizationId;
+ exchangeOrganization.CrmOrgState = org.CrmOrgState;
+ exchangeOrganization.CrmUrl = org.CrmUrl;
+
+ org = exchangeOrganization;
+
+ // 2) Get OAB virtual directories from Client Access servers and
+ // create Create Organization OAB (Mailbox)
+ // ==========================================
+ List oabVirtualDirs = new List();
+ foreach (int id in clientAccessServiceIds)
+ {
+ ExchangeServer clientAccessRole = null;
+ try
+ {
+ clientAccessRole = GetExchangeServer(id, org.ServiceId);
+ }
+ catch(Exception ex)
+ {
+ TaskManager.WriteError(ex);
+ continue;
+ }
+ oabVirtualDirs.Add(clientAccessRole.GetOABVirtualDirectory());
+ }
+
+ Organization orgOAB = mailboxRole.CreateOrganizationOfflineAddressBook(org.OrganizationId, org.SecurityGroup, string.Join(",", oabVirtualDirs.ToArray()));
+ org.OfflineAddressBook = orgOAB.OfflineAddressBook;
+
+
+ // 3) Add organization domains (Hub Transport)
+ domains = OrganizationController.GetOrganizationDomains(org.Id);
+
+ foreach (int id in hubTransportServiceIds)
+ {
+ ExchangeServer hubTransportRole = null;
+ try
+ {
+ hubTransportRole = GetExchangeServer(id, org.ServiceId);
+ }
+ catch(Exception ex)
+ {
+ TaskManager.WriteError(ex);
+ continue;
+ }
+
+ string[] existingDomains = hubTransportRole.GetAuthoritativeDomains();
+ if (existingDomains != null)
+ Array.Sort(existingDomains);
+
+ foreach (OrganizationDomainName domain in domains)
+ {
+ if (existingDomains == null || Array.BinarySearch(existingDomains, domain.DomainName) < 0)
+ {
+ hubTransportRole.AddAuthoritativeDomain(domain.DomainName);
+ }
+ if (domain.DomainType != ExchangeAcceptedDomainType.Authoritative)
+ {
+ hubTransportRole.ChangeAcceptedDomainType(domain.DomainName, domain.DomainType);
+ }
+ }
+ authDomainCreated = true;
+ break;
+ }
+
+ foreach (OrganizationDomainName d in domains)
+ {
+ DomainInfo domain = ServerController.GetDomain(d.DomainId);
+
+ //Add the service records
+ if (domain != null)
+ {
+ if (domain.ZoneItemId != 0)
+ {
+ ServerController.AddServiceDNSRecords(org.PackageId, ResourceGroups.Exchange, domain, "");
+ ServerController.AddServiceDNSRecords(org.PackageId, ResourceGroups.BlackBerry, domain, "");
+ ServerController.AddServiceDNSRecords(org.PackageId, ResourceGroups.OCS, domain, "");
+ }
+ }
+ }
+
+
+ // 4) Add the address book policy (Exchange 2010 SP2
+ //
+ // ==========================================
+ Organization OrgTmp = mailboxRole.CreateOrganizationAddressBookPolicy(org.OrganizationId,
+ org.GlobalAddressList,
+ org.AddressList,
+ org.RoomsAddressList,
+ org.OfflineAddressBook);
+
+ org.AddressBookPolicy = OrgTmp.AddressBookPolicy;
+
+ StringDictionary settings = ServerController.GetServiceSettings(serviceId);
+ org.KeepDeletedItemsDays = Utils.ParseInt(settings["KeepDeletedItemsDays"], 14);
+
+ }
+ catch (Exception ex)
+ {
+
+ // rollback organization creation
+ if (organizationExtended)
+ mailboxRole.DeleteOrganization(org.OrganizationId, org.DistinguishedName,
+ org.GlobalAddressList, org.AddressList, org.RoomsAddressList, org.OfflineAddressBook, org.SecurityGroup, org.AddressBookPolicy);
+
+ // rollback domain
+ if (authDomainCreated)
+ foreach (int id in hubTransportServiceIds)
+ {
+ ExchangeServer hubTransportRole = null;
+ try
+ {
+ hubTransportRole = GetExchangeServer(id, org.ServiceId);
+ }
+ catch (Exception exe)
+ {
+ TaskManager.WriteError(exe);
+ continue;
+ }
+
+ foreach (OrganizationDomainName domain in domains)
+ {
+ hubTransportRole.DeleteAuthoritativeDomain(domain.DomainName);
+
+ }
+
+ break;
+ }
+
+ throw TaskManager.WriteError(ex);
+ }
+
+ return itemId;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ private static int[] ParseMultiSetting(int mailboxServiceId, string settingName)
+ {
+ List retIds = new List();
+ StringDictionary settings = ServerController.GetServiceSettings(mailboxServiceId);
+ if (!String.IsNullOrEmpty(settings[settingName]))
+ {
+ string[] ids = settings[settingName].Split(',');
+
+ int res;
+ foreach (string id in ids)
+ {
+ if (int.TryParse(id, out res))
+ retIds.Add(res);
+ }
+ }
+
+ if (retIds.Count == 0)
+ retIds.Add(mailboxServiceId);
+
+ return retIds.ToArray();
+
+ }
+
+ private static void GetExchangeServices(int mailboxServiceId,
+ out int[] hubTransportServiceIds, out int[] clientAccessServiceIds)
+ {
+ hubTransportServiceIds = ParseMultiSetting(mailboxServiceId, "HubTransportServiceID");
+
+ clientAccessServiceIds = ParseMultiSetting(mailboxServiceId, "ClientAccessServiceID");
+ }
+
+ public static int DeleteOrganization(int itemId)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "DELETE_ORG", itemId);
+
+ try
+ {
+ // delete organization in Exchange
+ //System.Threading.Thread.Sleep(5000);
+ Organization org = (Organization)PackageController.GetPackageItem(itemId);
+
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ bool successful = exchange.DeleteOrganization(
+ org.OrganizationId,
+ org.DistinguishedName,
+ org.GlobalAddressList,
+ org.AddressList,
+ org.RoomsAddressList,
+ org.OfflineAddressBook,
+ org.SecurityGroup,
+ org.AddressBookPolicy);
+
+
+ return successful ? 0 : BusinessErrorCodes.ERROR_EXCHANGE_DELETE_SOME_PROBLEMS;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static Organization GetOrganizationStorageLimits(int itemId)
+ {
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_ORG_LIMITS", itemId);
+
+ try
+ {
+ return GetOrganization(itemId);
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int SetOrganizationStorageLimits(int itemId, int issueWarningKB, int prohibitSendKB,
+ int prohibitSendReceiveKB, int keepDeletedItemsDays, bool applyToMailboxes)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "SET_ORG_LIMITS", itemId);
+
+ try
+ {
+ Organization org = (Organization)PackageController.GetPackageItem(itemId);
+ if (org == null)
+ return 0;
+
+ // load package context
+ PackageContext cntx = PackageController.GetPackageContext(org.PackageId);
+
+ int maxDiskSpace = 0;
+ if (cntx.Quotas.ContainsKey(Quotas.EXCHANGE2007_DISKSPACE)
+ && cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue > 0)
+ maxDiskSpace = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue * 1024;
+
+ if (maxDiskSpace > 0 && (issueWarningKB > maxDiskSpace || prohibitSendKB > maxDiskSpace || prohibitSendReceiveKB > maxDiskSpace || issueWarningKB == -1 || prohibitSendKB == -1 || prohibitSendReceiveKB == -1))
+ return BusinessErrorCodes.ERROR_EXCHANGE_STORAGE_QUOTAS_EXCEED_HOST_VALUES;
+
+ // set limits
+ org.KeepDeletedItemsDays = keepDeletedItemsDays;
+
+ // save organization
+ UpdateOrganization(org);
+
+ if (applyToMailboxes)
+ {
+
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ exchange.SetOrganizationStorageLimits(org.DistinguishedName,
+ issueWarningKB,
+ prohibitSendKB,
+ prohibitSendReceiveKB,
+ keepDeletedItemsDays);
+ }
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static ExchangeItemStatistics[] GetMailboxesStatistics(int itemId)
+ {
+ #region Demo Mode
+ if (IsDemoMode)
+ {
+ List items = new List();
+ ExchangeItemStatistics item1 = new ExchangeItemStatistics();
+ item1.ItemName = "John Smith";
+ item1.TotalItems = 105;
+ item1.TotalSizeMB = 14;
+ item1.LastLogon = DateTime.Now;
+ item1.LastLogoff = DateTime.Now;
+ items.Add(item1);
+
+ ExchangeItemStatistics item2 = new ExchangeItemStatistics();
+ item2.ItemName = "Jack Brown";
+ item2.TotalItems = 5;
+ item2.TotalSizeMB = 2;
+ item2.LastLogon = DateTime.Now;
+ item2.LastLogoff = DateTime.Now;
+ items.Add(item2);
+
+ ExchangeItemStatistics item3 = new ExchangeItemStatistics();
+ item3.ItemName = "Marry Smith";
+ item3.TotalItems = 1302;
+ item3.TotalSizeMB = 45;
+ item3.LastLogon = DateTime.Now;
+ item3.LastLogoff = DateTime.Now;
+ items.Add(item3);
+
+ return items.ToArray();
+ }
+ #endregion
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_MAILBOXES_STATS", itemId);
+
+ try
+ {
+ Organization org = (Organization)PackageController.GetPackageItem(itemId);
+ if (org == null)
+ return null;
+
+
+ // get stats
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ return exchange.GetMailboxesStatistics(org.DistinguishedName);
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static ExchangeMailboxStatistics GetMailboxStatistics(int itemId, int accountId)
+ {
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_MAILBOX_STATS", itemId);
+
+ try
+ {
+ Organization org = (Organization)PackageController.GetPackageItem(itemId);
+ if (org == null)
+ return null;
+
+
+ // get stats
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ return exchange.GetMailboxStatistics(account.UserPrincipalName);
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+
+ public static ExchangeItemStatistics[] GetPublicFoldersStatistics(int itemId)
+ {
+ #region Demo Mode
+ if (IsDemoMode)
+ {
+ List items = new List();
+ ExchangeItemStatistics item1 = new ExchangeItemStatistics();
+ item1.ItemName = "\\fabrikam\\Documents";
+ item1.TotalItems = 6;
+ item1.TotalSizeMB = 56;
+ item1.LastModificationTime = DateTime.Now;
+ item1.LastAccessTime = DateTime.Now;
+ items.Add(item1);
+
+ ExchangeItemStatistics item2 = new ExchangeItemStatistics();
+ item2.ItemName = "\\fabrikam\\Documents\\Legal";
+ item2.TotalItems = 5;
+ item2.TotalSizeMB = 4;
+ item2.LastModificationTime = DateTime.Now;
+ item2.LastAccessTime = DateTime.Now;
+ items.Add(item2);
+
+ ExchangeItemStatistics item3 = new ExchangeItemStatistics();
+ item3.ItemName = "\\fabrikam\\Documents\\Contracts";
+ item3.TotalItems = 8;
+ item3.TotalSizeMB = 2;
+ item3.LastModificationTime = DateTime.Now;
+ item3.LastAccessTime = DateTime.Now;
+ items.Add(item3);
+
+ return items.ToArray();
+ }
+ #endregion
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_FOLDERS_STATS", itemId);
+
+ try
+ {
+ Organization org = (Organization)PackageController.GetPackageItem(itemId);
+ if (org == null)
+ return null;
+
+ // get the list of all public folders
+ List folderNames = new List();
+ List folders = GetAccounts(itemId, ExchangeAccountType.PublicFolder);
+ foreach (ExchangeAccount folder in folders)
+ folderNames.Add(folder.DisplayName);
+
+ // get stats
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+ return exchange.GetPublicFoldersStatistics(org.OrganizationId, folderNames.ToArray());
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static ExchangeActiveSyncPolicy GetActiveSyncPolicy(int itemId)
+ {
+ #region Demo Mode
+ if (IsDemoMode)
+ {
+ ExchangeActiveSyncPolicy p = new ExchangeActiveSyncPolicy();
+ p.MaxAttachmentSizeKB = -1;
+ p.MaxPasswordFailedAttempts = -1;
+ p.MinPasswordLength = 0;
+ p.InactivityLockMin = -1;
+ p.PasswordExpirationDays = -1;
+ p.PasswordHistory = 0;
+ return p;
+ }
+ #endregion
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_ACTIVESYNC_POLICY", itemId);
+
+ try
+ {
+ Organization org = (Organization)PackageController.GetPackageItem(itemId);
+ if (org == null)
+ return null;
+
+ // get policy
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ //Create Exchange Organization
+ if (string.IsNullOrEmpty(org.GlobalAddressList))
+ {
+ ExtendToExchangeOrganization(ref org);
+
+ PackageController.UpdatePackageItem(org);
+ }
+ ExchangeActiveSyncPolicy policy = exchange.GetActiveSyncPolicy(org.OrganizationId);
+
+ // create policy if required
+ if (policy == null)
+ {
+ exchange.CreateOrganizationActiveSyncPolicy(org.OrganizationId);
+ return exchange.GetActiveSyncPolicy(org.OrganizationId);
+ }
+
+ return policy;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int SetActiveSyncPolicy(int itemId, bool allowNonProvisionableDevices,
+ bool attachmentsEnabled, int maxAttachmentSizeKB, bool uncAccessEnabled, bool wssAccessEnabled,
+ bool devicePasswordEnabled, bool alphanumericPasswordRequired, bool passwordRecoveryEnabled,
+ bool deviceEncryptionEnabled, bool allowSimplePassword, int maxPasswordFailedAttempts, int minPasswordLength,
+ int inactivityLockMin, int passwordExpirationDays, int passwordHistory, int refreshInterval)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "SET_ACTIVESYNC_POLICY", itemId);
+
+ try
+ {
+ Organization org = (Organization)PackageController.GetPackageItem(itemId);
+ if (org == null)
+ return 0;
+
+ // get policy
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+ exchange.SetActiveSyncPolicy(org.OrganizationId, allowNonProvisionableDevices, attachmentsEnabled,
+ maxAttachmentSizeKB, uncAccessEnabled, wssAccessEnabled, devicePasswordEnabled, alphanumericPasswordRequired,
+ passwordRecoveryEnabled, deviceEncryptionEnabled, allowSimplePassword, maxPasswordFailedAttempts,
+ minPasswordLength, inactivityLockMin, passwordExpirationDays, passwordHistory, refreshInterval);
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ private static void UpdateOrganization(Organization organization)
+ {
+ PackageController.UpdatePackageItem(organization);
+ }
+ #endregion
+
+ #region Accounts
+
+ private static bool AccountExists(string accountName)
+ {
+ return DataProvider.ExchangeAccountExists(accountName);
+ }
+
+ public static ExchangeAccountsPaged GetAccountsPaged(int itemId, string accountTypes,
+ string filterColumn, string filterValue, string sortColumn,
+ int startRow, int maximumRows)
+ {
+ #region Demo Mode
+ if (IsDemoMode)
+ {
+ string []parseedAccountTypes = Utils.ParseDelimitedString(accountTypes, ',');
+
+ ExchangeAccountsPaged res = new ExchangeAccountsPaged();
+ res.PageItems = GetAccounts(itemId, (ExchangeAccountType)Utils.ParseInt(parseedAccountTypes[0], 1)).ToArray();
+ res.RecordsCount = res.PageItems.Length;
+ return res;
+ }
+ #endregion
+
+ DataSet ds = DataProvider.GetExchangeAccountsPaged(SecurityContext.User.UserId, itemId,
+ accountTypes, filterColumn, filterValue, sortColumn, startRow, maximumRows);
+
+ ExchangeAccountsPaged result = new ExchangeAccountsPaged();
+ result.RecordsCount = (int)ds.Tables[0].Rows[0][0];
+
+ List accounts = new List();
+ ObjectUtils.FillCollectionFromDataView(accounts, ds.Tables[1].DefaultView);
+ result.PageItems = accounts.ToArray();
+ return result;
+ }
+
+ public static List GetAccounts(int itemId, ExchangeAccountType accountType)
+ {
+ #region Demo Mode
+ if (IsDemoMode)
+ {
+ if (accountType == ExchangeAccountType.Mailbox)
+ return SearchAccounts(0, true, false, false, true, true, "", "", "");
+ else if (accountType == ExchangeAccountType.Contact)
+ return SearchAccounts(0, false, true, false, false, false, "", "", "");
+ else if (accountType == ExchangeAccountType.DistributionList)
+ return SearchAccounts(0, false, false, true, false, false, "", "", "");
+ else
+ {
+ List demoAccounts = new List();
+ ExchangeAccount f1 = new ExchangeAccount();
+ f1.AccountId = 7;
+ f1.AccountName = "documents_fabrikam";
+ f1.AccountType = ExchangeAccountType.PublicFolder;
+ f1.DisplayName = "\\fabrikam\\Documents";
+ f1.PrimaryEmailAddress = "documents@fabrikam.net";
+ f1.MailEnabledPublicFolder = true;
+ demoAccounts.Add(f1);
+
+ ExchangeAccount f2 = new ExchangeAccount();
+ f2.AccountId = 8;
+ f2.AccountName = "documents_fabrikam";
+ f2.AccountType = ExchangeAccountType.PublicFolder;
+ f2.DisplayName = "\\fabrikam\\Documents\\Legal";
+ f2.PrimaryEmailAddress = "";
+ demoAccounts.Add(f2);
+
+ ExchangeAccount f3 = new ExchangeAccount();
+ f3.AccountId = 9;
+ f3.AccountName = "documents_fabrikam";
+ f3.AccountType = ExchangeAccountType.PublicFolder;
+ f3.DisplayName = "\\fabrikam\\Documents\\Contracts";
+ f3.PrimaryEmailAddress = "";
+ demoAccounts.Add(f3);
+ return demoAccounts;
+ }
+ }
+ #endregion
+
+ return ObjectUtils.CreateListFromDataReader(
+ DataProvider.GetExchangeAccounts(itemId, (int)accountType));
+ }
+
+
+ public static List GetExchangeAccountByMailboxPlanId(int itemId, int mailboxPlanId)
+ {
+ return ObjectUtils.CreateListFromDataReader(DataProvider.GetExchangeAccountByMailboxPlanId(itemId, mailboxPlanId));
+ }
+
+
+ public static List GetExchangeMailboxes(int itemId)
+ {
+ return ObjectUtils.CreateListFromDataReader(DataProvider.GetExchangeMailboxes(itemId));
+ }
+
+ public static List SearchAccounts(int itemId,
+ bool includeMailboxes, bool includeContacts, bool includeDistributionLists,
+ bool includeRooms, bool includeEquipment,
+ string filterColumn, string filterValue, string sortColumn)
+ {
+ #region Demo Mode
+ if (IsDemoMode)
+ {
+ List demoAccounts = new List();
+
+ if (includeMailboxes)
+ {
+ ExchangeAccount m1 = new ExchangeAccount();
+ m1.AccountId = 1;
+ m1.AccountName = "john_fabrikam";
+ m1.AccountType = ExchangeAccountType.Mailbox;
+ m1.DisplayName = "John Smith";
+ m1.PrimaryEmailAddress = "john@fabrikam.net";
+ demoAccounts.Add(m1);
+
+
+
+ ExchangeAccount m3 = new ExchangeAccount();
+ m3.AccountId = 3;
+ m3.AccountName = "marry_fabrikam";
+ m3.AccountType = ExchangeAccountType.Mailbox;
+ m3.DisplayName = "Marry Smith";
+ m3.PrimaryEmailAddress = "marry@fabrikam.net";
+ demoAccounts.Add(m3);
+ }
+
+ if (includeRooms)
+ {
+ ExchangeAccount r1 = new ExchangeAccount();
+ r1.AccountId = 20;
+ r1.AccountName = "room1_fabrikam";
+ r1.AccountType = ExchangeAccountType.Room;
+ r1.DisplayName = "Meeting Room 1";
+ r1.PrimaryEmailAddress = "room1@fabrikam.net";
+ demoAccounts.Add(r1);
+ }
+
+ if (includeEquipment)
+ {
+ ExchangeAccount e1 = new ExchangeAccount();
+ e1.AccountId = 21;
+ e1.AccountName = "projector_fabrikam";
+ e1.AccountType = ExchangeAccountType.Equipment;
+ e1.DisplayName = "Projector 1";
+ e1.PrimaryEmailAddress = "projector@fabrikam.net";
+ demoAccounts.Add(e1);
+ }
+
+ if (includeContacts)
+ {
+ ExchangeAccount c1 = new ExchangeAccount();
+ c1.AccountId = 4;
+ c1.AccountName = "pntr1_fabrikam";
+ c1.AccountType = ExchangeAccountType.Contact;
+ c1.DisplayName = "WebsitePanel Support";
+ c1.PrimaryEmailAddress = "support@websitepanel.net";
+ demoAccounts.Add(c1);
+
+ ExchangeAccount c2 = new ExchangeAccount();
+ c2.AccountId = 5;
+ c2.AccountName = "acc1_fabrikam";
+ c2.AccountType = ExchangeAccountType.Contact;
+ c2.DisplayName = "John Home Account";
+ c2.PrimaryEmailAddress = "john@yahoo.com";
+ demoAccounts.Add(c2);
+ }
+
+ if (includeDistributionLists)
+ {
+ ExchangeAccount d1 = new ExchangeAccount();
+ d1.AccountId = 6;
+ d1.AccountName = "sales_fabrikam";
+ d1.AccountType = ExchangeAccountType.DistributionList;
+ d1.DisplayName = "Fabrikam Sales Dept";
+ d1.PrimaryEmailAddress = "sales@fabrikam.net";
+ demoAccounts.Add(d1);
+ }
+
+ return demoAccounts;
+ }
+ #endregion
+
+ return ObjectUtils.CreateListFromDataReader(
+ DataProvider.SearchExchangeAccounts(SecurityContext.User.UserId, itemId, includeMailboxes, includeContacts,
+ includeDistributionLists, includeRooms, includeEquipment,
+ filterColumn, filterValue, sortColumn));
+ }
+
+
+
+ public static ExchangeAccount GetAccount(int itemId, int accountId)
+ {
+ #region Demo Mode
+ if (IsDemoMode)
+ {
+ ExchangeAccount m1 = new ExchangeAccount();
+ m1.AccountId = 1;
+ m1.AccountName = "john_fabrikam";
+ m1.AccountType = ExchangeAccountType.Mailbox;
+ m1.DisplayName = "John Smith";
+ m1.PrimaryEmailAddress = "john@fabrikam.net";
+ return m1;
+ }
+ #endregion
+
+ ExchangeAccount account = ObjectUtils.FillObjectFromDataReader(
+ DataProvider.GetExchangeAccount(itemId, accountId));
+
+ if (account == null)
+ return null;
+
+ // decrypt password
+ account.AccountPassword = CryptoUtils.Decrypt(account.AccountPassword);
+
+ return account;
+ }
+
+ public static bool CheckAccountCredentials(int itemId, string email, string password)
+ {
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "AUTHENTICATE", email, itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return false;
+
+ // check credentials
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+ return exchange.CheckAccountCredentials(email, password);
+ }
+ catch (Exception ex)
+ {
+ TaskManager.WriteError(ex);
+ return false;
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static ExchangeAccount SearchAccount(ExchangeAccountType accountType, string primaryEmailAddress)
+ {
+ ExchangeAccount account = ObjectUtils.FillObjectFromDataReader(
+ DataProvider.SearchExchangeAccount(SecurityContext.User.UserId,
+ (int)accountType, primaryEmailAddress));
+
+ if (account == null)
+ return null;
+
+ // decrypt password
+ account.AccountPassword = CryptoUtils.Decrypt(account.AccountPassword);
+
+ return account;
+ }
+
+ private static int AddAccount(int itemId, ExchangeAccountType accountType,
+ string accountName, string displayName, string primaryEmailAddress, bool mailEnabledPublicFolder,
+ MailboxManagerActions mailboxManagerActions, string samAccountName, string accountPassword, int mailboxPlanId, string subscriberNumber)
+ {
+ return DataProvider.AddExchangeAccount(itemId, (int)accountType,
+ accountName, displayName, primaryEmailAddress, mailEnabledPublicFolder,
+ mailboxManagerActions.ToString(), samAccountName, CryptoUtils.Encrypt(accountPassword), mailboxPlanId, (string.IsNullOrEmpty(subscriberNumber) ? null : subscriberNumber.Trim()));
+ }
+
+ private static void UpdateAccount(ExchangeAccount account)
+ {
+ DataProvider.UpdateExchangeAccount(account.AccountId, account.AccountName, account.AccountType, account.DisplayName,
+ account.PrimaryEmailAddress, account.MailEnabledPublicFolder,
+ account.MailboxManagerActions.ToString(), account.SamAccountName, account.AccountPassword, account.MailboxPlanId,
+ (string.IsNullOrEmpty(account.SubscriberNumber) ? null : account.SubscriberNumber.Trim()));
+ }
+
+ private static void DeleteAccount(int itemId, int accountId)
+ {
+ // try to get organization
+ if (GetOrganization(itemId) == null)
+ return;
+
+ DataProvider.DeleteExchangeAccount(itemId, accountId);
+ }
+
+ private static string BuildAccountName(string orgId, string name)
+ {
+ string accountName = name = name.Replace(" ", "");
+ int counter = 0;
+ bool bFound = false;
+
+ if (!AccountExists(accountName)) return accountName;
+
+ do
+ {
+ accountName = genSamLogin(name, counter.ToString("d5"));
+
+ if (!AccountExists(accountName)) bFound = true;
+
+ counter++;
+ }
+ while (!bFound);
+
+ return accountName;
+ }
+
+ private static string genSamLogin(string login, string strCounter)
+ {
+ int maxLogin = 20;
+ int fullLen = login.Length + strCounter.Length;
+ if (fullLen <= maxLogin)
+ return login + strCounter;
+ else
+ {
+ if (login.Length - (fullLen - maxLogin) > 0)
+ return login.Substring(0, login.Length - (fullLen - maxLogin)) + strCounter;
+ else return strCounter; // ????
+ }
+
+ }
+
+
+ #endregion
+
+ #region Account Email Addresses
+ private static bool EmailAddressExists(string emailAddress)
+ {
+ return DataProvider.ExchangeAccountEmailAddressExists(emailAddress);
+ }
+
+
+ private static ExchangeEmailAddress[] GetAccountEmailAddresses(int itemId, int accountId)
+ {
+ #region Demo Mode
+ if (IsDemoMode)
+ {
+ List demoEmails = new List();
+ ExchangeEmailAddress e1 = new ExchangeEmailAddress();
+ e1.EmailAddress = "john@fabrikam.net";
+ e1.IsPrimary = true;
+ demoEmails.Add(e1);
+
+ ExchangeEmailAddress e2 = new ExchangeEmailAddress();
+ e2.EmailAddress = "john.smith@fabrikam.net";
+ demoEmails.Add(e2);
+
+ ExchangeEmailAddress e3 = new ExchangeEmailAddress();
+ e3.EmailAddress = "john@fabrikam.hosted-exchange.com";
+ demoEmails.Add(e3);
+ return demoEmails.ToArray();
+ }
+ #endregion
+
+ List emails = ObjectUtils.CreateListFromDataReader(
+ DataProvider.GetExchangeAccountEmailAddresses(accountId));
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ foreach (ExchangeEmailAddress email in emails)
+ {
+ if (String.Compare(account.PrimaryEmailAddress, email.EmailAddress, true) == 0)
+ {
+ email.IsPrimary = true;
+ }
+
+ if (String.Compare(account.UserPrincipalName, email.EmailAddress, true) == 0)
+ {
+ email.IsUserPrincipalName = true;
+ }
+
+ }
+
+ return emails.ToArray();
+ }
+
+ private static void AddAccountEmailAddress(int accountId, string emailAddress)
+ {
+ DataProvider.AddExchangeAccountEmailAddress(accountId, emailAddress);
+ }
+
+ private static void DeleteAccountEmailAddresses(int accountId, string[] emailAddresses)
+ {
+ foreach (string emailAddress in emailAddresses)
+ DataProvider.DeleteExchangeAccountEmailAddress(accountId, emailAddress);
+ }
+
+ #endregion
+
+ #region Domains
+ public static List GetOrganizationDomains(int itemId)
+ {
+ #region Demo Mode
+ if (IsDemoMode)
+ {
+ List demoDomains = new List();
+ ExchangeDomainName d1 = new ExchangeDomainName();
+ d1.DomainId = 1;
+ d1.DomainName = "fabrikam.hosted-exchange.com";
+ d1.IsDefault = false;
+ d1.IsHost = true;
+ demoDomains.Add(d1);
+
+ ExchangeDomainName d2 = new ExchangeDomainName();
+ d2.DomainId = 2;
+ d2.DomainName = "fabrikam.net";
+ d2.IsDefault = true;
+ d2.IsHost = false;
+ demoDomains.Add(d2);
+
+ return demoDomains;
+ }
+ #endregion
+
+ // load organization
+ Organization org = (Organization)PackageController.GetPackageItem(itemId);
+ if (org == null)
+ return null;
+
+ // load all domains
+ List domains = ObjectUtils.CreateListFromDataReader(
+ DataProvider.GetExchangeOrganizationDomains(itemId));
+
+ // set default domain
+ foreach (ExchangeDomainName domain in domains)
+ {
+ if (String.Compare(domain.DomainName, org.DefaultDomain, true) == 0)
+ {
+ domain.IsDefault = true;
+ break;
+ }
+ }
+
+ return domains;
+ }
+
+ public static int AddAuthoritativeDomain(int itemId, int domainId)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "ADD_DOMAIN", itemId, new BackgroundTaskParameter("Domain ID", domainId));
+
+ try
+ {
+ // load organization
+ Organization org = (Organization)PackageController.GetPackageItem(itemId);
+ if (org == null)
+ return -1;
+
+ // load domain
+ DomainInfo domain = ServerController.GetDomain(domainId);
+ if (domain == null)
+ return -1;
+
+
+ // delete domain on Exchange
+ int[] hubTransportServiceIds;
+ int[] clientAccessServiceIds;
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ GetExchangeServices(exchangeServiceId, out hubTransportServiceIds, out clientAccessServiceIds);
+
+ foreach (int id in hubTransportServiceIds)
+ {
+ ExchangeServer hubTransportRole = null;
+ try
+ {
+ hubTransportRole = GetExchangeServer(id, org.ServiceId);
+ }
+ catch (Exception ex)
+ {
+ TaskManager.WriteError(ex);
+ continue;
+ }
+
+ string[] domains = hubTransportRole.GetAuthoritativeDomains();
+ if (domains != null)
+ Array.Sort(domains);
+
+ if (domains == null || Array.BinarySearch(domains, domain.DomainName) < 0)
+ hubTransportRole.AddAuthoritativeDomain(domain.DomainName);
+ break;
+ }
+
+ //Add the service records
+ if (domain != null)
+ {
+ if (domain.ZoneItemId != 0)
+ {
+ ServerController.AddServiceDNSRecords(org.PackageId, ResourceGroups.Exchange, domain, "");
+ }
+ }
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int ChangeAcceptedDomainType(int itemId, int domainId, ExchangeAcceptedDomainType domainType)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+
+ List parameters = new List();
+ parameters.Add(new BackgroundTaskParameter("Domain ID", domainId));
+ parameters.Add(new BackgroundTaskParameter("Domain Type", domainType.ToString()));
+
+ TaskManager.StartTask("EXCHANGE", "CHANGE_DOMAIN_TYPE", itemId, parameters);
+
+ try
+ {
+ // load organization
+ Organization org = (Organization)PackageController.GetPackageItem(itemId);
+ if (org == null)
+ return -1;
+
+ // load domain
+ DomainInfo domain = ServerController.GetDomain(domainId);
+ if (domain == null)
+ return -1;
+
+ int[] hubTransportServiceIds;
+ int[] clientAccessServiceIds;
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ GetExchangeServices(exchangeServiceId, out hubTransportServiceIds, out clientAccessServiceIds);
+
+ foreach (int id in hubTransportServiceIds)
+ {
+ ExchangeServer hubTransportRole = null;
+ try
+ {
+ hubTransportRole = GetExchangeServer(id, org.ServiceId);
+ }
+ catch (Exception ex)
+ {
+ TaskManager.WriteError(ex);
+ continue;
+ }
+
+ hubTransportRole.ChangeAcceptedDomainType(domain.DomainName, domainType);
+ break;
+
+ }
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int DeleteAuthoritativeDomain(int itemId, int domainId)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "DELETE_DOMAIN", itemId, new BackgroundTaskParameter("Domain ID", domainId));
+
+ try
+ {
+ // load organization
+ Organization org = (Organization)PackageController.GetPackageItem(itemId);
+ if (org == null)
+ return -1;
+
+ // load domain
+ DomainInfo domain = ServerController.GetDomain(domainId);
+ if(domain == null)
+ return -1;
+
+ if (DataProvider.CheckDomainUsedByHostedOrganization(domain.DomainName) == 1)
+ {
+ return -1;
+ }
+
+ // delete domain on Exchange
+ int[] hubTransportServiceIds;
+ int[] clientAccessServiceIds;
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ GetExchangeServices(exchangeServiceId, out hubTransportServiceIds, out clientAccessServiceIds);
+
+ foreach (int id in hubTransportServiceIds)
+ {
+ ExchangeServer hubTransportRole = null;
+ try
+ {
+ hubTransportRole = GetExchangeServer(id, org.ServiceId);
+ }
+ catch (Exception ex)
+ {
+ TaskManager.WriteError(ex);
+ continue;
+ }
+
+ hubTransportRole.DeleteAuthoritativeDomain(domain.DomainName);
+ break;
+
+ }
+
+ //Add the service records
+ if (domain != null)
+ {
+ if (domain.ZoneItemId != 0)
+ {
+ ServerController.RemoveServiceDNSRecords(org.PackageId, ResourceGroups.Exchange, domain, "", false);
+ }
+ }
+
+
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+
+ #endregion
+
+ #region Mailboxes
+
+ private static void UpdateExchangeAccount(int accountId, string accountName, ExchangeAccountType accountType,
+ string displayName, string primaryEmailAddress, bool mailEnabledPublicFolder,
+ string mailboxManagerActions, string samAccountName, string accountPassword, int mailboxPlanId, string subscriberNumber)
+ {
+ DataProvider.UpdateExchangeAccount(accountId,
+ accountName,
+ accountType,
+ displayName,
+ primaryEmailAddress,
+ mailEnabledPublicFolder,
+ mailboxManagerActions,
+ samAccountName,
+ CryptoUtils.Encrypt(accountPassword),
+ mailboxPlanId,
+ (string.IsNullOrEmpty(subscriberNumber) ? null : subscriberNumber.Trim()));
+ }
+
+
+ public static int CreateMailbox(int itemId, int accountId, ExchangeAccountType accountType, string accountName,
+ string displayName, string name, string domain, string password, bool sendSetupInstructions, string setupInstructionMailAddress, int mailboxPlanId, string subscriberNumber)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // check mailbox quota
+ OrganizationStatistics orgStats = GetOrganizationStatistics(itemId);
+ if ((orgStats.AllocatedMailboxes > -1) && (orgStats.CreatedMailboxes >= orgStats.AllocatedMailboxes))
+ return BusinessErrorCodes.ERROR_EXCHANGE_MAILBOXES_QUOTA_LIMIT;
+
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "CREATE_MAILBOX", itemId);
+
+ bool userCreated = false;
+ Organization org = null;
+ try
+ {
+ accountName = accountName.Trim();
+ displayName = displayName.Trim();
+ name = name.Trim();
+ domain = domain.Trim();
+
+
+ // load organization
+ org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // e-mail
+ string email = name + "@" + domain;
+ bool enabled = (accountType == ExchangeAccountType.Mailbox);
+
+
+ // string accountName = string.Empty;
+ //Create AD user if needed
+ if (accountId == 0)
+ {
+ accountId = OrganizationController.CreateUser(org.Id, displayName, name, domain, password, subscriberNumber, enabled, false, string.Empty, out accountName);
+ if (accountId > 0)
+ userCreated = true;
+ }
+ if (accountId < 0)
+ return accountId;
+
+ // get mailbox settings
+ Organizations orgProxy = OrganizationController.GetOrganizationProxy(org.ServiceId);
+ OrganizationUser retUser = orgProxy.GetUserGeneralSettings(accountName, org.OrganizationId);
+
+
+ int exchangeServiceId = PackageController.GetPackageServiceId(org.PackageId, ResourceGroups.Exchange);
+
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+
+ //Create Exchange Organization
+ if (string.IsNullOrEmpty(org.GlobalAddressList))
+ {
+ ExtendToExchangeOrganization(ref org);
+
+ PackageController.UpdatePackageItem(org);
+ }
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ //verify if the mailbox fits in the storage quota
+ // load package context
+ PackageContext cntx = PackageController.GetPackageContext(org.PackageId);
+
+ int maxDiskSpace = -1;
+ int quotaUsed = 0;
+ if (cntx.Quotas.ContainsKey(Quotas.EXCHANGE2007_DISKSPACE)
+ && cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue > 0)
+ {
+ maxDiskSpace = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue;
+ quotaUsed = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaUsedValue;
+ }
+
+ ExchangeMailboxPlan plan = GetExchangeMailboxPlan(itemId, mailboxPlanId);
+ if (maxDiskSpace != -1)
+ {
+ if (plan.MailboxSizeMB == -1)
+ return BusinessErrorCodes.ERROR_EXCHANGE_STORAGE_QUOTAS_EXCEED_HOST_VALUES;
+
+ if ((quotaUsed + plan.MailboxSizeMB) > (maxDiskSpace))
+ return BusinessErrorCodes.ERROR_EXCHANGE_STORAGE_QUOTAS_EXCEED_HOST_VALUES;
+ }
+
+ int maxRecoverableItemsSpace = -1;
+ int quotaRecoverableItemsUsed = 0;
+ if (cntx.Quotas.ContainsKey(Quotas.EXCHANGE2007_RECOVERABLEITEMSSPACE)
+ && cntx.Quotas[Quotas.EXCHANGE2007_RECOVERABLEITEMSSPACE].QuotaAllocatedValue > 0)
+ {
+ maxRecoverableItemsSpace = cntx.Quotas[Quotas.EXCHANGE2007_RECOVERABLEITEMSSPACE].QuotaAllocatedValue;
+ quotaRecoverableItemsUsed = cntx.Quotas[Quotas.EXCHANGE2007_RECOVERABLEITEMSSPACE].QuotaUsedValue;
+ }
+
+ if (maxRecoverableItemsSpace != -1)
+ {
+ if (plan.RecoverableItemsSpace == -1)
+ return BusinessErrorCodes.ERROR_EXCHANGE_STORAGE_QUOTAS_EXCEED_HOST_VALUES;
+
+ if ((quotaRecoverableItemsUsed + plan.RecoverableItemsSpace) > (maxRecoverableItemsSpace))
+ return BusinessErrorCodes.ERROR_EXCHANGE_STORAGE_QUOTAS_EXCEED_HOST_VALUES;
+ }
+
+
+ //GetServiceSettings
+ StringDictionary primSettings = ServerController.GetServiceSettings(exchangeServiceId);
+
+ string samAccount = exchange.CreateMailEnableUser(email, org.OrganizationId, org.DistinguishedName, accountType, primSettings["mailboxdatabase"],
+ org.OfflineAddressBook,
+ org.AddressBookPolicy,
+ retUser.SamAccountName,
+ plan.EnablePOP,
+ plan.EnableIMAP,
+ plan.EnableOWA,
+ plan.EnableMAPI,
+ plan.EnableActiveSync,
+ plan.MailboxSizeMB != -1 ? (((long)plan.IssueWarningPct * (long)plan.MailboxSizeMB * 1024) / 100) : -1,
+ plan.MailboxSizeMB != -1 ? (((long)plan.ProhibitSendPct * (long)plan.MailboxSizeMB * 1024) / 100) : -1,
+ plan.MailboxSizeMB != -1 ? (((long)plan.ProhibitSendReceivePct * (long)plan.MailboxSizeMB * 1024) / 100) : -1,
+ plan.KeepDeletedItemsDays,
+ plan.MaxRecipients,
+ plan.MaxSendMessageSizeKB,
+ plan.MaxReceiveMessageSizeKB,
+ plan.HideFromAddressBook,
+ Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_ISCONSUMER].QuotaAllocatedValue),
+ plan.AllowLitigationHold,
+ plan.RecoverableItemsSpace != -1 ? (plan.RecoverableItemsSpace * 1024) : -1,
+ plan.RecoverableItemsSpace != -1 ? (((long)plan.RecoverableItemsWarningPct * (long)plan.RecoverableItemsSpace * 1024) / 100) : -1);
+
+ MailboxManagerActions pmmActions = MailboxManagerActions.GeneralSettings
+ | MailboxManagerActions.MailFlowSettings
+ | MailboxManagerActions.AdvancedSettings
+ | MailboxManagerActions.EmailAddresses;
+
+
+ UpdateExchangeAccount(accountId, accountName, accountType, displayName, email, false, pmmActions.ToString(), samAccount, password, mailboxPlanId, subscriberNumber);
+
+
+
+ // send setup instructions
+ if (sendSetupInstructions)
+ {
+ try
+ {
+ // send setup instructions
+ int sendResult = SendMailboxSetupInstructions(itemId, accountId, true, setupInstructionMailAddress, null);
+ if (sendResult < 0)
+ TaskManager.WriteWarning("Setup instructions were not sent. Error code: " + sendResult);
+ }
+ catch (Exception ex)
+ {
+ TaskManager.WriteError(ex);
+ }
+ }
+
+ try
+ {
+ // update OAB
+ // check if this is the first mailbox within the organization
+ if (GetAccounts(itemId, ExchangeAccountType.Mailbox).Count == 1)
+ exchange.UpdateOrganizationOfflineAddressBook(org.OfflineAddressBook);
+ }
+ catch (Exception ex)
+ {
+ TaskManager.WriteError(ex);
+ }
+
+ return accountId;
+ }
+ catch (Exception ex)
+ {
+ //rollback AD user
+ if (userCreated)
+ {
+ try
+ {
+ OrganizationController.DeleteUser(org.Id, accountId);
+ }
+ catch (Exception rollbackException)
+ {
+ TaskManager.WriteError(rollbackException);
+ }
+ }
+ throw TaskManager.WriteError(ex);
+
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int DisableMailbox(int itemId, int accountId)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "DISABLE_MAILBOX", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ if (BlackBerryController.CheckBlackBerryUserExists(accountId))
+ {
+ BlackBerryController.DeleteBlackBerryUser(itemId, accountId);
+ }
+
+ // delete mailbox
+ int serviceExchangeId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(serviceExchangeId, org.ServiceId);
+ exchange.DisableMailbox(account.UserPrincipalName);
+
+ account.AccountType = ExchangeAccountType.User;
+ account.MailEnabledPublicFolder = false;
+ account.AccountPassword = null;
+ UpdateAccount(account);
+ DataProvider.DeleteUserEmailAddresses(account.AccountId, account.PrimaryEmailAddress);
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+
+ public static int DeleteMailbox(int itemId, int accountId)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "DELETE_MAILBOX", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ if (BlackBerryController.CheckBlackBerryUserExists(accountId))
+ {
+ BlackBerryController.DeleteBlackBerryUser(itemId, accountId);
+ }
+
+
+ // delete mailbox
+ int serviceExchangeId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(serviceExchangeId, org.ServiceId);
+ exchange.DeleteMailbox(account.UserPrincipalName);
+
+
+
+ // unregister account
+ DeleteAccount(itemId, accountId);
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ private static ExchangeMailbox GetDemoMailboxSettings()
+ {
+ ExchangeMailbox mb = new ExchangeMailbox();
+ mb.DisplayName = "John Smith";
+ mb.Domain = "HSTDEXCH1";
+ mb.AccountName = "john_fabrikam";
+ mb.EnableForwarding = true;
+ mb.EnableIMAP = true;
+ mb.EnableMAPI = true;
+ mb.EnablePOP = true;
+ mb.FirstName = "John";
+ mb.LastName = "Smith";
+ mb.ForwardingAccount = GetAccounts(0, ExchangeAccountType.Mailbox)[1];
+ mb.EnableForwarding = true;
+ mb.IssueWarningKB = 150000;
+ mb.KeepDeletedItemsDays = 14;
+ mb.LastLogoff = DateTime.Now;
+ mb.LastLogon = DateTime.Now;
+ mb.ManagerAccount = GetAccounts(0, ExchangeAccountType.Mailbox)[1];
+ mb.MaxReceiveMessageSizeKB = 20000;
+ mb.MaxRecipients = 30;
+ mb.MaxSendMessageSizeKB = 10000;
+ mb.ProhibitSendKB = 160000;
+ mb.ProhibitSendReceiveKB = 170000;
+ mb.TotalItems = 5;
+ mb.TotalSizeMB = 4;
+ return mb;
+ }
+
+ public static ExchangeMailbox GetMailboxGeneralSettings(int itemId, int accountId)
+ {
+ #region Demo Mode
+ if (IsDemoMode)
+ {
+ return GetDemoMailboxSettings();
+ }
+ #endregion
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_MAILBOX_GENERAL", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return null;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // get mailbox settings
+
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+ return exchange.GetMailboxGeneralSettings(account.UserPrincipalName);
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int SetMailboxGeneralSettings(int itemId, int accountId, bool hideAddressBook, bool disabled)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "UPDATE_MAILBOX_GENERAL", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // get mailbox settings
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+
+ PackageContext cntx = PackageController.GetPackageContext(org.PackageId);
+
+ if (Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_ISCONSUMER].QuotaAllocatedValue))
+ hideAddressBook = true;
+
+ exchange.SetMailboxGeneralSettings(
+ account.UserPrincipalName,
+ hideAddressBook,
+ disabled);
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static ExchangeEmailAddress[] GetMailboxEmailAddresses(int itemId, int accountId)
+ {
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_MAILBOX_ADDRESSES", itemId);
+
+ try
+ {
+ return GetAccountEmailAddresses(itemId, accountId);
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int AddMailboxEmailAddress(int itemId, int accountId, string emailAddress)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "ADD_MAILBOX_ADDRESS", itemId);
+
+ try
+ {
+ // check
+ if (EmailAddressExists(emailAddress))
+ return BusinessErrorCodes.ERROR_EXCHANGE_EMAIL_EXISTS;
+
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // add e-mail
+ AddAccountEmailAddress(accountId, emailAddress);
+
+ // update e-mail addresses
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ exchange.SetMailboxEmailAddresses(
+ account.UserPrincipalName,
+ GetAccountSimpleEmailAddresses(itemId, accountId));
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ private static OCSServer GetOCSProxy(int itemId)
+ {
+ Organization org = OrganizationController.GetOrganization(itemId);
+ int serviceId = PackageController.GetPackageServiceId(org.PackageId, ResourceGroups.OCS);
+
+ OCSServer ocs = new OCSServer();
+ ServiceProviderProxy.Init(ocs, serviceId);
+
+
+ return ocs;
+ }
+
+ public static int SetMailboxPrimaryEmailAddress(int itemId, int accountId, string emailAddress)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "SET_PRIMARY_MAILBOX_ADDRESS", itemId);
+
+ try
+ {
+ // get account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+ account.PrimaryEmailAddress = emailAddress;
+
+ // update exchange
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ exchange.SetMailboxPrimaryEmailAddress(
+ account.UserPrincipalName,
+ emailAddress);
+
+ if (DataProvider.CheckOCSUserExists(account.AccountId))
+ {
+ OCSServer ocs = GetOCSProxy(itemId);
+ string instanceId = DataProvider.GetOCSUserInstanceID(account.AccountId);
+ ocs.SetUserPrimaryUri(instanceId, emailAddress);
+ }
+
+ if (DataProvider.CheckLyncUserExists(account.AccountId))
+ {
+ LyncController.SetLyncUserGeneralSettings(itemId, accountId, emailAddress, null);
+ }
+
+ // save account
+ account.AccountPassword = null;
+ UpdateAccount(account);
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int DeleteMailboxEmailAddresses(int itemId, int accountId, string[] emailAddresses)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "DELETE_MAILBOX_ADDRESSES", itemId);
+
+ try
+ {
+ // get account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // delete e-mail addresses
+ List toDelete = new List();
+ foreach (string emailAddress in emailAddresses)
+ {
+ if ((String.Compare(account.PrimaryEmailAddress, emailAddress, true) != 0) &
+ (String.Compare(account.UserPrincipalName, emailAddress, true) != 0))
+ toDelete.Add(emailAddress);
+ }
+
+ // delete from meta-base
+ DeleteAccountEmailAddresses(accountId, toDelete.ToArray());
+
+ // delete from Exchange
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // update e-mail addresses
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ exchange.SetMailboxEmailAddresses(
+ account.UserPrincipalName,
+ GetAccountSimpleEmailAddresses(itemId, accountId));
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static ExchangeMailbox GetMailboxMailFlowSettings(int itemId, int accountId)
+ {
+ #region Demo Mode
+ if (IsDemoMode)
+ {
+ return GetDemoMailboxSettings();
+ }
+ #endregion
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_MAILBOX_MAILFLOW", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return null;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // get mailbox settings
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+ ExchangeMailbox mailbox = exchange.GetMailboxMailFlowSettings(account.UserPrincipalName);
+ mailbox.DisplayName = account.DisplayName;
+ return mailbox;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int SetMailboxMailFlowSettings(int itemId, int accountId,
+ bool enableForwarding, string forwardingAccountName, bool forwardToBoth,
+ string[] sendOnBehalfAccounts, string[] acceptAccounts, string[] rejectAccounts,
+ bool requireSenderAuthentication)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "UPDATE_MAILBOX_MAILFLOW", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // get mailbox settings
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ exchange.SetMailboxMailFlowSettings(account.UserPrincipalName,
+ enableForwarding,
+ forwardingAccountName,
+ forwardToBoth,
+ sendOnBehalfAccounts,
+ acceptAccounts,
+ rejectAccounts,
+ requireSenderAuthentication);
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+
+ public static ExchangeMailbox GetMailboxAdvancedSettings(int itemId, int accountId)
+ {
+ #region Demo Mode
+ if (IsDemoMode)
+ {
+ return GetDemoMailboxSettings();
+ }
+ #endregion
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_MAILBOX_ADVANCED", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return null;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // get mailbox settings
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+ ExchangeMailbox mailbox = exchange.GetMailboxAdvancedSettings(account.UserPrincipalName);
+ mailbox.DisplayName = account.DisplayName;
+ return mailbox;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int SetMailboxManagerSettings(int itemId, int accountId, bool pmmAllowed, MailboxManagerActions action)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "UPDATE_MAILBOX_GENERAL", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // PMM settings
+ if (pmmAllowed) account.MailboxManagerActions |= action;
+ else account.MailboxManagerActions &= ~action;
+
+ // update account
+ account.AccountPassword = null;
+ UpdateAccount(account);
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static string GetMailboxSetupInstructions(int itemId, int accountId, bool pmm, bool emailMode, bool signup)
+ {
+ #region Demo Mode
+ if (IsDemoMode)
+ {
+ return string.Empty;
+ }
+ #endregion
+
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return null;
+
+ // load user info
+ UserInfo user = PackageController.GetPackageOwner(org.PackageId);
+
+ // get letter settings
+ UserSettings settings = UserController.GetUserSettings(user.UserId, UserSettings.EXCHANGE_MAILBOX_SETUP_LETTER);
+
+ string settingName = user.HtmlMail ? "HtmlBody" : "TextBody";
+ string body = settings[settingName];
+ if (String.IsNullOrEmpty(body))
+ return null;
+
+ string result = EvaluateMailboxTemplate(itemId, accountId, pmm, false, false, body);
+ return user.HtmlMail ? result : result.Replace("\n", "
");
+ }
+
+ private static string EvaluateMailboxTemplate(int itemId, int accountId,
+ bool pmm, bool emailMode, bool signup, string template)
+ {
+ Hashtable items = new Hashtable();
+
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return null;
+
+ // add organization
+ items["Organization"] = org;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+ if (account == null)
+ return null;
+
+ // add account
+ items["Account"] = account;
+ items["AccountDomain"] = account.PrimaryEmailAddress.Substring(account.PrimaryEmailAddress.IndexOf("@") + 1);
+ items["DefaultDomain"] = org.DefaultDomain;
+
+ if (!String.IsNullOrEmpty(account.SamAccountName))
+ {
+ int idx = account.SamAccountName.IndexOf("\\");
+ items["SamDomain"] = account.SamAccountName.Substring(0, idx);
+ items["SamUsername"] = account.SamAccountName.Substring(idx + 1);
+ }
+
+ // name servers
+ PackageSettings packageSettings = PackageController.GetPackageSettings(org.PackageId, PackageSettings.NAME_SERVERS);
+ string[] nameServers = new string[] { };
+ if (!String.IsNullOrEmpty(packageSettings["NameServers"]))
+ nameServers = packageSettings["NameServers"].Split(';');
+
+ items["NameServers"] = nameServers;
+
+ // service settings
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ StringDictionary exchangeSettings = ServerController.GetServiceSettings(exchangeServiceId);
+ if (exchangeSettings != null)
+ {
+ items["TempDomain"] = exchangeSettings["TempDomain"];
+ items["AutodiscoverIP"] = exchangeSettings["AutodiscoverIP"];
+ items["AutodiscoverDomain"] = exchangeSettings["AutodiscoverDomain"];
+ items["OwaUrl"] = exchangeSettings["OwaUrl"];
+ items["ActiveSyncServer"] = exchangeSettings["ActiveSyncServer"];
+ items["SmtpServers"] = Utils.ParseDelimitedString(exchangeSettings["SmtpServers"], '\n');
+ }
+
+ items["Email"] = emailMode;
+ items["Signup"] = signup;
+ items["PMM"] = pmm;
+
+ // evaluate template
+ return PackageController.EvaluateTemplate(template, items);
+ }
+
+ public static int SendMailboxSetupInstructions(int itemId, int accountId, bool signup, string to, string cc)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo);
+ if (accountCheck < 0) return accountCheck;
+
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // load user info
+ UserInfo user = PackageController.GetPackageOwner(org.PackageId);
+
+ // get letter settings
+ UserSettings settings = UserController.GetUserSettings(user.UserId, UserSettings.EXCHANGE_MAILBOX_SETUP_LETTER);
+
+ string from = settings["From"];
+ if (cc == null)
+ cc = settings["CC"];
+ string subject = settings["Subject"];
+ string body = user.HtmlMail ? settings["HtmlBody"] : settings["TextBody"];
+ bool isHtml = user.HtmlMail;
+
+ MailPriority priority = MailPriority.Normal;
+ if (!String.IsNullOrEmpty(settings["Priority"]))
+ priority = (MailPriority)Enum.Parse(typeof(MailPriority), settings["Priority"], true);
+
+ if (String.IsNullOrEmpty(body))
+ return 0;// BusinessErrorCodes.ERROR_SETTINGS_ACCOUNT_LETTER_EMPTY_BODY;
+
+ // load user info
+ if (to == null)
+ to = user.Email;
+
+ subject = EvaluateMailboxTemplate(itemId, accountId, false, true, signup, subject);
+ body = EvaluateMailboxTemplate(itemId, accountId, false, true, signup, body);
+
+ // send message
+ return MailHelper.SendMessage(from, to, cc, subject, body, priority, isHtml);
+ }
+
+
+ public static ExchangeMailbox GetMailboxPermissions(int itemId, int accountId)
+ {
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_MAILBOX_PERMISSIONS", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return null;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // get mailbox settings
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+ ExchangeMailbox mailbox = exchange.GetMailboxPermissions(org.OrganizationId, account.UserPrincipalName);
+ mailbox.DisplayName = account.DisplayName;
+ return mailbox;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int SetMailboxPermissions(int itemId, int accountId, string[] sendAsaccounts, string[] fullAccessAcounts)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "SET_MAILBOX_PERMISSIONS", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // get mailbox settings
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ exchange.SetMailboxPermissions(org.OrganizationId, account.UserPrincipalName, sendAsaccounts, fullAccessAcounts);
+
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+
+ }
+
+
+ #endregion
+
+
+ #region Mailbox plan
+ public static int SetExchangeMailboxPlan(int itemId, int accountId, int mailboxPlanId)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "SET_MAILBOXPLAN", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // load package context
+ PackageContext cntx = PackageController.GetPackageContext(org.PackageId);
+
+ int maxDiskSpace = -1;
+ int quotaUsed = 0;
+ if (cntx.Quotas.ContainsKey(Quotas.EXCHANGE2007_DISKSPACE)
+ && cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue > 0)
+ {
+ maxDiskSpace = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue;
+ quotaUsed = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaUsedValue;
+ }
+
+ ExchangeMailboxPlan plan = GetExchangeMailboxPlan(itemId, mailboxPlanId);
+
+ if (maxDiskSpace != -1)
+ {
+ if (plan.MailboxSizeMB == -1)
+ return BusinessErrorCodes.ERROR_EXCHANGE_STORAGE_QUOTAS_EXCEED_HOST_VALUES;
+
+ ExchangeAccount exchangeAccount = GetAccount(itemId, accountId);
+ if (exchangeAccount.MailboxPlanId > 0)
+ {
+ ExchangeMailboxPlan oldPlan = GetExchangeMailboxPlan(itemId, exchangeAccount.MailboxPlanId);
+
+ if (((quotaUsed - oldPlan.MailboxSizeMB) + plan.MailboxSizeMB) > (maxDiskSpace))
+ return BusinessErrorCodes.ERROR_EXCHANGE_STORAGE_QUOTAS_EXCEED_HOST_VALUES;
+ }
+ else
+ {
+ if ((quotaUsed + plan.MailboxSizeMB) > (maxDiskSpace))
+ return BusinessErrorCodes.ERROR_EXCHANGE_STORAGE_QUOTAS_EXCEED_HOST_VALUES;
+ }
+ }
+
+ int maxRecoverableItemsSpace = -1;
+ int quotaRecoverableItemsUsed = 0;
+ if (cntx.Quotas.ContainsKey(Quotas.EXCHANGE2007_RECOVERABLEITEMSSPACE)
+ && cntx.Quotas[Quotas.EXCHANGE2007_RECOVERABLEITEMSSPACE].QuotaAllocatedValue > 0)
+ {
+ maxRecoverableItemsSpace = cntx.Quotas[Quotas.EXCHANGE2007_RECOVERABLEITEMSSPACE].QuotaAllocatedValue;
+ quotaRecoverableItemsUsed = cntx.Quotas[Quotas.EXCHANGE2007_RECOVERABLEITEMSSPACE].QuotaUsedValue;
+ }
+
+ if (maxRecoverableItemsSpace != -1)
+ {
+ if (plan.RecoverableItemsSpace == -1)
+ return BusinessErrorCodes.ERROR_EXCHANGE_STORAGE_QUOTAS_EXCEED_HOST_VALUES;
+
+ if ((quotaRecoverableItemsUsed + plan.RecoverableItemsSpace) > (maxRecoverableItemsSpace))
+ return BusinessErrorCodes.ERROR_EXCHANGE_STORAGE_QUOTAS_EXCEED_HOST_VALUES;
+ }
+
+ // get mailbox settings
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ exchange.SetMailboxAdvancedSettings(
+ org.OrganizationId,
+ account.UserPrincipalName,
+ plan.EnablePOP,
+ plan.EnableIMAP,
+ plan.EnableOWA,
+ plan.EnableMAPI,
+ plan.EnableActiveSync,
+ plan.MailboxSizeMB != -1 ? (((long)plan.IssueWarningPct * (long)plan.MailboxSizeMB * 1024) / 100) : -1,
+ plan.MailboxSizeMB != -1 ? (((long)plan.ProhibitSendPct * (long)plan.MailboxSizeMB * 1024) / 100) : -1,
+ plan.MailboxSizeMB != -1 ? (((long)plan.ProhibitSendReceivePct * (long)plan.MailboxSizeMB * 1024) / 100) : -1,
+ plan.KeepDeletedItemsDays,
+ plan.MaxRecipients,
+ plan.MaxSendMessageSizeKB,
+ plan.MaxReceiveMessageSizeKB,
+ plan.AllowLitigationHold,
+ plan.RecoverableItemsSpace != -1 ? (plan.RecoverableItemsSpace * 1024) : -1,
+ plan.RecoverableItemsSpace != -1 ? (((long)plan.RecoverableItemsWarningPct * (long)plan.RecoverableItemsSpace * 1024) / 100) : -1,
+ plan.LitigationHoldUrl,
+ plan.LitigationHoldMsg);
+
+ DataProvider.SetExchangeAccountMailboxPlan(accountId, mailboxPlanId);
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static List GetExchangeMailboxPlans(int itemId)
+ {
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_EXCHANGE_MAILBOXPLANS", itemId);
+
+ try
+ {
+ List mailboxPlans = new List();
+
+ UserInfo user = ObjectUtils.FillObjectFromDataReader(DataProvider.GetUserByExchangeOrganizationIdInternally(itemId));
+
+ if (user.Role == UserRole.User)
+ ExchangeServerController.GetExchangeMailboxPlansByUser(itemId, user, ref mailboxPlans);
+ else
+ ExchangeServerController.GetExchangeMailboxPlansByUser(0, user, ref mailboxPlans);
+
+
+ ExchangeOrganization ExchangeOrg = ObjectUtils.FillObjectFromDataReader(DataProvider.GetExchangeOrganization(itemId));
+
+ if (ExchangeOrg != null)
+ {
+ foreach (ExchangeMailboxPlan p in mailboxPlans)
+ {
+ p.IsDefault = (p.MailboxPlanId == ExchangeOrg.ExchangeMailboxPlanID);
+ }
+ }
+
+ return mailboxPlans;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ private static void GetExchangeMailboxPlansByUser(int itemId, UserInfo user, ref ListmailboxPlans)
+ {
+ if ((user != null))
+ {
+ List orgs = null;
+
+ if (user.UserId != 1)
+ {
+ List Packages = PackageController.GetPackages(user.UserId);
+
+ if ((Packages != null) & (Packages.Count > 0))
+ {
+ orgs = GetExchangeOrganizationsInternal(Packages[0].PackageId, false);
+ }
+ }
+ else
+ {
+ orgs = GetExchangeOrganizationsInternal(1, false);
+ }
+
+ int OrgId = -1;
+ if (itemId > 0) OrgId = itemId;
+ else if ((orgs != null) & (orgs.Count > 0)) OrgId = orgs[0].Id;
+
+
+ if (OrgId != -1)
+ {
+ List Plans = ObjectUtils.CreateListFromDataReader(DataProvider.GetExchangeMailboxPlans(OrgId));
+
+ foreach (ExchangeMailboxPlan p in Plans)
+ {
+ mailboxPlans.Add(p);
+ }
+ }
+
+ UserInfo owner = UserController.GetUserInternally(user.OwnerId);
+
+ GetExchangeMailboxPlansByUser(0, owner, ref mailboxPlans);
+ }
+ }
+
+
+ public static ExchangeMailboxPlan GetExchangeMailboxPlan(int itemID, int mailboxPlanId)
+ {
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_EXCHANGE_MAILBOXPLAN", mailboxPlanId);
+
+ try
+ {
+ return ObjectUtils.FillObjectFromDataReader(
+ DataProvider.GetExchangeMailboxPlan(mailboxPlanId));
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int AddExchangeMailboxPlan(int itemID, ExchangeMailboxPlan mailboxPlan)
+ {
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "ADD_EXCHANGE_MAILBOXPLAN", itemID);
+
+ try
+ {
+ Organization org = GetOrganization(itemID);
+ if (org == null)
+ return -1;
+
+ // load package context
+ PackageContext cntx = PackageController.GetPackageContext(org.PackageId);
+
+ if (org.PackageId > 1)
+ {
+ mailboxPlan.EnableActiveSync = mailboxPlan.EnableActiveSync & Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_ACTIVESYNCALLOWED].QuotaAllocatedValue);
+ mailboxPlan.EnableIMAP = mailboxPlan.EnableIMAP & Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_IMAPALLOWED].QuotaAllocatedValue);
+ mailboxPlan.EnableMAPI = mailboxPlan.EnableMAPI & Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_MAPIALLOWED].QuotaAllocatedValue);
+ mailboxPlan.EnableOWA = mailboxPlan.EnableOWA & Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_OWAALLOWED].QuotaAllocatedValue);
+ mailboxPlan.EnablePOP = mailboxPlan.EnablePOP & Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_POP3ALLOWED].QuotaAllocatedValue);
+
+ if (cntx.Quotas[Quotas.EXCHANGE2007_KEEPDELETEDITEMSDAYS].QuotaAllocatedValue != -1)
+ if (mailboxPlan.KeepDeletedItemsDays > cntx.Quotas[Quotas.EXCHANGE2007_KEEPDELETEDITEMSDAYS].QuotaAllocatedValue)
+ mailboxPlan.KeepDeletedItemsDays = cntx.Quotas[Quotas.EXCHANGE2007_KEEPDELETEDITEMSDAYS].QuotaAllocatedValue;
+
+ if (cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue != -1)
+ if (mailboxPlan.MailboxSizeMB > cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue)
+ mailboxPlan.MailboxSizeMB = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue;
+
+ if (cntx.Quotas[Quotas.EXCHANGE2007_MAXRECEIVEMESSAGESIZEKB].QuotaAllocatedValue != -1)
+ if (mailboxPlan.MaxReceiveMessageSizeKB > cntx.Quotas[Quotas.EXCHANGE2007_MAXRECEIVEMESSAGESIZEKB].QuotaAllocatedValue)
+ mailboxPlan.MaxReceiveMessageSizeKB = cntx.Quotas[Quotas.EXCHANGE2007_MAXRECEIVEMESSAGESIZEKB].QuotaAllocatedValue;
+
+ if (cntx.Quotas[Quotas.EXCHANGE2007_MAXSENDMESSAGESIZEKB].QuotaAllocatedValue != -1)
+ if (mailboxPlan.MaxSendMessageSizeKB > cntx.Quotas[Quotas.EXCHANGE2007_MAXSENDMESSAGESIZEKB].QuotaAllocatedValue)
+ mailboxPlan.MaxSendMessageSizeKB = cntx.Quotas[Quotas.EXCHANGE2007_MAXSENDMESSAGESIZEKB].QuotaAllocatedValue;
+
+ if (cntx.Quotas[Quotas.EXCHANGE2007_MAXRECIPIENTS].QuotaAllocatedValue != -1)
+ if (mailboxPlan.MaxRecipients > cntx.Quotas[Quotas.EXCHANGE2007_MAXRECIPIENTS].QuotaAllocatedValue)
+ mailboxPlan.MaxRecipients = cntx.Quotas[Quotas.EXCHANGE2007_MAXRECIPIENTS].QuotaAllocatedValue;
+
+ if (Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_ISCONSUMER].QuotaAllocatedValue)) mailboxPlan.HideFromAddressBook = true;
+
+ mailboxPlan.AllowLitigationHold = mailboxPlan.AllowLitigationHold & Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_ALLOWLITIGATIONHOLD].QuotaAllocatedValue);
+
+ if (cntx.Quotas[Quotas.EXCHANGE2007_RECOVERABLEITEMSSPACE].QuotaAllocatedValue != -1)
+ if (mailboxPlan.RecoverableItemsSpace > cntx.Quotas[Quotas.EXCHANGE2007_RECOVERABLEITEMSSPACE].QuotaAllocatedValue)
+ mailboxPlan.RecoverableItemsSpace = cntx.Quotas[Quotas.EXCHANGE2007_RECOVERABLEITEMSSPACE].QuotaAllocatedValue;
+ }
+
+ return DataProvider.AddExchangeMailboxPlan(itemID, mailboxPlan.MailboxPlan, mailboxPlan.EnableActiveSync, mailboxPlan.EnableIMAP, mailboxPlan.EnableMAPI, mailboxPlan.EnableOWA, mailboxPlan.EnablePOP,
+ mailboxPlan.IsDefault, mailboxPlan.IssueWarningPct, mailboxPlan.KeepDeletedItemsDays, mailboxPlan.MailboxSizeMB, mailboxPlan.MaxReceiveMessageSizeKB, mailboxPlan.MaxRecipients,
+ mailboxPlan.MaxSendMessageSizeKB, mailboxPlan.ProhibitSendPct, mailboxPlan.ProhibitSendReceivePct, mailboxPlan.HideFromAddressBook, mailboxPlan.MailboxPlanType,
+ mailboxPlan.AllowLitigationHold, mailboxPlan.RecoverableItemsSpace, mailboxPlan.RecoverableItemsWarningPct,
+ mailboxPlan.LitigationHoldUrl, mailboxPlan.LitigationHoldMsg);
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+
+ }
+
+
+ public static int UpdateExchangeMailboxPlan(int itemID, ExchangeMailboxPlan mailboxPlan)
+ {
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "UPDATE_EXCHANGE_MAILBOXPLAN", itemID);
+
+ try
+ {
+ Organization org = GetOrganization(itemID);
+ if (org == null)
+ return -1;
+
+ // load package context
+ PackageContext cntx = PackageController.GetPackageContext(org.PackageId);
+
+ if (org.PackageId > 1)
+ {
+ mailboxPlan.EnableActiveSync = mailboxPlan.EnableActiveSync & Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_ACTIVESYNCALLOWED].QuotaAllocatedValue);
+ mailboxPlan.EnableIMAP = mailboxPlan.EnableIMAP & Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_IMAPALLOWED].QuotaAllocatedValue);
+ mailboxPlan.EnableMAPI = mailboxPlan.EnableMAPI & Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_MAPIALLOWED].QuotaAllocatedValue);
+ mailboxPlan.EnableOWA = mailboxPlan.EnableOWA & Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_OWAALLOWED].QuotaAllocatedValue);
+ mailboxPlan.EnablePOP = mailboxPlan.EnablePOP & Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_POP3ALLOWED].QuotaAllocatedValue);
+
+ if (cntx.Quotas[Quotas.EXCHANGE2007_KEEPDELETEDITEMSDAYS].QuotaAllocatedValue != -1)
+ if (mailboxPlan.KeepDeletedItemsDays > cntx.Quotas[Quotas.EXCHANGE2007_KEEPDELETEDITEMSDAYS].QuotaAllocatedValue)
+ mailboxPlan.KeepDeletedItemsDays = cntx.Quotas[Quotas.EXCHANGE2007_KEEPDELETEDITEMSDAYS].QuotaAllocatedValue;
+
+ if (cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue != -1)
+ if (mailboxPlan.MailboxSizeMB > cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue)
+ mailboxPlan.MailboxSizeMB = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue;
+
+ if (cntx.Quotas[Quotas.EXCHANGE2007_MAXRECEIVEMESSAGESIZEKB].QuotaAllocatedValue != -1)
+ if (mailboxPlan.MaxReceiveMessageSizeKB > cntx.Quotas[Quotas.EXCHANGE2007_MAXRECEIVEMESSAGESIZEKB].QuotaAllocatedValue)
+ mailboxPlan.MaxReceiveMessageSizeKB = cntx.Quotas[Quotas.EXCHANGE2007_MAXRECEIVEMESSAGESIZEKB].QuotaAllocatedValue;
+
+ if (cntx.Quotas[Quotas.EXCHANGE2007_MAXSENDMESSAGESIZEKB].QuotaAllocatedValue != -1)
+ if (mailboxPlan.MaxSendMessageSizeKB > cntx.Quotas[Quotas.EXCHANGE2007_MAXSENDMESSAGESIZEKB].QuotaAllocatedValue)
+ mailboxPlan.MaxSendMessageSizeKB = cntx.Quotas[Quotas.EXCHANGE2007_MAXSENDMESSAGESIZEKB].QuotaAllocatedValue;
+
+ if (cntx.Quotas[Quotas.EXCHANGE2007_MAXRECIPIENTS].QuotaAllocatedValue != -1)
+ if (mailboxPlan.MaxRecipients > cntx.Quotas[Quotas.EXCHANGE2007_MAXRECIPIENTS].QuotaAllocatedValue)
+ mailboxPlan.MaxRecipients = cntx.Quotas[Quotas.EXCHANGE2007_MAXRECIPIENTS].QuotaAllocatedValue;
+
+ if (Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_ISCONSUMER].QuotaAllocatedValue)) mailboxPlan.HideFromAddressBook = true;
+
+ mailboxPlan.AllowLitigationHold = mailboxPlan.AllowLitigationHold & Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_ALLOWLITIGATIONHOLD].QuotaAllocatedValue);
+
+ if (cntx.Quotas[Quotas.EXCHANGE2007_RECOVERABLEITEMSSPACE].QuotaAllocatedValue != -1)
+ if (mailboxPlan.RecoverableItemsSpace > cntx.Quotas[Quotas.EXCHANGE2007_RECOVERABLEITEMSSPACE].QuotaAllocatedValue)
+ mailboxPlan.RecoverableItemsSpace = cntx.Quotas[Quotas.EXCHANGE2007_RECOVERABLEITEMSSPACE].QuotaAllocatedValue;
+
+ }
+
+ DataProvider.UpdateExchangeMailboxPlan(mailboxPlan.MailboxPlanId, mailboxPlan.MailboxPlan, mailboxPlan.EnableActiveSync, mailboxPlan.EnableIMAP, mailboxPlan.EnableMAPI, mailboxPlan.EnableOWA, mailboxPlan.EnablePOP,
+ mailboxPlan.IsDefault, mailboxPlan.IssueWarningPct, mailboxPlan.KeepDeletedItemsDays, mailboxPlan.MailboxSizeMB, mailboxPlan.MaxReceiveMessageSizeKB, mailboxPlan.MaxRecipients,
+ mailboxPlan.MaxSendMessageSizeKB, mailboxPlan.ProhibitSendPct, mailboxPlan.ProhibitSendReceivePct, mailboxPlan.HideFromAddressBook, mailboxPlan.MailboxPlanType,
+ mailboxPlan.AllowLitigationHold, mailboxPlan.RecoverableItemsSpace, mailboxPlan.RecoverableItemsWarningPct,
+ mailboxPlan.LitigationHoldUrl, mailboxPlan.LitigationHoldMsg);
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+
+
+ return 0;
+ }
+
+
+
+ public static int DeleteExchangeMailboxPlan(int itemID, int mailboxPlanId)
+ {
+ TaskManager.StartTask("EXCHANGE", "DELETE_EXCHANGE_MAILBOXPLAN", itemID);
+
+ try
+ {
+ DataProvider.DeleteExchangeMailboxPlan(mailboxPlanId);
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+
+ }
+
+ public static void SetOrganizationDefaultExchangeMailboxPlan(int itemId, int mailboxPlanId)
+ {
+ TaskManager.StartTask("EXCHANGE", "SET_EXCHANGE_MAILBOXPLAN", itemId);
+
+ try
+ {
+ DataProvider.SetOrganizationDefaultExchangeMailboxPlan(itemId, mailboxPlanId);
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+
+ }
+
+
+
+ #endregion
+
+
+ #region Contacts
+ public static int CreateContact(int itemId, string displayName, string email)
+ {
+ //if (EmailAddressExists(email))
+ // return BusinessErrorCodes.ERROR_EXCHANGE_EMAIL_EXISTS;
+
+
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // check mailbox quota
+ OrganizationStatistics orgStats = GetOrganizationStatistics(itemId);
+ if (orgStats.AllocatedContacts > -1
+ && orgStats.CreatedContacts >= orgStats.AllocatedContacts)
+ return BusinessErrorCodes.ERROR_EXCHANGE_CONTACTS_QUOTA_LIMIT;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "CREATE_CONTACT", itemId);
+
+ try
+ {
+
+ displayName = displayName.Trim();
+ email = email.Trim();
+
+ // load organization
+ Organization org = GetOrganization(itemId);
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ string name = email;
+ int idx = email.IndexOf("@");
+ if (idx > -1)
+ name = email.Substring(0, idx);
+
+ string accountName = BuildAccountName(org.OrganizationId, name);
+
+ // add contact
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ //Create Exchange Organization
+ if (string.IsNullOrEmpty(org.GlobalAddressList))
+ {
+ ExtendToExchangeOrganization(ref org);
+
+ PackageController.UpdatePackageItem(org);
+ }
+
+ exchange.CreateContact(
+ org.OrganizationId,
+ org.DistinguishedName,
+ displayName,
+ accountName,
+ email, org.DefaultDomain);
+
+ ExchangeContact contact = exchange.GetContactGeneralSettings(accountName);
+
+ // add meta-item
+ int accountId = AddAccount(itemId, ExchangeAccountType.Contact, accountName,
+ displayName, email, false,
+ 0, contact.SAMAccountName, null, 0, null);
+
+ return accountId;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int DeleteContact(int itemId, int accountId)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "DELETE_CONTACT", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // delete contact
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ exchange.DeleteContact(account.AccountName);
+
+ // remove meta-item
+ DeleteAccount(itemId, accountId);
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ private static ExchangeContact GetDemoContactSettings()
+ {
+ ExchangeContact c = new ExchangeContact();
+ c.DisplayName = "WebsitePanel Support";
+ c.AccountName = "wsp_fabrikam";
+ c.FirstName = "WebsitePanel";
+ c.LastName = "Support";
+ c.EmailAddress = "support@websitepanel.net";
+ c.AcceptAccounts = GetAccounts(0, ExchangeAccountType.Mailbox).ToArray();
+ return c;
+ }
+
+ public static ExchangeContact GetContactGeneralSettings(int itemId, int accountId)
+ {
+ #region Demo Mode
+ if (IsDemoMode)
+ {
+ return GetDemoContactSettings();
+ }
+ #endregion
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_CONTACT_GENERAL", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return null;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // get mailbox settings
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ return exchange.GetContactGeneralSettings(account.AccountName);
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int SetContactGeneralSettings(int itemId, int accountId, string displayName, string emailAddress,
+ bool hideAddressBook, string firstName, string initials,
+ string lastName, string address, string city, string state, string zip, string country,
+ string jobTitle, string company, string department, string office, string managerAccountName,
+ string businessPhone, string fax, string homePhone, string mobilePhone, string pager,
+ string webPage, string notes, int useMapiRichTextFormat)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "UPDATE_CONTACT_GENERAL", itemId);
+
+ try
+ {
+ displayName = displayName.Trim();
+ emailAddress = emailAddress.Trim();
+ firstName = firstName.Trim();
+ lastName = lastName.Trim();
+
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // get mailbox settings
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ exchange.SetContactGeneralSettings(
+ account.AccountName,
+ displayName,
+ emailAddress,
+ hideAddressBook,
+ firstName,
+ initials,
+ lastName,
+ address,
+ city,
+ state,
+ zip,
+ country,
+ jobTitle,
+ company,
+ department,
+ office,
+ managerAccountName,
+ businessPhone,
+ fax,
+ homePhone,
+ mobilePhone,
+ pager,
+ webPage,
+ notes,
+ useMapiRichTextFormat, org.DefaultDomain);
+
+ // update account
+ account.DisplayName = displayName;
+ account.PrimaryEmailAddress = emailAddress;
+ account.AccountPassword = null;
+ UpdateAccount(account);
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static ExchangeContact GetContactMailFlowSettings(int itemId, int accountId)
+ {
+ #region Demo Mode
+ if (IsDemoMode)
+ {
+ return GetDemoContactSettings();
+ }
+ #endregion
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_CONTACT_MAILFLOW", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return null;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // get mailbox settings
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ ExchangeContact contact = exchange.GetContactMailFlowSettings(account.AccountName);
+ contact.DisplayName = account.DisplayName;
+ return contact;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int SetContactMailFlowSettings(int itemId, int accountId,
+ string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "UPDATE_CONTACT_MAILFLOW", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // get mailbox settings
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ exchange.SetContactMailFlowSettings(account.AccountName,
+ acceptAccounts,
+ rejectAccounts,
+ requireSenderAuthentication);
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+ #endregion
+
+ #region Distribution Lists
+ public static int CreateDistributionList(int itemId, string displayName, string name, string domain, int managerId)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // check mailbox quota
+ OrganizationStatistics orgStats = GetOrganizationStatistics(itemId);
+ if (orgStats.AllocatedDistributionLists > -1
+ && orgStats.CreatedDistributionLists >= orgStats.AllocatedDistributionLists)
+ return BusinessErrorCodes.ERROR_EXCHANGE_DLISTS_QUOTA_LIMIT;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "CREATE_DISTR_LIST", itemId);
+
+ try
+ {
+ displayName = displayName.Trim();
+ name = name.Trim();
+ domain = domain.Trim();
+
+ // e-mail
+ string email = name + "@" + domain;
+
+ // check e-mail
+ if (EmailAddressExists(email))
+ return BusinessErrorCodes.ERROR_EXCHANGE_EMAIL_EXISTS;
+
+ // load organization
+ Organization org = GetOrganization(itemId);
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ string accountName = BuildAccountName(org.OrganizationId, name);
+
+ // add account
+ // add contact
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ //Create Exchange Organization
+ if (string.IsNullOrEmpty(org.GlobalAddressList))
+ {
+ ExtendToExchangeOrganization(ref org);
+
+ PackageController.UpdatePackageItem(org);
+ }
+
+ OrganizationUser manager = OrganizationController.GetAccount(itemId, managerId);
+
+ List addressLists = new List();
+ addressLists.Add(org.GlobalAddressList);
+ addressLists.Add(org.AddressList);
+
+ exchange.CreateDistributionList(
+ org.OrganizationId,
+ org.DistinguishedName,
+ displayName,
+ accountName,
+ name,
+ domain, manager.SamAccountName, addressLists.ToArray());
+
+ ExchangeDistributionList dl = exchange.GetDistributionListGeneralSettings(accountName);
+
+ // add meta-item
+ int accountId = AddAccount(itemId, ExchangeAccountType.DistributionList, email,
+ displayName, email, false,
+ 0, dl.SAMAccountName, null, 0, null);
+
+ // register email address
+ AddAccountEmailAddress(accountId, email);
+
+ return accountId;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int DeleteDistributionList(int itemId, int accountId)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "DELETE_DISTR_LIST", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // delete mailbox
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ exchange.DeleteDistributionList(account.AccountName);
+
+ // unregister account
+ DeleteAccount(itemId, accountId);
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ private static ExchangeDistributionList GetDemoDistributionListSettings()
+ {
+ ExchangeDistributionList c = new ExchangeDistributionList();
+ c.DisplayName = "Fabrikam Sales";
+ c.AccountName = "sales_fabrikam";
+ c.ManagerAccount = GetAccounts(0, ExchangeAccountType.Mailbox)[0];
+ c.MembersAccounts = GetAccounts(0, ExchangeAccountType.Mailbox).ToArray();
+ c.AcceptAccounts = GetAccounts(0, ExchangeAccountType.Mailbox).ToArray();
+ return c;
+ }
+
+ public static ExchangeDistributionList GetDistributionListGeneralSettings(int itemId, int accountId)
+ {
+ #region Demo Mode
+ if (IsDemoMode)
+ {
+ return GetDemoDistributionListSettings();
+ }
+ #endregion
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_DISTR_LIST_GENERAL", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return null;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // get mailbox settings
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ return exchange.GetDistributionListGeneralSettings(account.AccountName);
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int SetDistributionListGeneralSettings(int itemId, int accountId, string displayName,
+ bool hideAddressBook, string managerAccount, string[] memberAccounts,
+ string notes)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "UPDATE_DISTR_LIST_GENERAL", itemId);
+
+ try
+ {
+ displayName = displayName.Trim();
+
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // get mailbox settings
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ List addressLists = new List();
+ addressLists.Add(org.GlobalAddressList);
+ addressLists.Add(org.AddressList);
+
+ exchange.SetDistributionListGeneralSettings(
+ account.AccountName,
+ displayName,
+ hideAddressBook,
+ managerAccount,
+ memberAccounts,
+ notes,
+ addressLists.ToArray());
+
+ // update account
+ account.DisplayName = displayName;
+ account.AccountPassword = null;
+ UpdateAccount(account);
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static ExchangeDistributionList GetDistributionListMailFlowSettings(int itemId, int accountId)
+ {
+ #region Demo Mode
+ if (IsDemoMode)
+ {
+ return GetDemoDistributionListSettings();
+ }
+ #endregion
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_DISTR_LIST_MAILFLOW", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return null;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // get mailbox settings
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ ExchangeDistributionList list = exchange.GetDistributionListMailFlowSettings(account.AccountName);
+ list.DisplayName = account.DisplayName;
+ return list;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int SetDistributionListMailFlowSettings(int itemId, int accountId,
+ string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "UPDATE_DISTR_LIST_MAILFLOW", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // get mailbox settings
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ List addressLists = new List();
+ addressLists.Add(org.GlobalAddressList);
+ addressLists.Add(org.AddressList);
+
+
+ exchange.SetDistributionListMailFlowSettings(account.AccountName,
+ acceptAccounts,
+ rejectAccounts,
+ requireSenderAuthentication,
+ addressLists.ToArray());
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static ExchangeEmailAddress[] GetDistributionListEmailAddresses(int itemId, int accountId)
+ {
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_DISTR_LIST_ADDRESSES", itemId);
+
+ try
+ {
+ return GetAccountEmailAddresses(itemId, accountId);
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int AddDistributionListEmailAddress(int itemId, int accountId, string emailAddress)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "ADD_DISTR_LIST_ADDRESS", itemId);
+
+ try
+ {
+ // check
+ if (EmailAddressExists(emailAddress))
+ return BusinessErrorCodes.ERROR_EXCHANGE_EMAIL_EXISTS;
+
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // add e-mail
+ AddAccountEmailAddress(accountId, emailAddress);
+
+ // update e-mail addresses
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ List addressLists = new List();
+ addressLists.Add(org.GlobalAddressList);
+ addressLists.Add(org.AddressList);
+
+ exchange.SetDistributionListEmailAddresses(
+ account.AccountName,
+ GetAccountSimpleEmailAddresses(itemId, accountId), addressLists.ToArray());
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int SetDistributionListPrimaryEmailAddress(int itemId, int accountId, string emailAddress)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "SET_PRIMARY_DISTR_LIST_ADDRESS", itemId);
+
+ try
+ {
+ // get account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+ account.PrimaryEmailAddress = emailAddress;
+
+ // update exchange
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ List addressLists = new List();
+ addressLists.Add(org.GlobalAddressList);
+ addressLists.Add(org.AddressList);
+
+ exchange.SetDistributionListPrimaryEmailAddress(
+ account.AccountName,
+ emailAddress,
+ addressLists.ToArray());
+
+ // save account
+ account.AccountPassword = null;
+ UpdateAccount(account);
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int DeleteDistributionListEmailAddresses(int itemId, int accountId, string[] emailAddresses)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "DELETE_DISTR_LIST_ADDRESSES", itemId);
+
+ try
+ {
+ // get account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // delete e-mail addresses
+ List toDelete = new List();
+ foreach (string emailAddress in emailAddresses)
+ {
+ if (String.Compare(account.PrimaryEmailAddress, emailAddress, true) != 0)
+ toDelete.Add(emailAddress);
+ }
+
+ // delete from meta-base
+ DeleteAccountEmailAddresses(accountId, toDelete.ToArray());
+
+ // delete from Exchange
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // update e-mail addresses
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ List addressLists = new List();
+ addressLists.Add(org.GlobalAddressList);
+ addressLists.Add(org.AddressList);
+
+ exchange.SetDistributionListEmailAddresses(
+ account.AccountName,
+ GetAccountSimpleEmailAddresses(itemId, accountId), addressLists.ToArray());
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+
+ public static ResultObject SetDistributionListPermissions(int itemId, int accountId, string[] sendAsAccounts, string[] sendOnBehalfAccounts)
+ {
+ ResultObject res = TaskManager.StartResultTask("EXCHANGE", "SET_DISTRIBUTION_LIST_PERMISSINS");
+ Organization org;
+ try
+ {
+ org = GetOrganization(itemId);
+ if (org == null)
+ throw new ApplicationException("Organization is null");
+ }
+ catch(Exception ex)
+ {
+ TaskManager.CompleteResultTask(res, ErrorCodes.CANNOT_GET_ORGANIZATION_BY_ITEM_ID, ex);
+ return res;
+ }
+
+ ExchangeServer exchange;
+ try
+ {
+
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+ }
+ catch(Exception ex)
+ {
+ TaskManager.CompleteResultTask(res, ErrorCodes.CANNOT_GET_ORGANIZATION_PROXY, ex);
+ return res;
+ }
+
+ ExchangeAccount account;
+
+ try
+ {
+ account = GetAccount(itemId, accountId);
+ }
+ catch(Exception ex)
+ {
+ TaskManager.CompleteResultTask(res, ErrorCodes.CANNOT_GET_ACCOUNT, ex);
+ return res;
+ }
+
+ try
+ {
+ List addressLists = new List();
+ addressLists.Add(org.GlobalAddressList);
+ addressLists.Add(org.AddressList);
+
+ exchange.SetDistributionListPermissions(org.OrganizationId, account.AccountName, sendAsAccounts,
+ sendOnBehalfAccounts, addressLists.ToArray());
+ }
+ catch(Exception ex)
+ {
+ TaskManager.CompleteResultTask(res, ErrorCodes.CANNOT_SET_DISTRIBUTION_LIST_PERMISSIONS, ex);
+ return res;
+ }
+
+ TaskManager.CompleteTask();
+ return res;
+ }
+
+ public static ExchangeDistributionListResult GetDistributionListPermissions(int itemId, int accountId)
+ {
+ Organization org;
+ ExchangeDistributionListResult res = TaskManager.StartResultTask("EXCHANGE", "GET_DISTRIBUTION_LIST_RESULT");
+
+ try
+ {
+ org = GetOrganization(itemId);
+ if (org == null)
+ throw new ApplicationException("Organization is null");
+ }
+ catch(Exception ex)
+ {
+ TaskManager.CompleteResultTask(res, ErrorCodes.CANNOT_GET_ORGANIZATION_BY_ITEM_ID, ex);
+ return res;
+ }
+
+ ExchangeServer exchange;
+ try
+ {
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+ }
+ catch(Exception ex)
+ {
+ TaskManager.CompleteResultTask(res, ErrorCodes.CANNOT_GET_ORGANIZATION_PROXY, ex);
+ return res;
+ }
+
+ ExchangeAccount account;
+ try
+ {
+ account = GetAccount(itemId, accountId);
+ }
+ catch(Exception ex)
+ {
+ TaskManager.CompleteResultTask(res, ErrorCodes.CANNOT_GET_ACCOUNT, ex);
+ return res;
+ }
+
+ try
+ {
+ res.Value = exchange.GetDistributionListPermissions(org.OrganizationId, account.AccountName);
+ res.Value.DisplayName = account.DisplayName;
+ }
+ catch(Exception ex)
+ {
+ TaskManager.CompleteResultTask(res, ErrorCodes.CANNOT_GET_DISTRIBUTION_LIST_PERMISSIONS, ex);
+ return res;
+ }
+
+ TaskManager.CompleteTask();
+ return res;
+ }
+
+ #endregion
+
+ #region Public Folders
+ public static int CreatePublicFolder(int itemId, string parentFolder, string folderName,
+ bool mailEnabled, string name, string domain)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // check mailbox quota
+ OrganizationStatistics orgStats = GetOrganizationStatistics(itemId);
+ if (orgStats.AllocatedPublicFolders > -1
+ && orgStats.CreatedPublicFolders >= orgStats.AllocatedPublicFolders)
+ return BusinessErrorCodes.ERROR_EXCHANGE_PFOLDERS_QUOTA_LIMIT;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "CREATE_PUBLIC_FOLDER", itemId);
+
+ try
+ {
+ // e-mail
+ string email = "";
+ if (mailEnabled && !String.IsNullOrEmpty(name))
+ {
+ email = name + "@" + domain;
+
+ // check e-mail
+ if (EmailAddressExists(email))
+ return BusinessErrorCodes.ERROR_EXCHANGE_EMAIL_EXISTS;
+ }
+
+ // full folder name
+ string normParent = parentFolder;
+ if (!normParent.StartsWith("\\"))
+ normParent = "\\" + normParent;
+ if (!normParent.EndsWith("\\"))
+ normParent = normParent + "\\";
+
+ string folderPath = normParent + folderName;
+
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ if (String.IsNullOrEmpty(name))
+ name = Utils.CleanIdentifier(folderName);
+
+ string accountName = BuildAccountName(org.OrganizationId, name);
+
+ // add mailbox
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ //Create Exchange Organization
+ if (string.IsNullOrEmpty(org.GlobalAddressList))
+ {
+ ExtendToExchangeOrganization(ref org);
+
+ PackageController.UpdatePackageItem(org);
+ }
+
+ exchange.CreatePublicFolder(org.DistinguishedName,
+ org.OrganizationId,
+ org.SecurityGroup,
+ parentFolder,
+ folderName,
+ mailEnabled,
+ accountName,
+ name,
+ domain);
+
+
+ ExchangePublicFolder folder = exchange.GetPublicFolderGeneralSettings(org.OrganizationId, parentFolder + "\\" + folderName);
+
+ // add meta-item
+ int accountId = AddAccount(itemId, ExchangeAccountType.PublicFolder, accountName,
+ folderPath, email, mailEnabled,
+ 0, folder.NETBIOS+"\\"+accountName, null, 0, null);
+
+ // register email address
+ if(mailEnabled)
+ AddAccountEmailAddress(accountId, email);
+
+ return accountId;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int DeletePublicFolders(int itemId, int[] accountIds)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ if (accountIds != null)
+ foreach (int accountId in accountIds)
+ {
+ int result = DeletePublicFolder(itemId, accountId);
+ if (result < 0)
+ return result;
+ }
+ return 0;
+ }
+
+ public static int DeletePublicFolder(int itemId, int accountId)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "DELETE_PUBLIC_FOLDER", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // delete folder
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ exchange.DeletePublicFolder(org.OrganizationId, account.DisplayName);
+
+ // unregister account
+ DeleteAccount(itemId, accountId);
+
+ // delete all nested folder meta-items
+ List folders = GetAccounts(itemId, ExchangeAccountType.PublicFolder);
+ foreach (ExchangeAccount folder in folders)
+ {
+ if (folder.DisplayName.ToLower().StartsWith(account.DisplayName.ToLower() + "\\"))
+ DeleteAccount(itemId, folder.AccountId);
+ }
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int EnableMailPublicFolder(int itemId, int accountId,
+ string name, string domain)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "ENABLE_MAIL_PUBLIC_FOLDER", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+ if (account.MailEnabledPublicFolder)
+ return 0;
+
+ // check email
+ string email = name + "@" + domain;
+
+ // check e-mail
+ if (EmailAddressExists(email))
+ return BusinessErrorCodes.ERROR_EXCHANGE_EMAIL_EXISTS;
+
+ string accountName = BuildAccountName(org.OrganizationId, name);
+
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ exchange.EnableMailPublicFolder(
+ org.OrganizationId,
+ account.DisplayName,
+ account.AccountName,
+ name,
+ domain);
+
+ // update and save account
+ account.AccountName = accountName;
+ account.MailEnabledPublicFolder = true;
+ account.PrimaryEmailAddress = email;
+ account.AccountPassword = null;
+ UpdateAccount(account);
+
+ // register e-mail
+ AddAccountEmailAddress(accountId, email);
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int DisableMailPublicFolder(int itemId, int accountId)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "DISABLE_MAIL_PUBLIC_FOLDER", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+ if (!account.MailEnabledPublicFolder)
+ return 0;
+
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ exchange.DisableMailPublicFolder(org.OrganizationId, account.DisplayName);
+
+
+ // update and save account
+ account.MailEnabledPublicFolder = false;
+ account.PrimaryEmailAddress = "";
+ account.AccountPassword = null;
+ UpdateAccount(account);
+
+
+ // delete all mail accounts
+ List addrs = new List();
+ ExchangeEmailAddress[] emails = GetAccountEmailAddresses(itemId, accountId);
+ foreach (ExchangeEmailAddress email in emails)
+ addrs.Add(email.EmailAddress);
+
+ DeleteAccountEmailAddresses(accountId, addrs.ToArray());
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ private static ExchangePublicFolder GetDemoPublicFolderSettings()
+ {
+ ExchangePublicFolder c = new ExchangePublicFolder();
+ c.DisplayName = "\\fabrikam\\Documents";
+ c.MailEnabled = true;
+ c.Name = "Documents";
+ c.Accounts = GetAccounts(0, ExchangeAccountType.Mailbox).ToArray();
+ c.AcceptAccounts = GetAccounts(0, ExchangeAccountType.Mailbox).ToArray();
+ return c;
+ }
+
+ public static ExchangePublicFolder GetPublicFolderGeneralSettings(int itemId, int accountId)
+ {
+ #region Demo Mode
+ if (IsDemoMode)
+ {
+ return GetDemoPublicFolderSettings();
+ }
+ #endregion
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_PUBLIC_FOLDER_GENERAL", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return null;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ ExchangePublicFolder folder = exchange.GetPublicFolderGeneralSettings(org.OrganizationId, account.DisplayName);
+ folder.MailEnabled = account.MailEnabledPublicFolder;
+ folder.DisplayName = account.DisplayName;
+ return folder;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int SetPublicFolderGeneralSettings(int itemId, int accountId, string newName,
+ bool hideAddressBook, ExchangeAccount[] accounts)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "UPDATE_PUBLIC_FOLDER_GENERAL", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // get mailbox settings
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ exchange.SetPublicFolderGeneralSettings(
+ org.OrganizationId,
+ account.DisplayName,
+ newName,
+ hideAddressBook,
+ accounts
+ );
+
+ // update folder name
+ string origName = account.DisplayName;
+ string newFullName = origName.Substring(0, origName.LastIndexOf("\\") + 1) + newName;
+
+ if (String.Compare(origName, newFullName, true) != 0)
+ {
+ // rename original folder
+ account.DisplayName = newFullName;
+ account.AccountPassword = null;
+ UpdateAccount(account);
+
+ // rename nested folders
+ List folders = GetAccounts(itemId, ExchangeAccountType.PublicFolder);
+ foreach (ExchangeAccount folder in folders)
+ {
+ if (folder.DisplayName.ToLower().StartsWith(origName.ToLower() + "\\"))
+ {
+ folder.DisplayName = newFullName + folder.DisplayName.Substring(origName.Length);
+ UpdateAccount(folder);
+ }
+ }
+ }
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static ExchangePublicFolder GetPublicFolderMailFlowSettings(int itemId, int accountId)
+ {
+ #region Demo Mode
+ if (IsDemoMode)
+ {
+ return GetDemoPublicFolderSettings();
+ }
+ #endregion
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_PUBLIC_FOLDER_MAILFLOW", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return null;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // get mailbox settings
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ ExchangePublicFolder folder = exchange.GetPublicFolderMailFlowSettings(org.OrganizationId, account.DisplayName);
+ folder.DisplayName = account.DisplayName;
+ return folder;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int SetPublicFolderMailFlowSettings(int itemId, int accountId,
+ string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "UPDATE_PUBLIC_FOLDER_MAILFLOW", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // get mailbox settings
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ exchange.SetPublicFolderMailFlowSettings(org.OrganizationId, account.DisplayName,
+ acceptAccounts,
+ rejectAccounts,
+ requireSenderAuthentication);
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static ExchangeEmailAddress[] GetPublicFolderEmailAddresses(int itemId, int accountId)
+ {
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_PUBLIC_FOLDER_ADDRESSES", itemId);
+
+ try
+ {
+ return GetAccountEmailAddresses(itemId, accountId);
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int AddPublicFolderEmailAddress(int itemId, int accountId, string emailAddress)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "ADD_PUBLIC_FOLDER_ADDRESS", itemId);
+
+ try
+ {
+ // check
+ if (EmailAddressExists(emailAddress))
+ return BusinessErrorCodes.ERROR_EXCHANGE_EMAIL_EXISTS;
+
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // add e-mail
+ AddAccountEmailAddress(accountId, emailAddress);
+
+ // update e-mail addresses
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ exchange.SetPublicFolderEmailAddresses(
+ org.OrganizationId,
+ account.DisplayName,
+ GetAccountSimpleEmailAddresses(itemId, accountId));
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int SetPublicFolderPrimaryEmailAddress(int itemId, int accountId, string emailAddress)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "SET_PRIMARY_PUBLIC_FOLDER_ADDRESS", itemId);
+
+ try
+ {
+ // get account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+ account.PrimaryEmailAddress = emailAddress;
+
+ // update exchange
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // check package
+ int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
+ if (packageCheck < 0) return packageCheck;
+
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ exchange.SetPublicFolderPrimaryEmailAddress(
+ org.OrganizationId,
+ account.DisplayName,
+ emailAddress);
+
+ // save account
+ account.AccountPassword = null;
+ UpdateAccount(account);
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static int DeletePublicFolderEmailAddresses(int itemId, int accountId, string[] emailAddresses)
+ {
+ // check account
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "DELETE_PUBLIC_FOLDER_ADDRESSES", itemId);
+
+ try
+ {
+ // get account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ // delete e-mail addresses
+ List toDelete = new List();
+ foreach (string emailAddress in emailAddresses)
+ {
+ if (String.Compare(account.PrimaryEmailAddress, emailAddress, true) != 0)
+ toDelete.Add(emailAddress);
+ }
+
+ // delete from meta-base
+ DeleteAccountEmailAddresses(accountId, toDelete.ToArray());
+
+ // delete from Exchange
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return -1;
+
+ // update e-mail addresses
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ exchange.SetPublicFolderEmailAddresses(
+ org.OrganizationId,
+ account.DisplayName,
+ GetAccountSimpleEmailAddresses(itemId, accountId));
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+ #endregion
+
+ #region Private Helpers
+
+
+ private static string GetPrimaryDomainController(int organizationServiceId)
+ {
+
+ Organizations orgProxy = new Organizations();
+
+ ServiceProviderProxy.Init(orgProxy, organizationServiceId);
+
+ string[] organizationSettings = orgProxy.ServiceProviderSettingsSoapHeaderValue.Settings;
+
+
+
+ string orgPrimaryDomainController = string.Empty;
+ foreach (string str in organizationSettings)
+ {
+ string[] props = str.Split('=');
+ if (props[0].ToLower() == "primarydomaincontroller")
+ {
+ orgPrimaryDomainController = str;
+ break;
+ }
+ }
+
+ return orgPrimaryDomainController;
+ }
+
+ private static void ExtendExchangeSettings(List exchangeSettings, string primaryDomainController)
+ {
+ bool isAdded = false;
+ for (int i = 0; i < exchangeSettings.Count; i++)
+ {
+ string[] props = exchangeSettings[i].Split('=');
+ if (props[0].ToLower() == "primarydomaincontroller")
+ {
+ exchangeSettings[i] = primaryDomainController;
+ isAdded = true;
+ break;
+ }
+ }
+
+ if (!isAdded)
+ {
+ exchangeSettings.Add(primaryDomainController);
+ }
+ }
+
+ internal static ServiceProvider GetServiceProvider(int exchangeServiceId, int organizationServiceId)
+ {
+ ServiceProvider ws = new ServiceProvider();
+
+ ServiceProviderProxy.Init(ws, exchangeServiceId);
+
+ string[] exchangeSettings = ws.ServiceProviderSettingsSoapHeaderValue.Settings;
+
+ List resSettings = new List(exchangeSettings);
+
+ string orgPrimaryDomainController = GetPrimaryDomainController(organizationServiceId);
+
+ ExtendExchangeSettings(resSettings, orgPrimaryDomainController);
+ ws.ServiceProviderSettingsSoapHeaderValue.Settings = resSettings.ToArray();
+ return ws;
+ }
+
+ internal static ExchangeServer GetExchangeServer(int exchangeServiceId, int organizationServiceId)
+ {
+ ExchangeServer ws = new ExchangeServer();
+
+ ServiceProviderProxy.Init(ws, exchangeServiceId);
+
+ string []exchangeSettings = ws.ServiceProviderSettingsSoapHeaderValue.Settings;
+
+ List resSettings = new List(exchangeSettings);
+
+ string orgPrimaryDomainController = GetPrimaryDomainController(organizationServiceId);
+
+ ExtendExchangeSettings(resSettings, orgPrimaryDomainController);
+ ws.ServiceProviderSettingsSoapHeaderValue.Settings = resSettings.ToArray();
+ return ws;
+ }
+
+ internal static ServiceProvider GetExchangeServiceProvider(int exchangeServiceId, int organizationServiceId)
+ {
+ ServiceProvider ws = new ServiceProvider();
+
+ ServiceProviderProxy.Init(ws, exchangeServiceId);
+
+ string[] exchangeSettings = ws.ServiceProviderSettingsSoapHeaderValue.Settings;
+
+ List resSettings = new List(exchangeSettings);
+
+ string orgPrimaryDomainController = GetPrimaryDomainController(organizationServiceId);
+
+ ExtendExchangeSettings(resSettings, orgPrimaryDomainController);
+ ws.ServiceProviderSettingsSoapHeaderValue.Settings = resSettings.ToArray();
+ return ws;
+ }
+
+
+ private static int GetExchangeServiceID(int packageId)
+ {
+ return PackageController.GetPackageServiceId(packageId, ResourceGroups.Exchange);
+ }
+
+ private static string[] GetAccountSimpleEmailAddresses(int itemId, int accountId)
+ {
+ ExchangeEmailAddress[] emails = GetAccountEmailAddresses(itemId, accountId);
+ List result = new List();
+ foreach (ExchangeEmailAddress email in emails)
+ {
+ string prefix = email.IsPrimary ? "SMTP:" : "smtp:";
+ result.Add(prefix + email.EmailAddress);
+ }
+
+ return result.ToArray();
+ }
+
+ private static bool QuotaEnabled(PackageContext cntx, string quotaName)
+ {
+ return cntx.Quotas.ContainsKey(quotaName) && !cntx.Quotas[quotaName].QuotaExhausted;
+ }
+
+ private static bool IsDemoMode
+ {
+ get
+ {
+ return (SecurityContext.CheckAccount(DemandAccount.NotDemo) < 0);
+ }
+ }
+ #endregion
+
+ public static ExchangeMobileDevice[] GetMobileDevices(int itemId, int accountId)
+ {
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_MOBILE_DEVICES", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return null;
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, accountId);
+
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ return exchange.GetMobileDevices(account.UserPrincipalName);
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static ExchangeMobileDevice GetMobileDevice(int itemId, string deviceId)
+ {
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "GET_MOBILE_DEVICE", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return null;
+
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ return exchange.GetMobileDevice(deviceId);
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static void WipeDataFromDevice(int itemId, string deviceId)
+ {
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "WIPE_DATA_FROM_DEVICE", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return;
+
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ exchange.WipeDataFromDevice(deviceId);
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static void CancelRemoteWipeRequest(int itemId, string deviceId)
+ {
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "CANCEL_REMOTE_WIPE_REQUEST", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return;
+
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ exchange.CancelRemoteWipeRequest(deviceId);
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ public static void RemoveDevice(int itemId, string deviceId)
+ {
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "REMOVE_DEVICE", itemId);
+
+ try
+ {
+ // load organization
+ Organization org = GetOrganization(itemId);
+ if (org == null)
+ return;
+
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ exchange.RemoveDevice(deviceId);
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+ }
+
+ #region Disclaimers
+
+ public static int AddExchangeDisclaimer(int itemID, ExchangeDisclaimer disclaimer)
+ {
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "ADD_EXCHANGE_EXCHANGEDISCLAIMER", itemID);
+
+ try
+ {
+ return DataProvider.AddExchangeDisclaimer(itemID, disclaimer);
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+
+
+ }
+
+ public static int UpdateExchangeDisclaimer(int itemID, ExchangeDisclaimer disclaimer)
+ {
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "UPDATE_EXCHANGE_EXCHANGEDISCLAIMER", itemID);
+
+ try
+ {
+ DataProvider.UpdateExchangeDisclaimer(itemID, disclaimer);
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+
+ return 0;
+ }
+
+ public static int DeleteExchangeDisclaimer(int itemId, int exchangeDisclaimerId)
+ {
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ TaskManager.StartTask("EXCHANGE", "DELETE_EXCHANGE_EXCHANGEDISCLAIMER", itemId);
+
+ try
+ {
+ DataProvider.DeleteExchangeDisclaimer(exchangeDisclaimerId);
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+
+ return 0;
+ }
+
+ public static ExchangeDisclaimer GetExchangeDisclaimer(int itemId, int exchangeDisclaimerId)
+ {
+
+ TaskManager.StartTask("EXCHANGE", "GET_EXCHANGE_EXCHANGEDISCLAIMER", itemId);
+
+ try
+ {
+ return ObjectUtils.FillObjectFromDataReader(
+ DataProvider.GetExchangeDisclaimer(exchangeDisclaimerId));
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+
+ }
+
+ public static List GetExchangeDisclaimers(int itemId)
+ {
+ TaskManager.StartTask("EXCHANGE", "GET_EXCHANGE_EXCHANGEDISCLAIMER", itemId);
+
+ try
+ {
+ List disclaimers = ObjectUtils.CreateListFromDataReader(DataProvider.GetExchangeDisclaimers(itemId));
+ return disclaimers;
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+
+ }
+
+ public static int SetExchangeAccountDisclaimerId(int itemId, int AccountID, int ExchangeDisclaimerId)
+ {
+ int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
+ if (accountCheck < 0) return accountCheck;
+
+ // place log record
+ TaskManager.StartTask("EXCHANGE", "SET_EXCHANGE_ACCOUNTDISCLAIMERID", AccountID);
+
+ try
+ {
+ ExchangeDisclaimer disclaimer = null;
+
+ if (ExchangeDisclaimerId != -1)
+ disclaimer = GetExchangeDisclaimer(itemId, ExchangeDisclaimerId);
+
+ // load account
+ ExchangeAccount account = GetAccount(itemId, AccountID);
+
+ Organization org = (Organization)PackageController.GetPackageItem(itemId);
+ if (org == null)
+ return -1;
+
+ int exchangeServiceId = GetExchangeServiceID(org.PackageId);
+ ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
+
+ string transportRuleName = org.Name + "_" + account.PrimaryEmailAddress;
+
+ exchange.RemoveTransportRule(transportRuleName);
+
+ if (disclaimer != null)
+ {
+ if (!string.IsNullOrEmpty(disclaimer.DisclaimerText))
+ exchange.NewDisclaimerTransportRule(transportRuleName, account.PrimaryEmailAddress, disclaimer.DisclaimerText);
+ }
+
+ DataProvider.SetExchangeAccountDisclaimerId(AccountID, ExchangeDisclaimerId);
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+
+ return 0;
+
+ }
+
+ public static int GetExchangeAccountDisclaimerId(int itemId, int AccountID)
+ {
+ TaskManager.StartTask("EXCHANGE", "GET_EXCHANGE_ACCOUNTDISCLAIMERID", AccountID);
+
+ try
+ {
+ return DataProvider.GetExchangeAccountDisclaimerId(AccountID);
+ }
+ catch (Exception ex)
+ {
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ TaskManager.CompleteTask();
+ }
+
+ }
+ #endregion
+
+ }
+}
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Files/FilesController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Files/FilesController.cs
similarity index 94%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Files/FilesController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Files/FilesController.cs
index e9dc8e48..74dd8d78 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Files/FilesController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Files/FilesController.cs
@@ -169,8 +169,7 @@ namespace WebsitePanel.EnterpriseServer
if (packageCheck < 0) return packageCheck;
// place log record
- TaskManager.StartTask("FILES", "UPDATE_BINARY_CONTENT", path);
- TaskManager.ItemId = packageId;
+ TaskManager.StartTask("FILES", "UPDATE_BINARY_CONTENT", path, packageId);
try
{
@@ -204,8 +203,7 @@ namespace WebsitePanel.EnterpriseServer
if (packageCheck < 0) return packageCheck;
// place log record
- TaskManager.StartTask("FILES", "UPDATE_BINARY_CONTENT", path);
- TaskManager.ItemId = packageId;
+ TaskManager.StartTask("FILES", "UPDATE_BINARY_CONTENT", path, packageId);
try
{
@@ -260,8 +258,8 @@ namespace WebsitePanel.EnterpriseServer
if (accountCheck < 0) return accountCheck;
// place log record
- TaskManager.StartTask("FILES", "DELETE_FILES");
- TaskManager.ItemId = packageId;
+ TaskManager.StartTask("FILES", "DELETE_FILES", packageId);
+
if (files != null)
{
foreach (string file in files)
@@ -302,8 +300,7 @@ namespace WebsitePanel.EnterpriseServer
if (packageCheck < 0) return packageCheck;
// place log record
- TaskManager.StartTask("FILES", "CREATE_FILE", path);
- TaskManager.ItemId = packageId;
+ TaskManager.StartTask("FILES", "CREATE_FILE", path, packageId);
try
{
@@ -356,8 +353,7 @@ namespace WebsitePanel.EnterpriseServer
if (packageCheck < 0) return packageCheck;
// place log record
- TaskManager.StartTask("FILES", "CREATE_FOLDER", path);
- TaskManager.ItemId = packageId;
+ TaskManager.StartTask("FILES", "CREATE_FOLDER", path, packageId);
try
{
@@ -396,8 +392,7 @@ namespace WebsitePanel.EnterpriseServer
if (!DirectoryExists(packageId, destFolder)) return BusinessErrorCodes.ERROR_FILE_DEST_FOLDER_NONEXISTENT;
// place log record
- TaskManager.StartTask("FILES", "COPY_FILES");
- TaskManager.ItemId = packageId;
+ TaskManager.StartTask("FILES", "COPY_FILES", packageId);
TaskManager.WriteParameter("Destination folder", destFolder);
if (files != null)
{
@@ -455,8 +450,8 @@ namespace WebsitePanel.EnterpriseServer
if (!DirectoryExists(packageId, destFolder)) return BusinessErrorCodes.ERROR_FILE_DEST_FOLDER_NONEXISTENT;
// place log record
- TaskManager.StartTask("FILES", "MOVE_FILES");
- TaskManager.ItemId = packageId;
+ TaskManager.StartTask("FILES", "MOVE_FILES", packageId);
+
TaskManager.WriteParameter("Destination folder", destFolder);
if (files != null)
{
@@ -514,8 +509,8 @@ namespace WebsitePanel.EnterpriseServer
if (accountCheck < 0) return accountCheck;
// place log record
- TaskManager.StartTask("FILES", "RENAME_FILE", oldPath);
- TaskManager.ItemId = packageId;
+ TaskManager.StartTask("FILES", "RENAME_FILE", oldPath, packageId);
+
TaskManager.WriteParameter("New name", newPath);
try
@@ -551,8 +546,8 @@ namespace WebsitePanel.EnterpriseServer
if (packageCheck < 0) return null;
// place log record
- TaskManager.StartTask("FILES", "UNZIP_FILES");
- TaskManager.ItemId = packageId;
+ TaskManager.StartTask("FILES", "UNZIP_FILES", packageId);
+
if (files != null)
{
foreach (string file in files)
@@ -596,8 +591,8 @@ namespace WebsitePanel.EnterpriseServer
if (packageCheck < 0) return packageCheck;
// place log record
- TaskManager.StartTask("FILES", "ZIP_FILES", archivePath);
- TaskManager.ItemId = packageId;
+ TaskManager.StartTask("FILES", "ZIP_FILES", archivePath, packageId);
+
if (files != null)
{
foreach (string file in files)
@@ -647,8 +642,8 @@ namespace WebsitePanel.EnterpriseServer
if (packageCheck < 0) return packageCheck;
// place log record
- TaskManager.StartTask("FILES", "ZIP_FILES", archivePath);
- TaskManager.ItemId = packageId;
+ TaskManager.StartTask("FILES", "ZIP_FILES", archivePath, packageId);
+
if (files != null)
{
foreach (string file in files)
@@ -706,8 +701,7 @@ namespace WebsitePanel.EnterpriseServer
if (packageCheck < 0) return packageCheck;
// place log record
- TaskManager.StartTask("FILES", "CREATE_ACCESS_DATABASE", dbPath);
- TaskManager.ItemId = packageId;
+ TaskManager.StartTask("FILES", "CREATE_ACCESS_DATABASE", dbPath, packageId);
try
{
@@ -737,8 +731,7 @@ namespace WebsitePanel.EnterpriseServer
if (accountCheck < 0) return accountCheck;
// place log record
- TaskManager.StartTask("SPACE", "CALCULATE_DISKSPACE");
- TaskManager.ItemId = packageId;
+ TaskManager.StartTask("SPACE", "CALCULATE_DISKSPACE", packageId);
try
{
@@ -813,8 +806,7 @@ namespace WebsitePanel.EnterpriseServer
if (accountCheck < 0) return accountCheck;
// place log record
- TaskManager.StartTask("FILES", "SET_PERMISSIONS", path);
- TaskManager.ItemId = packageId;
+ TaskManager.StartTask("FILES", "SET_PERMISSIONS", path, packageId);
try
{
@@ -925,8 +917,7 @@ namespace WebsitePanel.EnterpriseServer
if (packageCheck < 0) return packageCheck;
// place log record
- TaskManager.StartTask("FILES", "SET_QUOTA_ON_FOLDER", path);
- TaskManager.ItemId = packageId;
+ TaskManager.StartTask("FILES", "SET_QUOTA_ON_FOLDER", path, packageId);
try
{
@@ -1046,8 +1037,7 @@ namespace WebsitePanel.EnterpriseServer
if (packageCheck < 0) return packageCheck;
// place log record
- TaskManager.StartTask("FILES", "DELETE_DIRECTORY_RECURSIVE", rootPath);
- TaskManager.ItemId = packageId;
+ TaskManager.StartTask("FILES", "DELETE_DIRECTORY_RECURSIVE", rootPath, packageId);
try
{
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/FtpServers/FtpServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/FtpServers/FtpServerController.cs
similarity index 96%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/FtpServers/FtpServerController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/FtpServers/FtpServerController.cs
index 4c174bf0..25541268 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/FtpServers/FtpServerController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/FtpServers/FtpServerController.cs
@@ -215,8 +215,8 @@ namespace WebsitePanel.EnterpriseServer
if (packageCheck < 0) return packageCheck;
// place log record
- TaskManager.StartTask("FTP_ACCOUNT", "UPDATE", origItem.Name);
- TaskManager.ItemId = item.Id;
+ TaskManager.StartTask("FTP_ACCOUNT", "UPDATE", origItem.Name, item.Id);
+
TaskManager.WriteParameter("Folder", item.Folder);
TaskManager.WriteParameter("CanRead", item.CanRead);
TaskManager.WriteParameter("CanWrite", item.CanWrite);
@@ -279,8 +279,7 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_FTP_PACKAGE_ITEM_NOT_FOUND;
// place log record
- TaskManager.StartTask("FTP_ACCOUNT", "DELETE", origItem.Name);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("FTP_ACCOUNT", "DELETE", origItem.Name, itemId);
try
{
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HeliconZoo/HeliconZooController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HeliconZoo/HeliconZooController.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HeliconZoo/HeliconZooController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HeliconZoo/HeliconZooController.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/BlackBerryController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/BlackBerryController.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/BlackBerryController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/BlackBerryController.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/CRMController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/CRMController.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/CRMController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/CRMController.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/LyncController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/LyncController.cs
similarity index 95%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/LyncController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/LyncController.cs
index a72d5b59..e78b8a10 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/LyncController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/LyncController.cs
@@ -419,8 +419,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
if (accountCheck < 0) return accountCheck;
// place log record
- TaskManager.StartTask("LYNC", "DELETE_ORG");
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("LYNC", "DELETE_ORG", itemId);
try
{
@@ -622,8 +621,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
public static List GetLyncUserPlans(int itemId)
{
// place log record
- TaskManager.StartTask("LYNC", "GET_LYNC_LYNCUSERPLANS");
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("LYNC", "GET_LYNC_LYNCUSERPLANS", itemId);
try
{
@@ -705,8 +703,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
{
// place log record
- TaskManager.StartTask("LYNC", "GET_LYNC_LYNCUSERPLAN");
- TaskManager.ItemId = lyncUserPlanId;
+ TaskManager.StartTask("LYNC", "GET_LYNC_LYNCUSERPLAN", lyncUserPlanId);
try
{
@@ -729,8 +726,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
if (accountCheck < 0) return accountCheck;
// place log record
- TaskManager.StartTask("LYNC", "ADD_LYNC_LYNCUSERPLAN");
- TaskManager.ItemId = itemID;
+ TaskManager.StartTask("LYNC", "ADD_LYNC_LYNCUSERPLAN", itemID);
try
{
@@ -770,8 +766,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
if (accountCheck < 0) return accountCheck;
// place log record
- TaskManager.StartTask("LYNC", "ADD_LYNC_LYNCUSERPLAN");
- TaskManager.ItemId = itemID;
+ TaskManager.StartTask("LYNC", "ADD_LYNC_LYNCUSERPLAN", itemID);
try
{
@@ -809,8 +804,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (accountCheck < 0) return accountCheck;
- TaskManager.StartTask("LYNC", "DELETE_LYNC_LYNCPLAN");
- TaskManager.ItemId = itemID;
+ TaskManager.StartTask("LYNC", "DELETE_LYNC_LYNCPLAN", itemID);
try
{
@@ -834,8 +828,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (accountCheck < 0) return accountCheck;
- TaskManager.StartTask("LYNC", "SET_LYNC_LYNCUSERPLAN");
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("LYNC", "SET_LYNC_LYNCUSERPLAN", itemId);
try
{
@@ -861,8 +854,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
public static LyncFederationDomain[] GetFederationDomains(int itemId)
{
// place log record
- TaskManager.StartTask("LYNC", "GET_LYNC_FEDERATIONDOMAINS");
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("LYNC", "GET_LYNC_FEDERATIONDOMAINS", itemId);
LyncFederationDomain[] lyncFederationDomains = null;
@@ -889,10 +881,11 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
public static LyncUserResult AddFederationDomain(int itemId, string domainName, string proxyFqdn)
{
- LyncUserResult res = TaskManager.StartResultTask("LYNC", "ADD_LYNC_FEDERATIONDOMAIN");
- TaskManager.ItemId = itemId;
- TaskManager.TaskParameters["domainName"] = domainName;
- TaskManager.TaskParameters["proxyFqdn"] = proxyFqdn;
+ List parameters = new List();
+ parameters.Add(new BackgroundTaskParameter("domainName", domainName));
+ parameters.Add(new BackgroundTaskParameter("proxyFqdn", proxyFqdn));
+
+ LyncUserResult res = TaskManager.StartResultTask("LYNC", "ADD_LYNC_FEDERATIONDOMAIN", itemId, parameters);
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
@@ -966,9 +959,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
public static LyncUserResult RemoveFederationDomain(int itemId, string domainName)
{
- LyncUserResult res = TaskManager.StartResultTask("LYNC", "REMOVE_LYNC_FEDERATIONDOMAIN");
- TaskManager.ItemId = itemId;
- TaskManager.TaskParameters["domainName"] = domainName;
+ LyncUserResult res = TaskManager.StartResultTask("LYNC", "REMOVE_LYNC_FEDERATIONDOMAIN", itemId, new BackgroundTaskParameter("domainName", domainName));
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/LyncControllerAsync.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/LyncControllerAsync.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/LyncControllerAsync.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/LyncControllerAsync.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OCSController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OCSController.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OCSController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OCSController.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OrganizationController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs
similarity index 95%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OrganizationController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs
index e8eb4767..95d5da6f 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OrganizationController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs
@@ -291,9 +291,11 @@ namespace WebsitePanel.EnterpriseServer
return errorCode;
// place log record
- TaskManager.StartTask("ORGANIZATION", "CREATE_ORG", organizationName);
- TaskManager.TaskParameters["Organization ID"] = organizationId;
- TaskManager.TaskParameters["DomainName"] = domainName;
+ List parameters = new List();
+ parameters.Add(new BackgroundTaskParameter("Organization ID", organizationId));
+ parameters.Add(new BackgroundTaskParameter("DomainName", domainName));
+
+ TaskManager.StartTask("ORGANIZATION", "CREATE_ORG", organizationName, parameters);
try
{
@@ -411,9 +413,7 @@ namespace WebsitePanel.EnterpriseServer
if (accountCheck < 0) return accountCheck;
// place log record
- TaskManager.StartTask("ORGANIZATION", "DELETE_DOMAIN");
- TaskManager.TaskParameters["Domain ID"] = domainId;
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("ORGANIZATION", "DELETE_DOMAIN", itemId, new BackgroundTaskParameter("Domain ID", domainId));
try
{
@@ -586,8 +586,7 @@ namespace WebsitePanel.EnterpriseServer
if (accountCheck < 0) return accountCheck;
// place log record
- TaskManager.StartTask("ORGANIZATION", "DELETE_ORG");
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("ORGANIZATION", "DELETE_ORG", itemId);
try
{
@@ -869,8 +868,7 @@ namespace WebsitePanel.EnterpriseServer
#endregion
// place log record
- TaskManager.StartTask("ORGANIZATION", "GET_ORG_STATS");
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("ORGANIZATION", "GET_ORG_STATS", itemId);
try
{
@@ -1022,8 +1020,7 @@ namespace WebsitePanel.EnterpriseServer
if (accountCheck < 0) return accountCheck;
// place log record
- TaskManager.StartTask("ORGANIZATION", "CHANGE_DOMAIN_TYPE", domainId);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("ORGANIZATION", "CHANGE_DOMAIN_TYPE", domainId, itemId);
try
{
@@ -1060,8 +1057,7 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_EXCHANGE_DOMAINS_QUOTA_LIMIT;
// place log record
- TaskManager.StartTask("ORGANIZATION", "ADD_DOMAIN", domainName);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("ORGANIZATION", "ADD_DOMAIN", domainName, itemId);
try
{
@@ -1291,8 +1287,8 @@ namespace WebsitePanel.EnterpriseServer
// place log record
- TaskManager.StartTask("ORGANIZATION", "CREATE_USER");
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("ORGANIZATION", "CREATE_USER", itemId);
+
TaskManager.Write("Organization ID :" + itemId);
TaskManager.Write("name :" + name);
TaskManager.Write("domain :" + domain);
@@ -1414,8 +1410,8 @@ namespace WebsitePanel.EnterpriseServer
// place log record
- TaskManager.StartTask("ORGANIZATION", "IMPORT_USER");
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("ORGANIZATION", "IMPORT_USER", itemId);
+
TaskManager.Write("Organization ID :" + itemId);
TaskManager.Write("account :" + accountName);
TaskManager.Write("name :" + name);
@@ -1572,8 +1568,7 @@ namespace WebsitePanel.EnterpriseServer
if (accountCheck < 0) return accountCheck;
// place log record
- TaskManager.StartTask("ORGANIZATION", "DELETE_USER");
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("ORGANIZATION", "DELETE_USER", itemId);
try
{
@@ -1676,8 +1671,7 @@ namespace WebsitePanel.EnterpriseServer
#endregion
// place log record
- TaskManager.StartTask("ORGANIZATION", "GET_USER_GENERAL");
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("ORGANIZATION", "GET_USER_GENERAL", itemId);
OrganizationUser account = null;
Organization org = null;
@@ -1700,8 +1694,8 @@ namespace WebsitePanel.EnterpriseServer
// get mailbox settings
Organizations orgProxy = GetOrganizationProxy(org.ServiceId);
string accountName = GetAccountName(account.AccountName);
-
-
+
+
OrganizationUser retUser = orgProxy.GetUserGeneralSettings(accountName, org.OrganizationId);
retUser.AccountId = accountId;
retUser.AccountName = account.AccountName;
@@ -1712,13 +1706,10 @@ namespace WebsitePanel.EnterpriseServer
retUser.IsLyncUser = DataProvider.CheckLyncUserExists(accountId);
retUser.IsBlackBerryUser = BlackBerryController.CheckBlackBerryUserExists(accountId);
retUser.SubscriberNumber = account.SubscriberNumber;
-
+
return retUser;
}
- catch (Exception ex)
- {
- //throw TaskManager.WriteError(ex);
- }
+ catch { }
finally
{
TaskManager.CompleteTask();
@@ -1740,8 +1731,7 @@ namespace WebsitePanel.EnterpriseServer
if (accountCheck < 0) return accountCheck;
// place log record
- TaskManager.StartTask("ORGANIZATION", "UPDATE_USER_GENERAL");
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("ORGANIZATION", "UPDATE_USER_GENERAL", itemId);
try
{
@@ -1832,8 +1822,7 @@ namespace WebsitePanel.EnterpriseServer
// place log record
- TaskManager.StartTask("ORGANIZATION", "SET_USER_USERPRINCIPALNAME");
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("ORGANIZATION", "SET_USER_USERPRINCIPALNAME", itemId);
try
{
@@ -1931,8 +1920,7 @@ namespace WebsitePanel.EnterpriseServer
if (accountCheck < 0) return accountCheck;
// place log record
- TaskManager.StartTask("ORGANIZATION", "SET_USER_PASSWORD");
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("ORGANIZATION", "SET_USER_PASSWORD", itemId);
try
{
@@ -2048,8 +2036,7 @@ namespace WebsitePanel.EnterpriseServer
public static int GetAccountIdByUserPrincipalName(int itemId, string userPrincipalName)
{
// place log record
- TaskManager.StartTask("ORGANIZATION", "GET_ACCOUNT_BYUPN");
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("ORGANIZATION", "GET_ACCOUNT_BYUPN", itemId);
int accounId = -1;
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/ReportController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/ReportController.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/ReportController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/ReportController.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Log/AuditLog.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Log/AuditLog.cs
similarity index 96%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Log/AuditLog.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Log/AuditLog.cs
index ec012ecf..0b1a62e1 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Log/AuditLog.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Log/AuditLog.cs
@@ -92,10 +92,7 @@ namespace WebsitePanel.EnterpriseServer
DataProvider.AddAuditLogRecord(recordId, severityId, userId, username, packageId, itemId, itemName,
startDate, finishDate, sourceName, taskName, executionLog);
}
- catch
- {
- // skip error
- }
+ catch { }
}
private static DateTime GetStartDate(DateTime d)
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/MailServers/MailServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/MailServers/MailServerController.cs
similarity index 94%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/MailServers/MailServerController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/MailServers/MailServerController.cs
index a911b077..d7923702 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/MailServers/MailServerController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/MailServers/MailServerController.cs
@@ -191,8 +191,7 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_MAIL_ACCOUNT_MAX_MAILBOX_SIZE_LIMIT;
// place log record
- TaskManager.StartTask("MAIL_ACCOUNT", "UPDATE", origItem.Name);
- TaskManager.ItemId = item.Id;
+ TaskManager.StartTask("MAIL_ACCOUNT", "UPDATE", origItem.Name, item.Id);
try
{
@@ -245,8 +244,7 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_MAIL_ACCOUNTS_PACKAGE_ITEM_NOT_FOUND;
// place log record
- TaskManager.StartTask("MAIL_ACCOUNT", "DELETE", origItem.Name);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("MAIL_ACCOUNT", "DELETE", origItem.Name, itemId);
try
{
@@ -402,7 +400,7 @@ namespace WebsitePanel.EnterpriseServer
item.ServiceId = serviceId;
int itemId = PackageController.AddPackageItem(item);
- TaskManager.ItemId = itemId;
+ TaskManager.ItemId = itemId;
return itemId;
}
@@ -432,8 +430,7 @@ namespace WebsitePanel.EnterpriseServer
if (packageCheck < 0) return packageCheck;
// place log record
- TaskManager.StartTask("MAIL_FORWARDING", "UPDATE", origItem.Name);
- TaskManager.ItemId = item.Id;
+ TaskManager.StartTask("MAIL_FORWARDING", "UPDATE", origItem.Name, item.Id);
try
{
@@ -477,8 +474,7 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_MAIL_FORWARDINGS_PACKAGE_ITEM_NOT_FOUND;
// place log record
- TaskManager.StartTask("MAIL_FORWARDING", "DELETE", origItem.Name);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("MAIL_FORWARDING", "DELETE", origItem.Name, itemId);
try
{
@@ -638,8 +634,7 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_MAIL_GROUPS_RECIPIENTS_LIMIT;
// place log record
- TaskManager.StartTask("MAIL_GROUP", "UPDATE", origItem.Name);
- TaskManager.ItemId = item.Id;
+ TaskManager.StartTask("MAIL_GROUP", "UPDATE", origItem.Name, item.Id);
try
{
@@ -679,8 +674,7 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_MAIL_GROUPS_PACKAGE_ITEM_NOT_FOUND;
// place log record
- TaskManager.StartTask("MAIL_GROUP", "DELETE", origItem.Name);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("MAIL_GROUP", "DELETE", origItem.Name, itemId);
try
{
@@ -889,8 +883,7 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_MAIL_LISTS_RECIPIENTS_LIMIT;
// place log record
- TaskManager.StartTask("MAIL_LIST", "UPDATE", origItem.Name);
- TaskManager.ItemId = item.Id;
+ TaskManager.StartTask("MAIL_LIST", "UPDATE", origItem.Name, item.Id);
try
{
@@ -938,8 +931,7 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_MAIL_LISTS_PACKAGE_ITEM_NOT_FOUND;
// place log record
- TaskManager.StartTask("MAIL_LIST", "DELETE", origItem.Name);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("MAIL_LIST", "DELETE", origItem.Name, itemId);
try
{
@@ -1073,7 +1065,8 @@ namespace WebsitePanel.EnterpriseServer
}
TaskManager.ItemId = itemId;
- return itemId;
+
+ return itemId;
}
catch (Exception ex)
{
@@ -1101,8 +1094,7 @@ namespace WebsitePanel.EnterpriseServer
if (packageCheck < 0) return packageCheck;
// place log record
- TaskManager.StartTask("MAIL_DOMAIN", "UPDATE", origItem.Name);
- TaskManager.ItemId = item.Id;
+ TaskManager.StartTask("MAIL_DOMAIN", "UPDATE", origItem.Name, item.Id);
// get service
MailServer mail = new MailServer();
@@ -1148,8 +1140,7 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_MAIL_DOMAIN_IS_NOT_EMPTY; // mail domain is not empty
// place log record
- TaskManager.StartTask("MAIL_DOMAIN", "DELETE", origItem.Name);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("MAIL_DOMAIN", "DELETE", origItem.Name, itemId);
try
{
@@ -1222,10 +1213,9 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_DOMAIN_PACKAGE_ITEM_NOT_FOUND;
// place log record
- TaskManager.StartTask("MAIL_DOMAIN", "ADD_POINTER", mailDomain.Name);
- TaskManager.ItemId = itemId;
- TaskManager.TaskParameters["Domain ID"] = domain.DomainId;
- TaskManager.WriteParameter("Domain pointer", domain.DomainName);
+ TaskManager.StartTask("MAIL_DOMAIN", "ADD_POINTER", mailDomain.Name, itemId, new BackgroundTaskParameter("Domain ID", domain.DomainId));
+
+ TaskManager.WriteParameter("Domain pointer", domain.DomainName);
try
{
@@ -1277,10 +1267,12 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_DOMAIN_PACKAGE_ITEM_NOT_FOUND;
// place log record
- TaskManager.StartTask("MAIL_DOMAIN", "DELETE_POINTER", mailDomain.Name);
- TaskManager.ItemId = itemId;
- TaskManager.TaskParameters["Domain ID"] = domain.DomainId;
- TaskManager.WriteParameter("Domain pointer", domain.DomainName);
+
+ List parameters = new List();
+ parameters.Add(new BackgroundTaskParameter("Domain ID", domain.DomainId));
+ parameters.Add(new BackgroundTaskParameter("Domain pointer", domain.DomainName));
+
+ TaskManager.StartTask("MAIL_DOMAIN", "DELETE_POINTER", mailDomain.Name, itemId, parameters);
try
{
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/MailServers/QuotaLimit.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/MailServers/QuotaLimit.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/MailServers/QuotaLimit.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/MailServers/QuotaLimit.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/OperatingSystems/OperatingSystemController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/OperatingSystems/OperatingSystemController.cs
similarity index 95%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/OperatingSystems/OperatingSystemController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/OperatingSystems/OperatingSystemController.cs
index 238ec360..10a79b04 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/OperatingSystems/OperatingSystemController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/OperatingSystems/OperatingSystemController.cs
@@ -191,8 +191,7 @@ namespace WebsitePanel.EnterpriseServer
if (packageCheck < 0) return packageCheck;
// place log record
- TaskManager.StartTask("ODBC_DSN", "UPDATE", origItem.Name);
- TaskManager.ItemId = item.Id;
+ TaskManager.StartTask("ODBC_DSN", "UPDATE", origItem.Name, item.Id);
try
{
@@ -265,8 +264,7 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_OS_DSN_PACKAGE_ITEM_NOT_FOUND;
// place log record
- TaskManager.StartTask("ODBC_DSN", "DELETE", origItem.Name);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("ODBC_DSN", "DELETE", origItem.Name, itemId);
try
{
@@ -316,8 +314,7 @@ namespace WebsitePanel.EnterpriseServer
ServerInfo server = ServerController.GetServerById(serverId);
// place log record
- TaskManager.StartTask("SERVER", "RESET_TERMINAL_SESSION", sessionId);
- TaskManager.ItemId = serverId;
+ TaskManager.StartTask("SERVER", "RESET_TERMINAL_SESSION", sessionId, serverId);
try
{
@@ -352,8 +349,7 @@ namespace WebsitePanel.EnterpriseServer
ServerInfo server = ServerController.GetServerById(serverId);
// place log record
- TaskManager.StartTask("SERVER", "TERMINATE_SYSTEM_PROCESS", pid);
- TaskManager.ItemId = serverId;
+ TaskManager.StartTask("SERVER", "TERMINATE_SYSTEM_PROCESS", pid, serverId);
try
{
@@ -388,8 +384,7 @@ namespace WebsitePanel.EnterpriseServer
ServerInfo server = ServerController.GetServerById(serverId);
// place log record
- TaskManager.StartTask("SERVER", "CHANGE_WINDOWS_SERVICE_STATUS", id);
- TaskManager.ItemId = serverId;
+ TaskManager.StartTask("SERVER", "CHANGE_WINDOWS_SERVICE_STATUS", id, serverId);
TaskManager.WriteParameter("New Status", status);
try
@@ -555,8 +550,7 @@ namespace WebsitePanel.EnterpriseServer
| DemandAccount.IsActive);
if (accountCheck < 0) return accountCheck;
- TaskManager.StartTask("SERVER", "CLEAR_EVENT_LOG", logName);
- TaskManager.ItemId = serverId;
+ TaskManager.StartTask("SERVER", "CLEAR_EVENT_LOG", logName, serverId);
try
{
@@ -587,8 +581,7 @@ namespace WebsitePanel.EnterpriseServer
ServerInfo server = ServerController.GetServerById(serverId);
// place log record
- TaskManager.StartTask("SERVER", "REBOOT");
- TaskManager.ItemId = serverId;
+ TaskManager.StartTask("SERVER", "REBOOT", serverId);
try
{
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageAsyncWorker.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageAsyncWorker.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageAsyncWorker.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageAsyncWorker.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs
similarity index 97%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs
index 3363a13f..b8532151 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs
@@ -617,8 +617,12 @@ namespace WebsitePanel.EnterpriseServer
}
}
- TaskManager.ItemId = result.Result;
- TaskManager.TaskParameters["SendLetter"] = sendLetter;
+ BackgroundTask topTask = TaskManager.TopTask;
+
+ topTask.ItemId = userId;
+ topTask.UpdateParamValue("SendLetter", sendLetter);
+
+ TaskController.UpdateTaskWithParams(topTask);
return result;
}
@@ -718,10 +722,14 @@ namespace WebsitePanel.EnterpriseServer
if (homeId < 0)
result.Result = homeId;
- TaskManager.ItemId = result.Result;
- TaskManager.TaskParameters["Signup"] = signup;
- TaskManager.TaskParameters["UserId"] = userId;
- TaskManager.TaskParameters["SendLetter"] = sendLetter;
+ BackgroundTask topTask = TaskManager.TopTask;
+
+ topTask.ItemId = userId;
+ topTask.UpdateParamValue("Signup", signup);
+ topTask.UpdateParamValue("UserId", userId);
+ topTask.UpdateParamValue("SendLetter", sendLetter);
+
+ TaskController.UpdateTaskWithParams(topTask);
}
finally
{
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/ServiceItemsPaged.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/ServiceItemsPaged.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/ServiceItemsPaged.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/ServiceItemsPaged.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Properties/AssemblyInfo.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..3fd65c77
--- /dev/null
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("WebsitePanel.EnterpriseServer.Code")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("OM-3")]
+[assembly: AssemblyProduct("WebsitePanel.EnterpriseServer.Code")]
+[assembly: AssemblyCopyright("Copyright © OM-3 2013")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("e5f16c8f-9560-459d-88d4-9c6ee9b71283")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/BackupAsyncWorker.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupAsyncWorker.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/BackupAsyncWorker.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupAsyncWorker.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/BackupController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs
similarity index 95%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/BackupController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs
index a580954a..23d8864c 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/BackupController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs
@@ -31,6 +31,7 @@ using System.IO;
using System.Data;
using System.Text;
using System.Collections.Generic;
+using System.Threading;
using System.Xml;
using System.Security.Cryptography;
using System.Security.Cryptography.Xml;
@@ -116,10 +117,9 @@ namespace WebsitePanel.EnterpriseServer
{
try
{
- TaskManager.StartTask(taskId, "BACKUP", "BACKUP", backupFileName);
- TaskManager.ItemId = SecurityContext.User.UserId;
+ TaskManager.StartTask(taskId, "BACKUP", "BACKUP", backupFileName, SecurityContext.User.UserId);
- // get the list of items to backup
+ // get the list of items to backup
TaskManager.Write("Calculate items to backup");
List items = GetBackupItems(userId, packageId, serviceId, serverId);
@@ -210,7 +210,7 @@ namespace WebsitePanel.EnterpriseServer
// increment progress
TaskManager.IndicatorCurrent += 1;
- }
+ }
}
}
catch (Exception ex)
@@ -343,7 +343,11 @@ namespace WebsitePanel.EnterpriseServer
}
}
- TaskManager.IndicatorCurrent = TaskManager.IndicatorMaximum;
+ BackgroundTask topTask = TaskManager.TopTask;
+
+ topTask.IndicatorCurrent = topTask.IndicatorMaximum;
+
+ TaskController.UpdateTask(topTask);
}
catch (Exception ex)
{
@@ -490,8 +494,7 @@ namespace WebsitePanel.EnterpriseServer
string backupFileName = (storePackageId > 0)
? Path.GetFileName(storePackageBackupPath) : Path.GetFileName(storeServerBackupPath);
- TaskManager.StartTask(taskId, "BACKUP", "RESTORE", backupFileName);
- TaskManager.ItemId = SecurityContext.User.UserId;
+ TaskManager.StartTask(taskId, "BACKUP", "RESTORE", backupFileName, SecurityContext.User.UserId);
// create temp folder
string tempFolder = GetTempBackupFolder();
@@ -804,8 +807,7 @@ namespace WebsitePanel.EnterpriseServer
return true;
}
catch
- {
- //
+ { //
return false;
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/IBackupController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/IBackupController.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/IBackupController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/IBackupController.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/IImportController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/IImportController.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/IImportController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/IImportController.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/ImportAsyncWorker.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/ImportAsyncWorker.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/ImportAsyncWorker.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/ImportAsyncWorker.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/ImportController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/ImportController.cs
similarity index 97%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/ImportController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/ImportController.cs
index fef786d4..aaa74100 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/ImportController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/ImportController.cs
@@ -171,8 +171,7 @@ namespace WebsitePanel.EnterpriseServer
{
PackageInfo package = PackageController.GetPackage(packageId);
- TaskManager.StartTask(taskId, "IMPORT", "IMPORT", package.PackageName);
- TaskManager.ItemId = packageId;
+ TaskManager.StartTask(taskId, "IMPORT", "IMPORT", package.PackageName, packageId);
TaskManager.IndicatorMaximum = items.Length;
TaskManager.IndicatorCurrent = 0;
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/ActivatePaidInvoicesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/ActivatePaidInvoicesTask.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/ActivatePaidInvoicesTask.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/ActivatePaidInvoicesTask.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/BackupDatabaseTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupDatabaseTask.cs
similarity index 86%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/BackupDatabaseTask.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupDatabaseTask.cs
index fd545c4e..9a871c66 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/BackupDatabaseTask.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupDatabaseTask.cs
@@ -46,11 +46,13 @@ namespace WebsitePanel.EnterpriseServer
// - BACKUP_NAME
// - ZIP_BACKUP
- string databaseGroup = (string)TaskManager.TaskParameters["DATABASE_GROUP"];
- string databaseName = (string)TaskManager.TaskParameters["DATABASE_NAME"];
- string backupFolder = (string)TaskManager.TaskParameters["BACKUP_FOLDER"];
- string backupName = (string)TaskManager.TaskParameters["BACKUP_NAME"];
- string strZipBackup = (string)TaskManager.TaskParameters["ZIP_BACKUP"];
+ BackgroundTask topTask = TaskManager.TopTask;
+
+ string databaseGroup = (string)topTask.GetParamValue("DATABASE_GROUP");
+ string databaseName = (string)topTask.GetParamValue("DATABASE_NAME");
+ string backupFolder = (string)topTask.GetParamValue("BACKUP_FOLDER");
+ string backupName = (string)topTask.GetParamValue("BACKUP_NAME");
+ string strZipBackup = (string)topTask.GetParamValue("ZIP_BACKUP");
// check input parameters
if (String.IsNullOrEmpty(databaseName))
@@ -77,7 +79,7 @@ namespace WebsitePanel.EnterpriseServer
}
// try to find database
- SqlDatabase item = (SqlDatabase)PackageController.GetPackageItemByName(TaskManager.PackageId, databaseGroup,
+ SqlDatabase item = (SqlDatabase)PackageController.GetPackageItemByName(topTask.PackageId, databaseGroup,
databaseName, typeof(SqlDatabase));
if (item == null)
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/BackupTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs
similarity index 81%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/BackupTask.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs
index 8d04180d..92a30c81 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/BackupTask.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs
@@ -29,6 +29,7 @@
using System;
using System.Data;
using System.Configuration;
+using System.Threading;
using System.Web;
using System.Web.Security;
using System.Web.UI;
@@ -48,18 +49,22 @@ namespace WebsitePanel.EnterpriseServer
///
public override void DoWork()
{
+
string backupFileName;
int storePackageId;
string storePackageFolder;
string storeServerFolder;
bool deleteTempBackup;
+
+ BackgroundTask topTask = TaskManager.TopTask;
+
try
{
- backupFileName = (string)TaskManager.TaskParameters["BACKUP_FILE_NAME"];
- storePackageId = Convert.ToInt32(TaskManager.TaskParameters["STORE_PACKAGE_ID"]);
- storePackageFolder = (string)TaskManager.TaskParameters["STORE_PACKAGE_FOLDER"];
- storeServerFolder = (string)TaskManager.TaskParameters["STORE_SERVER_FOLDER"];
- deleteTempBackup = Convert.ToBoolean(TaskManager.TaskParameters["DELETE_TEMP_BACKUP"]);
+ backupFileName = (string)topTask.GetParamValue("BACKUP_FILE_NAME");
+ storePackageId = Convert.ToInt32(topTask.GetParamValue("STORE_PACKAGE_ID"));
+ storePackageFolder = (string)topTask.GetParamValue("STORE_PACKAGE_FOLDER");
+ storeServerFolder = (string)topTask.GetParamValue("STORE_SERVER_FOLDER");
+ deleteTempBackup = Convert.ToBoolean(topTask.GetParamValue("DELETE_TEMP_BACKUP"));
}
catch(Exception ex)
{
@@ -69,7 +74,7 @@ namespace WebsitePanel.EnterpriseServer
try
{
- PackageInfo package = PackageController.GetPackage(TaskManager.PackageId);
+ PackageInfo package = PackageController.GetPackage(topTask.PackageId);
// We do not take into account service id as long as scheduled tasks run against packages.
BackupController.Backup(false, "BackupTask", package.UserId, package.PackageId, 0, 0,
backupFileName, storePackageId, storePackageFolder, storeServerFolder, deleteTempBackup);
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs
similarity index 95%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs
index 1a8909a9..b6e477cc 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs
@@ -46,7 +46,7 @@ namespace WebsitePanel.EnterpriseServer
public void CalculateDiskspace()
{
// get all space organizations recursively
- List items = ExchangeServerController.GetExchangeOrganizations(TaskManager.PackageId, true);
+ List items = ExchangeServerController.GetExchangeOrganizations(TaskManager.TopTask.PackageId, true);
foreach (Organization item in items)
{
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs
similarity index 97%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs
index ccb91d16..995415f9 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs
@@ -51,7 +51,7 @@ namespace WebsitePanel.EnterpriseServer
public void CalculateBandwidth()
{
// get all owned packages
- List packages = PackageController.GetPackagePackages(TaskManager.PackageId, true);
+ List packages = PackageController.GetPackagePackages(TaskManager.TopTask.PackageId, true);
TaskManager.Write("Packages to calculate: " + packages.Count.ToString());
foreach (PackageInfo package in packages)
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs
similarity index 97%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs
index 7a744cf9..200648cc 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs
@@ -52,7 +52,7 @@ namespace WebsitePanel.EnterpriseServer
public void CalculateDiskspace()
{
// get all owned packages
- List packages = PackageController.GetPackagePackages(TaskManager.PackageId, true);
+ List packages = PackageController.GetPackagePackages(TaskManager.TopTask.PackageId, true);
TaskManager.Write("Packages to calculate: " + packages.Count.ToString());
foreach (PackageInfo package in packages)
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CancelOverdueInvoicesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CancelOverdueInvoicesTask.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CancelOverdueInvoicesTask.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CancelOverdueInvoicesTask.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CheckWebSiteTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CheckWebSiteTask.cs
similarity index 84%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CheckWebSiteTask.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CheckWebSiteTask.cs
index c16812d9..574e3d26 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CheckWebSiteTask.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CheckWebSiteTask.cs
@@ -57,17 +57,19 @@ namespace WebsitePanel.EnterpriseServer
// - MAIL_SUBJECT
// - MAIL_BODY
- // get input parameters
- string url = (string)TaskManager.TaskParameters["URL"];
- string username = (string)TaskManager.TaskParameters["USERNAME"];
- string password = (string)TaskManager.TaskParameters["PASSWORD"];
- string strResponseStatus = (string)TaskManager.TaskParameters["RESPONSE_STATUS"];
- string responseContains = (string)TaskManager.TaskParameters["RESPONSE_CONTAIN"];
- string responseNotContains = (string)TaskManager.TaskParameters["RESPONSE_DOESNT_CONTAIN"];
+ BackgroundTask topTask = TaskManager.TopTask;
- bool useResponseStatus = Convert.ToBoolean(TaskManager.TaskParameters["USE_RESPONSE_STATUS"]);
- bool useResponseContains = Convert.ToBoolean(TaskManager.TaskParameters["USE_RESPONSE_CONTAIN"]);
- bool useResponseDoesntContain = Convert.ToBoolean(TaskManager.TaskParameters["USE_RESPONSE_DOESNT_CONTAIN"]);
+ // get input parameters
+ string url = (string)topTask.GetParamValue("URL");
+ string username = (string)topTask.GetParamValue("USERNAME");
+ string password = (string)topTask.GetParamValue("PASSWORD");
+ string strResponseStatus = (string)topTask.GetParamValue("RESPONSE_STATUS");
+ string responseContains = (string)topTask.GetParamValue("RESPONSE_CONTAIN");
+ string responseNotContains = (string)topTask.GetParamValue("RESPONSE_DOESNT_CONTAIN");
+
+ bool useResponseStatus = Convert.ToBoolean(topTask.GetParamValue("USE_RESPONSE_STATUS"));
+ bool useResponseContains = Convert.ToBoolean(topTask.GetParamValue("USE_RESPONSE_CONTAIN"));
+ bool useResponseDoesntContain = Convert.ToBoolean(topTask.GetParamValue("USE_RESPONSE_DOESNT_CONTAIN"));
// check input parameters
if (String.IsNullOrEmpty(url))
@@ -126,11 +128,13 @@ namespace WebsitePanel.EnterpriseServer
private void SendMailMessage(string url, string message, string content)
{
+ BackgroundTask topTask = TaskManager.TopTask;
+
// input parameters
- string mailFrom = (string)TaskManager.TaskParameters["MAIL_FROM"];
- string mailTo = (string)TaskManager.TaskParameters["MAIL_TO"];
- string mailSubject = (string)TaskManager.TaskParameters["MAIL_SUBJECT"];
- string mailBody = (string)TaskManager.TaskParameters["MAIL_BODY"];
+ string mailFrom = (string)topTask.GetParamValue("MAIL_FROM");
+ string mailTo = (string)topTask.GetParamValue("MAIL_TO");
+ string mailSubject = (string)topTask.GetParamValue("MAIL_SUBJECT");
+ string mailBody = (string)topTask.GetParamValue("MAIL_BODY");
if (String.IsNullOrEmpty(mailTo))
{
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/FTPFilesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/FTPFilesTask.cs
similarity index 83%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/FTPFilesTask.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/FTPFilesTask.cs
index b069aa07..1738f145 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/FTPFilesTask.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/FTPFilesTask.cs
@@ -46,12 +46,14 @@ namespace WebsitePanel.EnterpriseServer
// - FTP_PASSWORD
// - FTP_FOLDER
+ BackgroundTask topTask = TaskManager.TopTask;
+
// get input parameters
- string filePath = (string)TaskManager.TaskParameters["FILE_PATH"];
- string ftpServer = (string)TaskManager.TaskParameters["FTP_SERVER"];
- string ftpUsername = (string)TaskManager.TaskParameters["FTP_USERNAME"];
- string ftpPassword = (string)TaskManager.TaskParameters["FTP_PASSWORD"];
- string ftpFolder = (string)TaskManager.TaskParameters["FTP_FOLDER"];
+ string filePath = (string)topTask.GetParamValue("FILE_PATH");
+ string ftpServer = (string)topTask.GetParamValue("FTP_SERVER");
+ string ftpUsername = (string)topTask.GetParamValue("FTP_USERNAME");
+ string ftpPassword = (string)topTask.GetParamValue("FTP_PASSWORD");
+ string ftpFolder = (string)topTask.GetParamValue("FTP_FOLDER");
// check input parameters
if (String.IsNullOrEmpty(filePath))
@@ -100,7 +102,7 @@ namespace WebsitePanel.EnterpriseServer
// file to send
writer.WriteLine("binary");
- writer.WriteLine("put " + FilesController.GetFullPackagePath(TaskManager.PackageId, filePath));
+ writer.WriteLine("put " + FilesController.GetFullPackagePath(topTask.PackageId, filePath));
// bye
writer.WriteLine("bye");
@@ -109,14 +111,14 @@ namespace WebsitePanel.EnterpriseServer
// create temp file in user space
string cmdPath = Utils.GetRandomString(10) + ".txt";
- string fullCmdPath = FilesController.GetFullPackagePath(TaskManager.PackageId, cmdPath);
+ string fullCmdPath = FilesController.GetFullPackagePath(topTask.PackageId, cmdPath);
// upload batch
- FilesController.UpdateFileBinaryContent(TaskManager.PackageId, cmdPath, Encoding.UTF8.GetBytes(cmdBatch));
+ FilesController.UpdateFileBinaryContent(topTask.PackageId, cmdPath, Encoding.UTF8.GetBytes(cmdBatch));
// execute system command
// load OS service
- int serviceId = PackageController.GetPackageServiceId(TaskManager.PackageId, ResourceGroups.Os);
+ int serviceId = PackageController.GetPackageServiceId(topTask.PackageId, ResourceGroups.Os);
// load service
ServiceInfo service = ServerController.GetServiceInfo(serviceId);
@@ -128,7 +130,7 @@ namespace WebsitePanel.EnterpriseServer
TaskManager.Write(winServer.ExecuteSystemCommand("ftp.exe", "-s:" + fullCmdPath));
// delete batch file
- FilesController.DeleteFiles(TaskManager.PackageId, new string[] { cmdPath });
+ FilesController.DeleteFiles(topTask.PackageId, new string[] { cmdPath });
}
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/GenerateInvoicesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/GenerateInvoicesTask.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/GenerateInvoicesTask.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/GenerateInvoicesTask.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/HostedSolutionReport.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/HostedSolutionReport.cs
similarity index 87%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/HostedSolutionReport.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/HostedSolutionReport.cs
index b82436df..fedeb3e8 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/HostedSolutionReport.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/HostedSolutionReport.cs
@@ -51,16 +51,18 @@ namespace WebsitePanel.EnterpriseServer
{
try
{
- bool isExchange = Utils.ParseBool(TaskManager.TaskParameters[EXCHANGE_REPORT], false);
- bool isSharePoint = Utils.ParseBool(TaskManager.TaskParameters[SHAREPOINT_REPORT], false);
- bool isLync = Utils.ParseBool(TaskManager.TaskParameters[LYNC_REPORT], false);
- bool isCRM = Utils.ParseBool(TaskManager.TaskParameters[CRM_REPORT], false);
- bool isOrganization = Utils.ParseBool(TaskManager.TaskParameters[ORGANIZATION_REPORT], false);
+ BackgroundTask topTask = TaskManager.TopTask;
- string email = TaskManager.TaskParameters[EMAIL].ToString();
+ bool isExchange = Utils.ParseBool(topTask.GetParamValue(EXCHANGE_REPORT), false);
+ bool isSharePoint = Utils.ParseBool(topTask.GetParamValue(SHAREPOINT_REPORT), false);
+ bool isLync = Utils.ParseBool(topTask.GetParamValue(LYNC_REPORT), false);
+ bool isCRM = Utils.ParseBool(topTask.GetParamValue(CRM_REPORT), false);
+ bool isOrganization = Utils.ParseBool(topTask.GetParamValue(ORGANIZATION_REPORT), false);
+
+ string email = topTask.GetParamValue(EMAIL).ToString();
- UserInfo user = PackageController.GetPackageOwner(TaskManager.PackageId);
+ UserInfo user = PackageController.GetPackageOwner(topTask.PackageId);
EnterpriseSolutionStatisticsReport report =
ReportController.GetEnterpriseSolutionStatisticsReport(user.UserId, isExchange, isSharePoint, isCRM,
isOrganization, isLync);
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs
similarity index 86%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs
index 5aae6dff..b38e5f38 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs
@@ -44,25 +44,27 @@ namespace WebsitePanel.EnterpriseServer
// - DISKSPACE_OVERUSED
// - BANDWIDTH_OVERUSED
+ BackgroundTask topTask = TaskManager.TopTask;
+
// get the list of all packages
- List packages = PackageController.GetPackagePackages(TaskManager.PackageId, false);
+ List packages = PackageController.GetPackagePackages(topTask.PackageId, false);
TaskManager.Write("Packages to verify: " + packages.Count.ToString());
- bool checkMSSQL = (String.Compare((string)TaskManager.TaskParameters["MSSQL_OVERUSED"], "true", true) == 0);
- bool checkMySQL = (String.Compare((string)TaskManager.TaskParameters["MYSQL_OVERUSED"], "true", true) == 0);
+ bool checkMSSQL = (String.Compare((string)topTask.GetParamValue("MSSQL_OVERUSED"), "true", true) == 0);
+ bool checkMySQL = (String.Compare((string)topTask.GetParamValue("MYSQL_OVERUSED"), "true", true) == 0);
- bool sendWarningEmail = Convert.ToBoolean(TaskManager.TaskParameters["SEND_WARNING_EMAIL"]);
- bool sendOverusedEmail = Convert.ToBoolean(TaskManager.TaskParameters["SEND_OVERUSED_EMAIL"]);
- int warningUsageThreshold = Convert.ToInt32(TaskManager.TaskParameters["WARNING_USAGE_THRESHOLD"]);
- int overusedUsageThreshold = Convert.ToInt32(TaskManager.TaskParameters["OVERUSED_USAGE_THRESHOLD"]);
- string warningMailFrom = Convert.ToString(TaskManager.TaskParameters["WARNING_MAIL_FROM"]);
- string warningMailBcc = Convert.ToString(TaskManager.TaskParameters["WARNING_MAIL_BCC"]);
- string warningMailSubject = Convert.ToString(TaskManager.TaskParameters["WARNING_MAIL_SUBJECT"]);
- string warningMailBody = Convert.ToString(TaskManager.TaskParameters["WARNING_MAIL_BODY"]);
- string overusedMailFrom = Convert.ToString(TaskManager.TaskParameters["OVERUSED_MAIL_FROM"]);
- string overusedMailBcc = Convert.ToString(TaskManager.TaskParameters["OVERUSED_MAIL_BCC"]);
- string overusedMailSubject = Convert.ToString(TaskManager.TaskParameters["OVERUSED_MAIL_SUBJECT"]);
- string overusedMailBody = Convert.ToString(TaskManager.TaskParameters["OVERUSED_MAIL_BODY"]);
+ bool sendWarningEmail = Convert.ToBoolean(topTask.GetParamValue("SEND_WARNING_EMAIL"));
+ bool sendOverusedEmail = Convert.ToBoolean(topTask.GetParamValue("SEND_OVERUSED_EMAIL"));
+ int warningUsageThreshold = Convert.ToInt32(topTask.GetParamValue("WARNING_USAGE_THRESHOLD"));
+ int overusedUsageThreshold = Convert.ToInt32(topTask.GetParamValue("OVERUSED_USAGE_THRESHOLD"));
+ string warningMailFrom = Convert.ToString(topTask.GetParamValue("WARNING_MAIL_FROM"));
+ string warningMailBcc = Convert.ToString(topTask.GetParamValue("WARNING_MAIL_BCC"));
+ string warningMailSubject = Convert.ToString(topTask.GetParamValue("WARNING_MAIL_SUBJECT"));
+ string warningMailBody = Convert.ToString(topTask.GetParamValue("WARNING_MAIL_BODY"));
+ string overusedMailFrom = Convert.ToString(topTask.GetParamValue("OVERUSED_MAIL_FROM"));
+ string overusedMailBcc = Convert.ToString(topTask.GetParamValue("OVERUSED_MAIL_BCC"));
+ string overusedMailSubject = Convert.ToString(topTask.GetParamValue("OVERUSED_MAIL_SUBJECT"));
+ string overusedMailBody = Convert.ToString(topTask.GetParamValue("OVERUSED_MAIL_BODY"));
int overusedPackages = 0;
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/RunPaymentQueueTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/RunPaymentQueueTask.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/RunPaymentQueueTask.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/RunPaymentQueueTask.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/RunSystemCommandTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/RunSystemCommandTask.cs
similarity index 88%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/RunSystemCommandTask.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/RunSystemCommandTask.cs
index 3dba9938..e05bf145 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/RunSystemCommandTask.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/RunSystemCommandTask.cs
@@ -42,10 +42,12 @@ namespace WebsitePanel.EnterpriseServer
// - SERVER_NAME
// - EXECUTABLE_PATH
+ BackgroundTask topTask = TaskManager.TopTask;
+
// get input parameters
- string serverName = (string)TaskManager.TaskParameters["SERVER_NAME"];
- string execPath = (string)TaskManager.TaskParameters["EXECUTABLE_PATH"];
- string execParams = (string)TaskManager.TaskParameters["EXECUTABLE_PARAMS"];
+ string serverName = (string)topTask.GetParamValue("SERVER_NAME");
+ string execPath = (string)topTask.GetParamValue("EXECUTABLE_PATH");
+ string execParams = (string)topTask.GetParamValue("EXECUTABLE_PARAMS");
if (execParams == null)
execParams = "";
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/SendMailNotificationTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SendMailNotificationTask.cs
similarity index 86%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/SendMailNotificationTask.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SendMailNotificationTask.cs
index 57e722ea..b7a0308f 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/SendMailNotificationTask.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SendMailNotificationTask.cs
@@ -42,11 +42,13 @@ namespace WebsitePanel.EnterpriseServer
// - MAIL_SUBJECT
// - MAIL_BODY
+ BackgroundTask topTask = TaskManager.TopTask;
+
// get input parameters
- string mailFrom = (string)TaskManager.TaskParameters["MAIL_FROM"];
- string mailTo = (string)TaskManager.TaskParameters["MAIL_TO"];
- string mailSubject = (string)TaskManager.TaskParameters["MAIL_SUBJECT"];
- string mailBody = (string)TaskManager.TaskParameters["MAIL_BODY"];
+ string mailFrom = (string)topTask.GetParamValue("MAIL_FROM");
+ string mailTo = (string)topTask.GetParamValue("MAIL_TO");
+ string mailSubject = (string)topTask.GetParamValue("MAIL_SUBJECT");
+ string mailBody = (string)topTask.GetParamValue("MAIL_BODY");
// check input parameters
if (String.IsNullOrEmpty(mailFrom))
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/SuspendOverdueInvoicesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SuspendOverdueInvoicesTask.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/SuspendOverdueInvoicesTask.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SuspendOverdueInvoicesTask.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/SuspendOverusedPackagesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SuspendOverusedPackagesTask.cs
similarity index 83%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/SuspendOverusedPackagesTask.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SuspendOverusedPackagesTask.cs
index 5fa58ce9..e7201be1 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/SuspendOverusedPackagesTask.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SuspendOverusedPackagesTask.cs
@@ -43,27 +43,29 @@ namespace WebsitePanel.EnterpriseServer
// - DISKSPACE_OVERUSED
// - BANDWIDTH_OVERUSED
+ BackgroundTask topTask = TaskManager.TopTask;
+
// get the list of all packages
- List packages = PackageController.GetPackagePackages(TaskManager.PackageId, false);
+ List packages = PackageController.GetPackagePackages(topTask.PackageId, false);
TaskManager.Write("Packages to verify: " + packages.Count.ToString());
- bool checkDiskspace = (String.Compare((string)TaskManager.TaskParameters["DISKSPACE_OVERUSED"], "true", true) == 0);
- bool checkBandwidth = (String.Compare((string)TaskManager.TaskParameters["BANDWIDTH_OVERUSED"], "true", true) == 0);
+ bool checkDiskspace = (String.Compare((string)topTask.GetParamValue("DISKSPACE_OVERUSED"), "true", true) == 0);
+ bool checkBandwidth = (String.Compare((string)topTask.GetParamValue("BANDWIDTH_OVERUSED"), "true", true) == 0);
- bool suspendOverused = Convert.ToBoolean(TaskManager.TaskParameters["SUSPEND_OVERUSED"]);
+ bool suspendOverused = Convert.ToBoolean(topTask.GetParamValue("SUSPEND_OVERUSED"));
- bool sendWarningEmail = Convert.ToBoolean(TaskManager.TaskParameters["SEND_WARNING_EMAIL"]);
- bool sendSuspensionEmail = Convert.ToBoolean(TaskManager.TaskParameters["SEND_SUSPENSION_EMAIL"]);
- int warningUsageThreshold = Convert.ToInt32(TaskManager.TaskParameters["WARNING_USAGE_THRESHOLD"]);
- int suspensionUsageThreshold = Convert.ToInt32(TaskManager.TaskParameters["SUSPENSION_USAGE_THRESHOLD"]);
- string warningMailFrom = Convert.ToString(TaskManager.TaskParameters["WARNING_MAIL_FROM"]);
- string warningMailBcc = Convert.ToString(TaskManager.TaskParameters["WARNING_MAIL_BCC"]);
- string warningMailSubject = Convert.ToString(TaskManager.TaskParameters["WARNING_MAIL_SUBJECT"]);
- string warningMailBody = Convert.ToString(TaskManager.TaskParameters["WARNING_MAIL_BODY"]);
- string suspensionMailFrom = Convert.ToString(TaskManager.TaskParameters["SUSPENSION_MAIL_FROM"]);
- string suspensionMailBcc = Convert.ToString(TaskManager.TaskParameters["SUSPENSION_MAIL_BCC"]);
- string suspensionMailSubject = Convert.ToString(TaskManager.TaskParameters["SUSPENSION_MAIL_SUBJECT"]);
- string suspensionMailBody = Convert.ToString(TaskManager.TaskParameters["SUSPENSION_MAIL_BODY"]);
+ bool sendWarningEmail = Convert.ToBoolean(topTask.GetParamValue("SEND_WARNING_EMAIL"));
+ bool sendSuspensionEmail = Convert.ToBoolean(topTask.GetParamValue("SEND_SUSPENSION_EMAIL"));
+ int warningUsageThreshold = Convert.ToInt32(topTask.GetParamValue("WARNING_USAGE_THRESHOLD"));
+ int suspensionUsageThreshold = Convert.ToInt32(topTask.GetParamValue("SUSPENSION_USAGE_THRESHOLD"));
+ string warningMailFrom = Convert.ToString(topTask.GetParamValue("WARNING_MAIL_FROM"));
+ string warningMailBcc = Convert.ToString(topTask.GetParamValue("WARNING_MAIL_BCC"));
+ string warningMailSubject = Convert.ToString(topTask.GetParamValue("WARNING_MAIL_SUBJECT"));
+ string warningMailBody = Convert.ToString(topTask.GetParamValue("WARNING_MAIL_BODY"));
+ string suspensionMailFrom = Convert.ToString(topTask.GetParamValue("SUSPENSION_MAIL_FROM"));
+ string suspensionMailBcc = Convert.ToString(topTask.GetParamValue("SUSPENSION_MAIL_BCC"));
+ string suspensionMailSubject = Convert.ToString(topTask.GetParamValue("SUSPENSION_MAIL_SUBJECT"));
+ string suspensionMailBody = Convert.ToString(topTask.GetParamValue("SUSPENSION_MAIL_BODY"));
int suspendedPackages = 0;
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/ZipFilesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/ZipFilesTask.cs
similarity index 88%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/ZipFilesTask.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/ZipFilesTask.cs
index 5f93c1ac..20247fee 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/ZipFilesTask.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/ZipFilesTask.cs
@@ -40,9 +40,11 @@ namespace WebsitePanel.EnterpriseServer
// - FOLDER
// - ZIP_FILE
+ BackgroundTask topTask = TaskManager.TopTask;
+
// get input parameters
- string filesList = (string)TaskManager.TaskParameters["FOLDER"];
- string zipFile = (string)TaskManager.TaskParameters["ZIP_FILE"];
+ string filesList = (string)topTask.GetParamValue("FOLDER");
+ string zipFile = (string)topTask.GetParamValue("ZIP_FILE");
// check input parameters
if (String.IsNullOrEmpty(filesList))
@@ -68,7 +70,7 @@ namespace WebsitePanel.EnterpriseServer
zipFile = Utils.ReplaceStringVariable(zipFile, "time", time);
// zip files and folders
- FilesController.ZipFiles(TaskManager.PackageId, new string[] { filesList }, zipFile);
+ FilesController.ZipFiles(topTask.PackageId, new string[] { filesList }, zipFile);
}
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/Scheduler.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs
similarity index 71%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/Scheduler.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs
index 268391b7..34b9ffbf 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/Scheduler.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs
@@ -28,6 +28,7 @@
using System;
using System.IO;
+using System.ServiceProcess;
using System.Threading;
using System.Collections;
using System.Diagnostics;
@@ -43,77 +44,91 @@ namespace WebsitePanel.EnterpriseServer
{
public static SchedulerJob nextSchedule = null;
- // main timer and put it to sleep
- static Timer scheduleTimer = new Timer(new TimerCallback(RunNextSchedule),
- null,
- Timeout.Infinite,
- Timeout.Infinite);
-
public static void Start()
- {
- // schedule tasks
+ {
ScheduleTasks();
}
public static bool IsScheduleActive(int scheduleId)
{
Dictionary scheduledTasks = TaskManager.GetScheduledTasks();
+
return scheduledTasks.ContainsKey(scheduleId);
}
- public static void StartSchedule(SchedulerJob schedule)
- {
- Dictionary scheduledTasks = TaskManager.GetScheduledTasks();
- if (scheduledTasks.ContainsKey(schedule.ScheduleInfo.ScheduleId))
- return;
-
- // run schedule
- RunSchedule(schedule, false);
- }
-
- public static void StopSchedule(SchedulerJob schedule)
- {
- Dictionary scheduledTasks = TaskManager.GetScheduledTasks();
- if (!scheduledTasks.ContainsKey(schedule.ScheduleInfo.ScheduleId))
- return;
-
- BackgroundTask activeTask = scheduledTasks[schedule.ScheduleInfo.ScheduleId];
- TaskManager.StopTask(activeTask.TaskId);
- }
-
public static void ScheduleTasks()
{
+ RunManualTasks();
+
nextSchedule = SchedulerController.GetNextSchedule();
- // set timer
if (nextSchedule != null)
{
if (nextSchedule.ScheduleInfo.NextRun <= DateTime.Now)
{
- // this will put the timer to sleep
- scheduleTimer.Change(Timeout.Infinite, Timeout.Infinite);
-
- System.Threading.Thread.Sleep(1000);
-
- // run immediately
RunNextSchedule(null);
}
- else
- {
- // set timer
- TimeSpan ts = nextSchedule.ScheduleInfo.NextRun.Subtract(DateTime.Now);
- if (ts < TimeSpan.Zero)
- ts = TimeSpan.Zero; // cannot be negative !
+ }
+ }
- // invoke after the timespan
- scheduleTimer.Change((long)ts.TotalMilliseconds, Timeout.Infinite);
+ private static void RunManualTasks()
+ {
+ var tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Stopping);
+
+ foreach (var task in tasks)
+ {
+ TaskManager.StopTask(task.TaskId);
+ }
+
+ tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Starting);
+
+ foreach (var task in tasks)
+ {
+ var taskThread = new Thread(() => RunBackgroundTask(task)) { Priority = ThreadPriority.Highest };
+ taskThread.Start();
+ TaskManager.AddTaskThread(task.Id, taskThread);
+ }
+ }
+
+ private static void RunBackgroundTask(BackgroundTask backgroundTask)
+ {
+ UserInfo user = PackageController.GetPackageOwner(backgroundTask.PackageId);
+
+ SecurityContext.SetThreadPrincipal(user.UserId);
+
+ var schedule = SchedulerController.GetScheduleComplete(backgroundTask.ScheduleId);
+
+ backgroundTask.Guid = TaskManager.Guid;
+ backgroundTask.Status = BackgroundTaskStatus.Run;
+
+
+ TaskController.UpdateTask(backgroundTask);
+
+ try
+ {
+ var objTask = (SchedulerTask)Activator.CreateInstance(Type.GetType(schedule.Task.TaskType));
+
+ objTask.DoWork();
+ }
+ catch (Exception ex)
+ {
+ TaskManager.WriteError(ex, "Error executing scheduled task");
+ }
+ finally
+ {
+ try
+ {
+ TaskManager.CompleteTask();
+ }
+ catch (Exception)
+ {
}
}
}
// call back for the timer function
static void RunNextSchedule(object obj) // obj ignored
- {
+ {
if (nextSchedule == null)
return;
@@ -125,8 +140,6 @@ namespace WebsitePanel.EnterpriseServer
static void RunSchedule(SchedulerJob schedule, bool changeNextRun)
{
-
-
try
{
// update next run (if required)
@@ -162,6 +175,8 @@ namespace WebsitePanel.EnterpriseServer
counter++;
}
+ if (counter == MAX_RETRY_COUNT)
+ return;
// skip execution if the current task is still running
scheduledTasks = TaskManager.GetScheduledTasks();
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/SchedulerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs
similarity index 84%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/SchedulerController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs
index 0fc85004..be434a2e 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/SchedulerController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs
@@ -31,6 +31,7 @@ using System.Data;
using System.Collections.Generic;
using System.Text;
using System.Xml;
+using System.Linq;
using WebsitePanel.EnterpriseServer.Base.Scheduling;
namespace WebsitePanel.EnterpriseServer
@@ -151,30 +152,74 @@ namespace WebsitePanel.EnterpriseServer
{
// check account
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo);
- if (accountCheck < 0) return accountCheck;
+
+ if (accountCheck < 0)
+ return accountCheck;
SchedulerJob schedule = GetScheduleComplete(scheduleId);
if (schedule == null)
return 0;
- Scheduler.StartSchedule(schedule);
+ if (TaskController.GetScheduleTasks(scheduleId).Any(x => x.Status == BackgroundTaskStatus.Run
+ || x.Status == BackgroundTaskStatus.Starting))
+ return 0;
+
+ var parameters = schedule.ScheduleInfo.Parameters.Select(
+ prm => new BackgroundTaskParameter(prm.ParameterId, prm.ParameterValue)).ToList();
+
+ var userInfo = PackageController.GetPackageOwner(schedule.ScheduleInfo.PackageId);
+
+ var backgroundTask = new BackgroundTask(
+ Guid.NewGuid(),
+ Guid.NewGuid().ToString("N"),
+ userInfo.OwnerId == 0 ? userInfo.UserId : userInfo.OwnerId,
+ userInfo.UserId,
+ "SCHEDULER",
+ "RUN_SCHEDULE",
+ schedule.ScheduleInfo.ScheduleName,
+ schedule.ScheduleInfo.ScheduleId,
+ schedule.ScheduleInfo.ScheduleId,
+ schedule.ScheduleInfo.PackageId,
+ schedule.ScheduleInfo.MaxExecutionTime, parameters)
+ {
+ Status = BackgroundTaskStatus.Starting
+ };
+
+ TaskController.AddTask(backgroundTask);
+
+ // update next run (if required)
+ CalculateNextStartTime(schedule.ScheduleInfo);
+
+ // disable run once task
+ if (schedule.ScheduleInfo.ScheduleType == ScheduleType.OneTime)
+ schedule.ScheduleInfo.Enabled = false;
+
+ schedule.ScheduleInfo.LastRun = DateTime.Now;
+ UpdateSchedule(schedule.ScheduleInfo);
return 0;
- }
+ }
public static int StopSchedule(int scheduleId)
{
- // check account
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo);
- if (accountCheck < 0) return accountCheck;
+ if (accountCheck < 0)
+ return accountCheck;
+
SchedulerJob schedule = GetScheduleComplete(scheduleId);
if (schedule == null)
return 0;
- Scheduler.StopSchedule(schedule);
-
+ foreach (BackgroundTask task in TaskController.GetScheduleTasks(scheduleId))
+ {
+ task.Status = BackgroundTaskStatus.Stopping;
+
+ TaskController.UpdateTask(task);
+ }
+
return 0;
+
}
public static void CalculateNextStartTime(ScheduleInfo schedule)
@@ -275,7 +320,7 @@ namespace WebsitePanel.EnterpriseServer
schedule.HistoriesNumber, schedule.MaxExecutionTime, schedule.WeekMonthDay, xmlParameters);
// re-schedule tasks
- Scheduler.ScheduleTasks();
+ //Scheduler.ScheduleTasks();
return scheduleId;
}
@@ -301,7 +346,7 @@ namespace WebsitePanel.EnterpriseServer
schedule.HistoriesNumber, schedule.MaxExecutionTime, schedule.WeekMonthDay, xmlParameters);
// re-schedule tasks
- Scheduler.ScheduleTasks();
+ //Scheduler.ScheduleTasks();
return 0;
}
@@ -336,7 +381,7 @@ namespace WebsitePanel.EnterpriseServer
DataProvider.DeleteSchedule(SecurityContext.User.UserId, scheduleId);
// re-schedule tasks
- Scheduler.ScheduleTasks();
+ //Scheduler.ScheduleTasks();
return 0;
}
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/SchedulerJob.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs
similarity index 87%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/SchedulerJob.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs
index c29be3fd..7b9d2efd 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/SchedulerJob.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs
@@ -66,7 +66,6 @@ namespace WebsitePanel.EnterpriseServer
{
// create worker
Thread worker = new Thread(new ThreadStart(RunSchedule));
-
// set worker priority
switch (scheduleInfo.Priority)
{
@@ -89,15 +88,15 @@ namespace WebsitePanel.EnterpriseServer
UserInfo user = PackageController.GetPackageOwner(scheduleInfo.PackageId);
SecurityContext.SetThreadPrincipal(user.UserId);
- TaskManager.StartTask("SCHEDULER", "RUN_SCHEDULE", scheduleInfo.ScheduleName);
- TaskManager.PackageId = scheduleInfo.PackageId;
- TaskManager.ItemId = scheduleInfo.ScheduleId;
- TaskManager.ScheduleId = scheduleInfo.ScheduleId;
- TaskManager.MaximumExecutionTime = scheduleInfo.MaxExecutionTime;
-
- // set task parameters
+ List parameters = new List();
foreach (ScheduleTaskParameterInfo prm in scheduleInfo.Parameters)
- TaskManager.TaskParameters[prm.ParameterId] = prm.ParameterValue;
+ {
+ parameters.Add(new BackgroundTaskParameter(prm.ParameterId, prm.ParameterValue));
+ }
+
+ TaskManager.StartTask("SCHEDULER", "RUN_SCHEDULE", scheduleInfo.ScheduleName, scheduleInfo.ScheduleId,
+ scheduleInfo.ScheduleId, scheduleInfo.PackageId, scheduleInfo.MaxExecutionTime,
+ parameters);
// run task
try
@@ -109,7 +108,8 @@ namespace WebsitePanel.EnterpriseServer
objTask.DoWork();
else
throw new Exception(String.Format("Could not create scheduled task of '{0}' type",
- task.TaskType));
+ task.TaskType));
+ // Thread.Sleep(40000);
}
catch (Exception ex)
{
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs
similarity index 95%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs
index b1cd15f0..61e838a6 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs
@@ -265,6 +265,7 @@ namespace WebsitePanel.EnterpriseServer
}
TaskManager.ItemId = serverId;
+
TaskManager.CompleteTask();
return serverId;
@@ -277,12 +278,10 @@ namespace WebsitePanel.EnterpriseServer
| DemandAccount.IsAdmin);
if (accountCheck < 0) return accountCheck;
- TaskManager.StartTask("SERVER", "UPDATE");
- TaskManager.ItemId = server.ServerId;
-
// get original server
ServerInfo origServer = GetServerByIdInternal(server.ServerId);
- TaskManager.ItemName = origServer.ServerName;
+
+ TaskManager.StartTask("SERVER", "UPDATE", origServer.ServerName, server.ServerId);
// preserve passwords
server.Password = origServer.Password;
@@ -313,12 +312,10 @@ namespace WebsitePanel.EnterpriseServer
| DemandAccount.IsAdmin);
if (accountCheck < 0) return accountCheck;
- TaskManager.StartTask("SERVER", "UPDATE_PASSWORD");
- TaskManager.ItemId = serverId;
-
// get original server
ServerInfo server = GetServerByIdInternal(serverId);
- TaskManager.ItemName = server.ServerName;
+
+ TaskManager.StartTask("SERVER", "UPDATE_PASSWORD", server.ServerName, serverId);
// set password
server.Password = password;
@@ -341,12 +338,10 @@ namespace WebsitePanel.EnterpriseServer
| DemandAccount.IsAdmin);
if (accountCheck < 0) return accountCheck;
- TaskManager.StartTask("SERVER", "UPDATE_AD_PASSWORD");
- TaskManager.ItemId = serverId;
-
// get original server
ServerInfo server = GetServerByIdInternal(serverId);
- TaskManager.ItemName = server.ServerName;
+
+ TaskManager.StartTask("SERVER", "UPDATE_AD_PASSWORD", server.ServerName, serverId);
// set password
server.ADPassword = adPassword;
@@ -369,12 +364,10 @@ namespace WebsitePanel.EnterpriseServer
| DemandAccount.IsAdmin);
if (accountCheck < 0) return accountCheck;
- TaskManager.StartTask("SERVER", "DELETE");
- TaskManager.ItemId = serverId;
-
// get original server
ServerInfo server = GetServerByIdInternal(serverId);
- TaskManager.ItemName = server.ServerName;
+
+ TaskManager.StartTask("SERVER", "DELETE", server.ServerName, serverId);
try
{
@@ -427,10 +420,9 @@ namespace WebsitePanel.EnterpriseServer
| DemandAccount.IsActive);
if (accountCheck < 0) return accountCheck;
- TaskManager.StartTask("VIRTUAL_SERVER", "ADD_SERVICES");
ServerInfo server = GetServerByIdInternal(serverId);
- TaskManager.ItemId = serverId;
- TaskManager.ItemName = server.ServerName;
+
+ TaskManager.StartTask("VIRTUAL_SERVER", "ADD_SERVICES", server.ServerName, serverId);
// build XML
string xml = BuildXmlFromArray(ids, "services", "service");
@@ -450,10 +442,9 @@ namespace WebsitePanel.EnterpriseServer
| DemandAccount.IsActive);
if (accountCheck < 0) return accountCheck;
- TaskManager.StartTask("VIRTUAL_SERVER", "DELETE_SERVICES");
ServerInfo server = GetServerByIdInternal(serverId);
- TaskManager.ItemId = serverId;
- TaskManager.ItemName = server.ServerName;
+
+ TaskManager.StartTask("VIRTUAL_SERVER", "DELETE_SERVICES", server.ServerName, serverId);
// build XML
string xml = BuildXmlFromArray(ids, "services", "service");
@@ -585,9 +576,8 @@ namespace WebsitePanel.EnterpriseServer
| DemandAccount.IsActive);
if (accountCheck < 0) return accountCheck;
- TaskManager.StartTask("SERVER", "ADD_SERVICE");
- TaskManager.ItemId = service.ServerId;
- TaskManager.ItemName = GetServerByIdInternal(service.ServerId).ServerName;
+ TaskManager.StartTask("SERVER", "ADD_SERVICE", GetServerByIdInternal(service.ServerId).ServerName, service.ServerId);
+
TaskManager.WriteParameter("Service name", service.ServiceName);
TaskManager.WriteParameter("Provider", service.ProviderId);
@@ -641,9 +631,8 @@ namespace WebsitePanel.EnterpriseServer
// load original service
ServiceInfo origService = GetServiceInfo(service.ServiceId);
- TaskManager.StartTask("SERVER", "UPDATE_SERVICE");
- TaskManager.ItemId = origService.ServerId;
- TaskManager.ItemName = GetServerByIdInternal(origService.ServerId).ServerName;
+ TaskManager.StartTask("SERVER", "UPDATE_SERVICE", GetServerByIdInternal(origService.ServerId).ServerName, origService.ServerId);
+
TaskManager.WriteParameter("New service name", service.ServiceName);
DataProvider.UpdateService(service.ServiceId, service.ServiceName,
@@ -663,9 +652,8 @@ namespace WebsitePanel.EnterpriseServer
ServiceInfo service = GetServiceInfoAdmin(serviceId);
- TaskManager.StartTask("SERVER", "DELETE_SERVICE");
- TaskManager.ItemId = service.ServerId;
- TaskManager.ItemName = GetServerByIdInternal(service.ServerId).ServerName;
+ TaskManager.StartTask("SERVER", "DELETE_SERVICE", GetServerByIdInternal(service.ServerId).ServerName, service.ServerId);
+
TaskManager.WriteParameter("Service name", service.ServiceName);
try
@@ -926,8 +914,8 @@ namespace WebsitePanel.EnterpriseServer
#endregion
// start task
- res = TaskManager.StartResultTask("IP_ADDRESS", "ADD");
- TaskManager.ItemName = externalIP;
+ res = TaskManager.StartResultTask("IP_ADDRESS", "ADD", externalIP);
+
TaskManager.WriteParameter("IP Address", externalIP);
TaskManager.WriteParameter("NAT Address", internalIP);
@@ -961,8 +949,8 @@ namespace WebsitePanel.EnterpriseServer
#endregion
// start task
- res = TaskManager.StartResultTask("IP_ADDRESS", "ADD_RANGE");
- TaskManager.ItemName = externalIP;
+ res = TaskManager.StartResultTask("IP_ADDRESS", "ADD_RANGE", externalIP);
+
TaskManager.WriteParameter("IP Address", externalIP);
TaskManager.WriteParameter("End IP Address", endIP);
TaskManager.WriteParameter("NAT Address", internalIP);
@@ -1251,8 +1239,7 @@ namespace WebsitePanel.EnterpriseServer
if (addressesNumber > maxAvailableIPs)
addressesNumber = maxAvailableIPs;
- res = TaskManager.StartResultTask("IP_ADDRESS", "ALLOCATE_PACKAGE_IP");
- TaskManager.PackageId = packageId;
+ res = TaskManager.StartResultTask("IP_ADDRESS", "ALLOCATE_PACKAGE_IP", packageId);
try
{
@@ -1337,8 +1324,8 @@ namespace WebsitePanel.EnterpriseServer
return res;
#endregion
- res = TaskManager.StartResultTask("IP_ADDRESS", "DEALLOCATE_PACKAGE_IP");
- TaskManager.PackageId = packageId;
+ res = TaskManager.StartResultTask("IP_ADDRESS", "DEALLOCATE_PACKAGE_IP", packageId);
+
try
{
foreach (int id in addressId)
@@ -1876,11 +1863,7 @@ namespace WebsitePanel.EnterpriseServer
*/
// place log record
- TaskManager.StartTask("DOMAIN", "ADD", domainName);
- TaskManager.PackageId = packageId;
- TaskManager.TaskParameters["CreateZone"] = createDnsZone;
-
-
+ TaskManager.StartTask("DOMAIN", "ADD", domainName, 0, packageId, new BackgroundTaskParameter("CreateZone", createDnsZone));
// create DNS zone
int zoneItemId = 0;
@@ -1911,6 +1894,7 @@ namespace WebsitePanel.EnterpriseServer
packageId, zoneItemId, domainName, allowSubDomains, 0, 0, isSubDomain, isInstantAlias, isDomainPointer);
TaskManager.ItemId = itemId;
+
TaskManager.CompleteTask();
return itemId;
@@ -2041,8 +2025,7 @@ namespace WebsitePanel.EnterpriseServer
// place log record
DomainInfo origDomain = GetDomain(domain.DomainId);
- TaskManager.StartTask("DOMAIN", "UPDATE", origDomain.DomainName);
- TaskManager.ItemId = domain.DomainId;
+ TaskManager.StartTask("DOMAIN", "UPDATE", origDomain.DomainName, domain.DomainId);
try
{
@@ -2074,8 +2057,7 @@ namespace WebsitePanel.EnterpriseServer
return 0;
// place log record
- TaskManager.StartTask("DOMAIN", "DETACH", domain.DomainName);
- TaskManager.ItemId = domain.DomainId;
+ TaskManager.StartTask("DOMAIN", "DETACH", domain.DomainName, domain.DomainId);
try
{
@@ -2143,8 +2125,7 @@ namespace WebsitePanel.EnterpriseServer
return 0;
// place log record
- TaskManager.StartTask("DOMAIN", "DELETE", domain.DomainName);
- TaskManager.ItemId = domain.DomainId;
+ TaskManager.StartTask("DOMAIN", "DELETE", domain.DomainName, domain.DomainId);
try
{
@@ -2223,8 +2204,7 @@ namespace WebsitePanel.EnterpriseServer
return 0;
// place log record
- TaskManager.StartTask("DOMAIN", "DISABLE_DNS", domain.DomainName);
- TaskManager.ItemId = domain.DomainId;
+ TaskManager.StartTask("DOMAIN", "DISABLE_DNS", domain.DomainName, domain.DomainId);
try
{
@@ -2270,8 +2250,7 @@ namespace WebsitePanel.EnterpriseServer
return 0;
// place log record
- TaskManager.StartTask("DOMAIN", "ENABLE_DNS", domain.DomainName);
- TaskManager.ItemId = domain.DomainId;
+ TaskManager.StartTask("DOMAIN", "ENABLE_DNS", domain.DomainName, domain.DomainId);
try
{
@@ -2475,8 +2454,7 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_INSTANT_ALIAS_IS_NOT_CONFIGURED;
// place log record
- TaskManager.StartTask("DOMAIN", "CREATE_INSTANT_ALIAS", domain.DomainName);
- TaskManager.ItemId = domain.DomainId;
+ TaskManager.StartTask("DOMAIN", "CREATE_INSTANT_ALIAS", domain.DomainName, domain.DomainId);
try
{
@@ -2560,8 +2538,7 @@ namespace WebsitePanel.EnterpriseServer
return 0;
// place log record
- TaskManager.StartTask("DOMAIN", "DELETE_INSTANT_ALIAS", domain.DomainName);
- TaskManager.ItemId = domain.DomainId;
+ TaskManager.StartTask("DOMAIN", "DELETE_INSTANT_ALIAS", domain.DomainName, domain.DomainId);
try
{
@@ -2695,8 +2672,7 @@ namespace WebsitePanel.EnterpriseServer
return 0;
// place log record
- TaskManager.StartTask("DNS_ZONE", "ADD_RECORD", domain.DomainName);
- TaskManager.ItemId = domain.ZoneItemId;
+ TaskManager.StartTask("DNS_ZONE", "ADD_RECORD", domain.DomainName, domain.ZoneItemId);
try
{
@@ -2736,8 +2712,7 @@ namespace WebsitePanel.EnterpriseServer
{
// place log record
DomainInfo domain = GetDomain(domainId);
- TaskManager.StartTask("DNS_ZONE", "UPDATE_RECORD", domain.DomainName);
- TaskManager.ItemId = domain.ZoneItemId;
+ TaskManager.StartTask("DNS_ZONE", "UPDATE_RECORD", domain.DomainName, domain.ZoneItemId);
try
{
@@ -2783,8 +2758,7 @@ namespace WebsitePanel.EnterpriseServer
try
{
// place log record
- TaskManager.StartTask("DNS_ZONE", "DELETE_RECORD", domain.DomainName);
- TaskManager.ItemId = domain.ZoneItemId;
+ TaskManager.StartTask("DNS_ZONE", "DELETE_RECORD", domain.DomainName, domain.ZoneItemId);
DNSServer dns = new DNSServer();
ServiceProviderProxy.Init(dns, zoneItem.ServiceId);
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/HostedSharePointServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SharePoint/HostedSharePointServerController.cs
similarity index 97%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/HostedSharePointServerController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SharePoint/HostedSharePointServerController.cs
index eebff84b..886936a1 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/HostedSharePointServerController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SharePoint/HostedSharePointServerController.cs
@@ -341,6 +341,7 @@ namespace WebsitePanel.EnterpriseServer.Code.SharePoint
}
TaskManager.ItemId = itemId;
+
return itemId;
}
catch (Exception ex)
@@ -380,8 +381,7 @@ namespace WebsitePanel.EnterpriseServer.Code.SharePoint
string siteName = origItem.Name.Replace(String.Format("{0}://", rootWebApplicationUri.Scheme), String.Empty);
// Log operation.
- TaskManager.StartTask("HOSTEDSHAREPOINT", "DELETE_SITE", origItem.Name);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("HOSTEDSHAREPOINT", "DELETE_SITE", origItem.Name, itemId);
try
{
@@ -459,8 +459,7 @@ namespace WebsitePanel.EnterpriseServer.Code.SharePoint
}
// Log operation.
- TaskManager.StartTask("HOSTEDSHAREPOINT", "BACKUP_SITE_COLLECTION", origItem.Name);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("HOSTEDSHAREPOINT", "BACKUP_SITE_COLLECTION", origItem.Name, itemId);
try
{
@@ -550,8 +549,7 @@ namespace WebsitePanel.EnterpriseServer.Code.SharePoint
}
// Log operation.
- TaskManager.StartTask("HOSTEDSHAREPOINT", "BACKUP_SITE_COLLECTION", origItem.Name);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("HOSTEDSHAREPOINT", "BACKUP_SITE_COLLECTION", origItem.Name, itemId);
try
{
@@ -850,8 +848,7 @@ namespace WebsitePanel.EnterpriseServer.Code.SharePoint
if (accountCheck < 0) return accountCheck;
// place log record
- TaskManager.StartTask("HOSTED_SHAREPOINT", "SET_ORG_LIMITS");
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("HOSTED_SHAREPOINT", "SET_ORG_LIMITS", itemId);
try
{
@@ -923,8 +920,8 @@ namespace WebsitePanel.EnterpriseServer.Code.SharePoint
}
// place log record
- TaskManager.StartTask("HOSTED_SHAREPOINT", "CALCULATE_DISK_SPACE");
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("HOSTED_SHAREPOINT", "CALCULATE_DISK_SPACE", itemId);
+
try
{
Organization org = (Organization)PackageController.GetPackageItem(itemId);
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/SharePointServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SharePoint/SharePointServerController.cs
similarity index 96%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/SharePointServerController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SharePoint/SharePointServerController.cs
index 63382be7..f516bfa6 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/SharePointServerController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SharePoint/SharePointServerController.cs
@@ -268,8 +268,7 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_SHAREPOINT_PACKAGE_ITEM_NOT_FOUND;
// place log record
- TaskManager.StartTask("SHAREPOINT", "DELETE_SITE", origItem.Name);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("SHAREPOINT", "DELETE_SITE", origItem.Name, itemId);
try
{
@@ -340,8 +339,7 @@ namespace WebsitePanel.EnterpriseServer
return null;
// place log record
- TaskManager.StartTask("SHAREPOINT", "BACKUP_SITE", item.Name);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("SHAREPOINT", "BACKUP_SITE", item.Name, itemId);
try
{
@@ -432,8 +430,7 @@ namespace WebsitePanel.EnterpriseServer
if (packageCheck < 0) return packageCheck;
// place log record
- TaskManager.StartTask("SHAREPOINT", "RESTORE_SITE", item.Name);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("SHAREPOINT", "RESTORE_SITE", item.Name, itemId);
try
{
@@ -520,8 +517,8 @@ namespace WebsitePanel.EnterpriseServer
if (packageCheck < 0) return packageCheck;
// place log record
- TaskManager.StartTask("SHAREPOINT", "INSTALL_WEBPARTS", item.Name);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("SHAREPOINT", "INSTALL_WEBPARTS", item.Name, itemId);
+
TaskManager.WriteParameter("Package file", packageFile);
try
@@ -592,8 +589,8 @@ namespace WebsitePanel.EnterpriseServer
if (packageCheck < 0) return packageCheck;
// place log record
- TaskManager.StartTask("SHAREPOINT", "UNINSTALL_WEBPARTS", item.Name);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("SHAREPOINT", "UNINSTALL_WEBPARTS", item.Name, itemId);
+
TaskManager.WriteParameter("Package name", packageName);
try
@@ -736,8 +733,7 @@ namespace WebsitePanel.EnterpriseServer
if (packageCheck < 0) return packageCheck;
// place log record
- TaskManager.StartTask("SHAREPOINT", "UPDATE_USER", origItem.Name);
- TaskManager.ItemId = item.Id;
+ TaskManager.StartTask("SHAREPOINT", "UPDATE_USER", origItem.Name, item.Id);
try
{
@@ -785,8 +781,7 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_SHAREPOINT_USERS_PACKAGE_ITEM_NOT_FOUND;
// place log record
- TaskManager.StartTask("SHAREPOINT", "DELETE_USER", origItem.Name);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("SHAREPOINT", "DELETE_USER", origItem.Name, itemId);
try
{
@@ -925,8 +920,7 @@ namespace WebsitePanel.EnterpriseServer
if (packageCheck < 0) return packageCheck;
// place log record
- TaskManager.StartTask("SHAREPOINT", "UPDATE_GROUP", origItem.Name);
- TaskManager.ItemId = item.Id;
+ TaskManager.StartTask("SHAREPOINT", "UPDATE_GROUP", origItem.Name, item.Id);
try
{
@@ -962,8 +956,7 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_SHAREPOINT_GROUPS_PACKAGE_ITEM_NOT_FOUND;
// place log record
- TaskManager.StartTask("SHAREPOINT", "DELETE_GROUP", origItem.Name);
- TaskManager.ItemId = itemId;
+ TaskManager.StartTask("SHAREPOINT", "DELETE_GROUP", origItem.Name, itemId);
try
{
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/StatisticsServers/StatisticsServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/StatisticsServers/StatisticsServerController.cs
similarity index 96%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/StatisticsServers/StatisticsServerController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/StatisticsServers/StatisticsServerController.cs
index 1f060c99..29b33e14 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/StatisticsServers/StatisticsServerController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/StatisticsServers/StatisticsServerController.cs
@@ -226,8 +226,7 @@ namespace WebsitePanel.EnterpriseServer
item.SiteId = origItem.SiteId;
// place log record
- TaskManager.StartTask("STATS_SITE", "UPDATE", origItem.Name);
- TaskManager.ItemId = origItem.Id;
+ TaskManager.StartTask("STATS_SITE", "UPDATE", origItem.Name, origItem.Id);
try
{
@@ -263,8 +262,7 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_STATS_PACKAGE_ITEM_NOT_FOUND;
// place log record
- TaskManager.StartTask("STATS_SITE", "DELETE", origItem.Name);
- TaskManager.ItemId = origItem.Id;
+ TaskManager.StartTask("STATS_SITE", "DELETE", origItem.Name, itemId);
try
{
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/System/SystemController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/System/SystemController.cs
similarity index 94%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/System/SystemController.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/System/SystemController.cs
index 322e30d6..3f010eec 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/System/SystemController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/System/SystemController.cs
@@ -119,7 +119,7 @@ namespace WebsitePanel.EnterpriseServer
return 0;
}
- internal static bool GetSystemSetupMode()
+ public static bool GetSystemSetupMode()
{
var scpaSystemSettings = GetSystemSettings(SystemSettings.SETUP_SETTINGS);
// Flag either not found or empty
@@ -131,7 +131,7 @@ namespace WebsitePanel.EnterpriseServer
return true;
}
- internal static int SetupControlPanelAccounts(string passwordA, string passwordB, string ip)
+ public static int SetupControlPanelAccounts(string passwordA, string passwordB, string ip)
{
try
{
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Tasks/SendEmailNotification.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/SendEmailNotification.cs
similarity index 76%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Tasks/SendEmailNotification.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/SendEmailNotification.cs
index 67d246b2..e36eacb6 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Tasks/SendEmailNotification.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/SendEmailNotification.cs
@@ -40,23 +40,25 @@ namespace WebsitePanel.EnterpriseServer.Tasks
public override void OnComplete()
{
- if (!TaskManager.HasErrors)
+ BackgroundTask topTask = TaskManager.TopTask;
+
+ if (!TaskManager.HasErrors(topTask))
{
// Send user add notification
- if (TaskManager.TaskSource == "USER" &&
- TaskManager.TaskName == "ADD" && TaskManager.ItemId > 0)
+ if (topTask.Source == "USER" &&
+ topTask.TaskName == "ADD" && topTask.ItemId > 0)
{
SendAddUserNotification();
}
// Send hosting package add notification
- if (TaskManager.TaskSource == "HOSTING_SPACE"
- && TaskManager.TaskName == "ADD" && TaskManager.ItemId > 0)
+ if (topTask.Source == "HOSTING_SPACE"
+ && topTask.TaskName == "ADD" && topTask.ItemId > 0)
{
SendAddPackageNotification();
}
// Send hosting package add notification
- if (TaskManager.TaskSource == "HOSTING_SPACE_WR"
- && TaskManager.TaskName == "ADD" && TaskManager.ItemId > 0)
+ if (topTask.Source == "HOSTING_SPACE_WR"
+ && topTask.TaskName == "ADD" && topTask.ItemId > 0)
{
SendAddPackageWithResourcesNotification();
}
@@ -76,10 +78,13 @@ namespace WebsitePanel.EnterpriseServer.Tasks
{
try
{
- bool sendLetter = (bool)TaskManager.TaskParameters["SendLetter"];
+ BackgroundTask topTask = TaskManager.TopTask;
+
+ bool sendLetter = Utils.ParseBool(topTask.GetParamValue("SendLetter"), false);
+
if (sendLetter)
{
- int sendResult = PackageController.SendPackageSummaryLetter(TaskManager.ItemId, null, null, true);
+ int sendResult = PackageController.SendPackageSummaryLetter(topTask.ItemId, null, null, true);
CheckSmtpResult(sendResult);
}
}
@@ -93,9 +98,12 @@ namespace WebsitePanel.EnterpriseServer.Tasks
{
try
{
- int userId = (int)TaskManager.TaskParameters["UserId"];
- bool sendLetter = (bool)TaskManager.TaskParameters["SendLetter"];
- bool signup = (bool)TaskManager.TaskParameters["Signup"];
+ BackgroundTask topTask = TaskManager.TopTask;
+
+ int userId = Utils.ParseInt(topTask.GetParamValue("UserId").ToString(), 0);
+ bool sendLetter = Utils.ParseBool(topTask.GetParamValue("SendLetter"), false);
+ bool signup = Utils.ParseBool(topTask.GetParamValue("Signup"), false);
+
// send space letter if enabled
UserSettings settings = UserController.GetUserSettings(userId, UserSettings.PACKAGE_SUMMARY_LETTER);
if (sendLetter
@@ -103,7 +111,7 @@ namespace WebsitePanel.EnterpriseServer.Tasks
&& Utils.ParseBool(settings["EnableLetter"], false))
{
// send letter
- int smtpResult = PackageController.SendPackageSummaryLetter(TaskManager.ItemId, null, null, signup);
+ int smtpResult = PackageController.SendPackageSummaryLetter(topTask.ItemId, null, null, signup);
CheckSmtpResult(smtpResult);
}
}
@@ -117,8 +125,11 @@ namespace WebsitePanel.EnterpriseServer.Tasks
{
try
{
- bool sendLetter = (bool)TaskManager.TaskParameters["SendLetter"];
- int userId = TaskManager.ItemId;
+ BackgroundTask topTask = TaskManager.TopTask;
+
+ bool sendLetter = Utils.ParseBool(topTask.GetParamValue("SendLetter"), false);
+
+ int userId = topTask.ItemId;
// send account letter if enabled
UserSettings settings = UserController.GetUserSettings(userId, UserSettings.ACCOUNT_SUMMARY_LETTER);
if (sendLetter
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs
new file mode 100644
index 00000000..b6207b84
--- /dev/null
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs
@@ -0,0 +1,243 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Xml;
+using System.Xml.Serialization;
+namespace WebsitePanel.EnterpriseServer
+{
+ public class TaskController
+ {
+ public static BackgroundTask GetTask(string taskId)
+ {
+ BackgroundTask task = ObjectUtils.FillObjectFromDataReader(
+ DataProvider.GetBackgroundTask(taskId));
+
+ if (task == null)
+ {
+ return null;
+ }
+
+ task.Params = GetTaskParams(task.Id);
+
+ return task;
+ }
+
+ public static List GetScheduleTasks(int scheduleId)
+ {
+ return ObjectUtils.CreateListFromDataReader(
+ DataProvider.GetScheduleBackgroundTasks(scheduleId));
+ }
+
+ public static List GetTasks()
+ {
+ var user = SecurityContext.User;
+
+ return GetTasks(user.IsPeer ? user.OwnerId : user.UserId);
+ }
+
+ public static List GetTasks(int actorId)
+ {
+ return ObjectUtils.CreateListFromDataReader(
+ DataProvider.GetBackgroundTasks(actorId));
+ }
+
+ public static List GetTasks(Guid guid)
+ {
+ return ObjectUtils.CreateListFromDataReader(
+ DataProvider.GetBackgroundTasks(guid));
+ }
+
+ public static List GetProcessTasks(BackgroundTaskStatus status)
+ {
+ return ObjectUtils.CreateListFromDataReader(
+ DataProvider.GetProcessBackgroundTasks(status));
+ }
+
+ public static BackgroundTask GetTopTask(Guid guid)
+ {
+ BackgroundTask task = ObjectUtils.FillObjectFromDataReader(
+ DataProvider.GetBackgroundTopTask(guid));
+
+ if (task == null)
+ {
+ return null;
+ }
+
+ task.Params = GetTaskParams(task.Id);
+
+ return task;
+ }
+
+ public static int AddTask(BackgroundTask task)
+ {
+ int taskId = DataProvider.AddBackgroundTask(task.Guid, task.TaskId, task.ScheduleId, task.PackageId, task.UserId,
+ task.EffectiveUserId, task.TaskName, task.ItemId, task.ItemName,
+ task.StartDate, task.IndicatorCurrent, task.IndicatorMaximum,
+ task.MaximumExecutionTime, task.Source, task.Severity, task.Completed,
+ task.NotifyOnComplete, task.Status);
+
+ AddTaskParams(taskId, task.Params);
+
+ DataProvider.AddBackgroundTaskStack(taskId);
+
+ return taskId;
+ }
+
+ public static void UpdateTaskWithParams(BackgroundTask task)
+ {
+ if (UpdateTask(task))
+ {
+ UpdateBackgroundTaskParams(task);
+ }
+ }
+
+ public static bool UpdateTask(BackgroundTask task)
+ {
+ if (task.Status == BackgroundTaskStatus.Abort)
+ {
+ DeleteBackgroundTasks(task.Guid);
+
+ return false;
+ }
+
+ if (task.Completed)
+ {
+ DeleteBackgroundTask(task.Id);
+
+ return false;
+ }
+
+ DataProvider.UpdateBackgroundTask(task.Guid, task.Id, task.ScheduleId, task.PackageId, task.TaskName, task.ItemId,
+ task.ItemName, task.FinishDate, task.IndicatorCurrent,
+ task.IndicatorMaximum, task.MaximumExecutionTime, task.Source,
+ task.Severity, task.Completed, task.NotifyOnComplete, task.Status);
+
+ return true;
+ }
+
+ public static void UpdateBackgroundTaskParams(BackgroundTask task)
+ {
+ DataProvider.DeleteBackgroundTaskParams(task.Id);
+
+ AddTaskParams(task.Id, task.Params);
+ }
+
+ public static void DeleteBackgroundTasks(Guid guid)
+ {
+ DataProvider.DeleteBackgroundTasks(guid);
+ }
+
+ public static void DeleteBackgroundTask(int id)
+ {
+ DataProvider.DeleteBackgroundTask(id);
+ }
+
+ public static void AddTaskParams(int taskId, List parameters)
+ {
+ foreach (BackgroundTaskParameter param in SerializeParams(parameters))
+ {
+ DataProvider.AddBackgroundTaskParam(taskId, param.Name, param.SerializerValue, param.TypeName);
+ }
+ }
+
+ public static List GetTaskParams(int taskId)
+ {
+ List parameters = ObjectUtils.CreateListFromDataReader(
+ DataProvider.GetBackgroundTaskParams(taskId));
+
+ return DeserializeParams(parameters);
+ }
+
+ public static void AddLog(BackgroundTaskLogRecord log)
+ {
+ DataProvider.AddBackgroundTaskLog(log.TaskId, log.Date, log.ExceptionStackTrace, log.InnerTaskStart,
+ log.Severity, log.Text, log.TextIdent, BuildParametersXml(log.TextParameters));
+ }
+
+ public static List GetLogs(BackgroundTask task, DateTime startLogTime)
+ {
+ if (startLogTime <= task.StartDate)
+ {
+ startLogTime = task.StartDate;
+ }
+
+ List logs = ObjectUtils.CreateListFromDataReader(
+ DataProvider.GetBackgroundTaskLogs(task.Id, startLogTime));
+
+ foreach (BackgroundTaskLogRecord log in logs)
+ {
+ log.TextParameters = ReBuildParametersXml(log.XmlParameters);
+ }
+
+ return logs;
+ }
+
+ private static List SerializeParams(List parameters)
+ {
+ foreach (BackgroundTaskParameter param in parameters)
+ {
+ var type = param.Value.GetType();
+ param.TypeName = type.FullName;
+
+ XmlSerializer serializer = new XmlSerializer(type);
+ MemoryStream ms = new MemoryStream();
+ serializer.Serialize(ms, param.Value);
+
+ ms.Position = 0;
+ StreamReader sr = new StreamReader(ms);
+
+ param.SerializerValue = sr.ReadToEnd();
+ }
+
+ return parameters;
+ }
+
+ private static List DeserializeParams(List parameters)
+ {
+ foreach (BackgroundTaskParameter param in parameters)
+ {
+ XmlSerializer deserializer = new XmlSerializer(Type.GetType(param.TypeName));
+ StringReader sr = new StringReader(param.SerializerValue);
+
+ param.Value = deserializer.Deserialize(sr);
+ }
+
+ return parameters;
+ }
+
+ private static string BuildParametersXml(string[] parameters)
+ {
+ XmlDocument xmlDoc = new XmlDocument();
+ XmlElement nodeProps = xmlDoc.CreateElement("parameters");
+
+ if (parameters != null)
+ {
+ foreach (string parameter in parameters)
+ {
+ XmlElement nodeProp = xmlDoc.CreateElement("parameter");
+ nodeProp.SetAttribute("value", parameter);
+ nodeProps.AppendChild(nodeProp);
+ }
+ }
+ return nodeProps.OuterXml;
+ }
+
+ private static string[] ReBuildParametersXml(string parameters)
+ {
+ var textParameters = new List();
+
+ var xmlDoc = new XmlDocument();
+ xmlDoc.LoadXml(parameters);
+
+ if (xmlDoc != null)
+ {
+ textParameters.AddRange(from XmlNode xmlParameter in xmlDoc.SelectNodes("parameters/parameter") select xmlParameter.Attributes.GetNamedItem("value").Value);
+ }
+
+ return textParameters.ToArray();
+ }
+ }
+}
+
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Tasks/TaskEventHandler.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskEventHandler.cs
similarity index 100%
rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Tasks/TaskEventHandler.cs
rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskEventHandler.cs
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs
new file mode 100644
index 00000000..0e8ebe0b
--- /dev/null
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs
@@ -0,0 +1,857 @@
+// Copyright (c) 2012, Outercurve Foundation.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification,
+// are permitted provided that the following conditions are met:
+//
+// - Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// - Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// - Neither the name of the Outercurve Foundation nor the names of its
+// contributors may be used to endorse or promote products derived from this
+// software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+using System;
+using System.Collections.Concurrent;
+using System.IO;
+using System.Threading;
+using System.Collections;
+using System.Collections.Generic;
+using System.Text;
+using System.Web;
+using System.Web.Caching;
+using System.Xml;
+using System.Reflection;
+using WebsitePanel.Providers.Common;
+using System.Diagnostics;
+using System.Linq;
+
+namespace WebsitePanel.EnterpriseServer
+{
+ public class TaskManager
+ {
+ private static Hashtable eventHandlers = null;
+ //using id instead of guid
+ private static ConcurrentDictionary _taskThreadsDictionary = new ConcurrentDictionary();
+
+ // purge timer, used for killing old tasks from the hash
+ static Timer purgeTimer = new Timer(new TimerCallback(PurgeCompletedTasks),
+ null,
+ 60000, // start from 1 minute
+ 60000); // invoke each minute
+
+ public static Guid Guid
+ {
+ get
+ {
+ Guid? guid = (Guid?)Thread.GetData(Thread.GetNamedDataSlot("BackgroundTaskGuid"));
+ if (!guid.HasValue)
+ {
+ guid = Guid.NewGuid();
+ Thread.SetData(Thread.GetNamedDataSlot("BackgroundTaskGuid"), guid.Value);
+ }
+
+ return guid.Value;
+ }
+ }
+
+ public static void StartTask(string source, string taskName)
+ {
+ StartTask(source, taskName, 0);
+ }
+
+ public static void StartTask(string source, string taskName, int itemId)
+ {
+ StartTask(source, taskName, 0, new List());
+ }
+
+ public static void StartTask(string source, string taskName, int itemId, BackgroundTaskParameter parameter)
+ {
+ StartTask(source, taskName, null, itemId, parameter);
+ }
+
+ public static void StartTask(string source, string taskName, int itemId, List parameters)
+ {
+ StartTask(source, taskName, null, itemId, parameters);
+ }
+
+ public static void StartTask(string source, string taskName, object itemName)
+ {
+ StartTask(source, taskName, itemName, 0);
+ }
+
+ public static void StartTask(string source, string taskName, object itemName, int itemId)
+ {
+ StartTask(source, taskName, itemName, itemId, new List());
+ }
+
+ public static void StartTask(string source, string taskName, object itemName, BackgroundTaskParameter parameter)
+ {
+ StartTask(source, taskName, itemName, 0, parameter);
+ }
+
+ public static void StartTask(string source, string taskName, object itemName, List parameters)
+ {
+ StartTask(source, taskName, itemName, 0, parameters);
+ }
+
+ public static void StartTask(string source, string taskName, object itemName, int itemId, BackgroundTaskParameter parameter)
+ {
+ StartTask(source, taskName, itemName, itemId, 0, parameter);
+ }
+
+ public static void StartTask(string source, string taskName, object itemName, int itemId, List parameters)
+ {
+ StartTask(source, taskName, itemName, itemId, 0, 0, -1, parameters);
+ }
+
+ public static void StartTask(string source, string taskName, object itemName, int itemId, int packageId, BackgroundTaskParameter parameter)
+ {
+ List parameters = new List();
+ if (parameter != null)
+ {
+ parameters.Add(parameter);
+ }
+
+ StartTask(source, taskName, itemName, itemId, 0, packageId, -1, parameters);
+ }
+
+ public static void StartTask(string taskId, string source, string taskName, object itemName, int itemId)
+ {
+ StartTask(taskId, source, taskName, itemName, itemId, 0, 0, -1, new List());
+ }
+
+ public static void StartTask(string taskId, string source, string taskName, object itemName, int itemId, int packageId)
+ {
+ StartTask(taskId, source, taskName, itemName, itemId, 0, packageId, -1, new List());
+ }
+
+ public static void StartTask(string source, string taskName, object itemName, int itemId,
+ int scheduleId, int packageId, int maximumExecutionTime, List parameters)
+ {
+ StartTask(null, source, taskName, itemName, itemId, scheduleId, packageId, maximumExecutionTime, parameters);
+ }
+
+ public static void StartTask(string taskId, string source, string taskName, object itemName, int itemId,
+ int scheduleId, int packageId, int maximumExecutionTime, List parameters)
+ {
+ if (String.IsNullOrEmpty(taskId))
+ {
+ taskId = Guid.NewGuid().ToString("N");
+ }
+
+ var user = SecurityContext.User;
+
+ int userId = user.OwnerId == 0
+ ? user.UserId
+ : user.OwnerId;
+
+ int effectiveUserId = user.UserId;
+
+ String itemNameStr = itemName != null
+ ? itemName.ToString()
+ : String.Empty;
+ BackgroundTask task = new BackgroundTask(Guid, taskId, userId, effectiveUserId, source, taskName, itemNameStr,
+ itemId, scheduleId, packageId, maximumExecutionTime, parameters);
+
+
+ List tasks = TaskController.GetTasks(Guid);
+
+ if (tasks.Count > 0)
+ {
+ BackgroundTask rootTask = tasks[0];
+
+ BackgroundTaskLogRecord log = new BackgroundTaskLogRecord(
+ rootTask.Id,
+ tasks.Count - 1,
+ true,
+ String.Format("{0}_{1}", source, taskName),
+ new string[] { itemNameStr });
+
+
+ TaskController.AddLog(log);
+ }
+
+ // call event handler
+ CallTaskEventHandler(task, false);
+
+ AddTaskThread(TaskController.AddTask(task), Thread.CurrentThread);
+ }
+
+ public static void WriteParameter(string parameterName, object parameterValue)
+ {
+ string val = parameterValue != null ? parameterValue.ToString() : "";
+ WriteLogRecord(Guid, 0, parameterName + ": " + val, null, null);
+ }
+
+ public static void Write(string text, params string[] textParameters)
+ {
+ // INFO
+ WriteLogRecord(Guid, 0, text, null, textParameters);
+ }
+
+ public static void WriteWarning(string text, params string[] textParameters)
+ {
+ WriteWarning(Guid, text, textParameters);
+ }
+
+ public static void WriteWarning(Guid guid, string text, params string[] textParameters)
+ {
+ // WARNING
+ WriteLogRecord(guid, 1, text, null, textParameters);
+ }
+
+ public static Exception WriteError(Exception ex)
+ {
+ // ERROR
+ WriteLogRecord(Guid, 2, ex.Message, ex.StackTrace);
+
+ return new Exception((TopTask != null)
+ ? String.Format("Error executing '{0}' task on '{1}' {2}",
+ TopTask.TaskName, TopTask.ItemName, TopTask.Source)
+ : String.Format("Error executing task"), ex);
+ }
+
+ public static void WriteError(Exception ex, string text, params string[] textParameters)
+ {
+ // ERROR
+ string[] prms = new string[] { ex.Message };
+ if (textParameters != null && textParameters.Length > 0)
+ {
+ prms = new string[textParameters.Length + 1];
+ Array.Copy(textParameters, 0, prms, 1, textParameters.Length);
+ prms[0] = ex.Message;
+ }
+
+ WriteLogRecord(Guid, 2, text, ex.Message + "\n" + ex.StackTrace, prms);
+ }
+
+ public static void WriteError(string text, params string[] textParameters)
+ {
+ // ERROR
+ WriteLogRecord(Guid, 2, text, null, textParameters);
+ }
+
+ private static void WriteLogRecord(Guid guid, int severity, string text, string stackTrace, params string[] textParameters)
+ {
+ List tasks = TaskController.GetTasks(guid);
+
+ if (tasks.Count > 0)
+ {
+ BackgroundTask rootTask = tasks[0];
+
+ BackgroundTaskLogRecord log = new BackgroundTaskLogRecord(
+ rootTask.Id,
+ tasks.Count - 1,
+ false,
+ text,
+ stackTrace,
+ textParameters);
+
+ TaskController.AddLog(log);
+
+ if (severity > rootTask.Severity)
+ {
+ rootTask.Severity = severity;
+
+ TaskController.UpdateTask(rootTask);
+ }
+ }
+ }
+
+ public static void CompleteTask()
+ {
+ List tasks = TaskController.GetTasks(Guid);
+
+ if (tasks.Count == 0)
+ return;
+
+ BackgroundTask topTask = tasks[tasks.Count - 1];
+
+ // call event handler
+ CallTaskEventHandler(topTask, true);
+
+ // finish task
+ topTask.FinishDate = DateTime.Now;
+ topTask.Completed = true;
+
+ // write task execution result to database
+ if (tasks.Count == 1) // single task
+ {
+ // write to database
+ AddAuditLog(topTask);
+ }
+
+ TaskController.UpdateTask(topTask);
+ StopProcess(topTask);
+ }
+
+ public static void UpdateParam(String name, Object value)
+ {
+ BackgroundTask topTask = TopTask;
+
+ if (topTask == null)
+ return;
+
+ topTask.UpdateParamValue(name, value);
+
+ TaskController.UpdateTaskWithParams(topTask);
+ }
+
+ public static int ItemId
+ {
+ set
+ {
+ BackgroundTask topTask = TopTask;
+
+ if (topTask == null)
+ return;
+
+ topTask.ItemId = value;
+
+ TaskController.UpdateTask(topTask);
+ }
+ }
+
+ public static String ItemName
+ {
+ set
+ {
+ BackgroundTask topTask = TopTask;
+
+ if (topTask == null)
+ return;
+
+ topTask.ItemName = value;
+
+ TaskController.UpdateTask(topTask);
+ }
+ }
+
+ public static void UpdateParams(Hashtable parameters)
+ {
+ BackgroundTask topTask = TopTask;
+
+ if (topTask == null)
+ return;
+
+ foreach (string key in parameters.Keys)
+ {
+ topTask.UpdateParamValue(key, parameters[key]);
+ }
+
+ TaskController.UpdateTaskWithParams(topTask);
+ }
+
+ static string FormatExecutionLog(BackgroundTask task)
+ {
+ StringWriter sw = new StringWriter();
+ XmlWriter writer = new XmlTextWriter(sw);
+
+ writer.WriteStartElement("log");
+
+ // parameters
+ writer.WriteStartElement("parameters");
+ foreach (BackgroundTaskParameter param in task.Params)
+ {
+ writer.WriteStartElement("parameter");
+ writer.WriteAttributeString("name", param.Name);
+ writer.WriteString(param.Value.ToString());
+
+ writer.WriteEndElement();
+ }
+ writer.WriteEndElement(); // parameters
+
+ // records
+ writer.WriteStartElement("records");
+ foreach (BackgroundTaskLogRecord record in task.Logs)
+ {
+ writer.WriteStartElement("record");
+ writer.WriteAttributeString("severity", record.Severity.ToString());
+ writer.WriteAttributeString("date", record.Date.ToString(System.Globalization.CultureInfo.InvariantCulture));
+ writer.WriteAttributeString("ident", record.TextIdent.ToString());
+
+ // text
+ writer.WriteElementString("text", record.Text);
+
+ // text parameters
+ if (record.TextParameters != null && record.TextParameters.Length > 0)
+ {
+ writer.WriteStartElement("textParameters");
+ foreach (string prm in record.TextParameters)
+ {
+ writer.WriteElementString("value", prm);
+ }
+ writer.WriteEndElement(); // textParameters
+ }
+
+ // stack trace
+ writer.WriteElementString("stackTrace", record.ExceptionStackTrace);
+ writer.WriteEndElement();
+ }
+ writer.WriteEndElement();
+ writer.WriteEndElement();
+
+ return sw.ToString();
+ }
+
+ static void PurgeCompletedTasks(object obj)
+ {
+ List tasks = TaskController.GetTasks(Guid);
+
+ foreach (BackgroundTask task in tasks)
+ {
+ if (task.MaximumExecutionTime != -1
+ && ((TimeSpan)(DateTime.Now - task.StartDate)).TotalSeconds > task.MaximumExecutionTime)
+ {
+ task.Status = BackgroundTaskStatus.Stopping;
+
+ TaskController.UpdateTask(task);
+ }
+ }
+ }
+
+ public static int IndicatorMaximum
+ {
+ set
+ {
+ BackgroundTask topTask = TopTask;
+
+ if (topTask == null)
+ {
+ return;
+ }
+
+ topTask.IndicatorMaximum = value;
+
+ TaskController.UpdateTask(topTask);
+ }
+ }
+
+ public static int IndicatorCurrent
+ {
+ get
+ {
+ return TopTask.IndicatorCurrent;
+ }
+ set
+ {
+ BackgroundTask topTask = TopTask;
+
+ if (topTask == null)
+ {
+ return;
+ }
+
+ topTask.IndicatorCurrent = value;
+
+ TaskController.UpdateTask(topTask);
+ }
+ }
+
+ public static int MaximumExecutionTime
+ {
+ get
+ {
+ return TopTask.MaximumExecutionTime;
+ }
+ set
+ {
+ BackgroundTask topTask = TopTask;
+
+ if (topTask == null)
+ {
+ return;
+ }
+
+ topTask.MaximumExecutionTime = value;
+
+ TaskController.UpdateTask(topTask);
+ }
+ }
+
+ public static bool HasErrors(BackgroundTask task)
+ {
+ return task.Severity == 2;
+ }
+
+ public static BackgroundTask TopTask
+ {
+ get { return TaskController.GetTopTask(Guid); }
+ }
+
+ public static BackgroundTask GetTask(string taskId)
+ {
+ BackgroundTask task = TaskController.GetTask(taskId);
+
+ if (task == null)
+ return null;
+
+ return task;
+ }
+
+ public static BackgroundTask GetTaskWithLogRecords(string taskId, DateTime startLogTime)
+ {
+ BackgroundTask task = GetTask(taskId);
+
+ if (task == null)
+ return null;
+
+ task.Logs = TaskController.GetLogs(task, startLogTime);
+
+ return task;
+ }
+
+ public static Dictionary GetScheduledTasks()
+ {
+ Dictionary scheduledTasks = new Dictionary();
+ try
+ {
+ foreach (BackgroundTask task in TaskController.GetTasks())
+ {
+ if (task.ScheduleId > 0
+ && !task.Completed
+ && (task.Status == BackgroundTaskStatus.Run || task.Status == BackgroundTaskStatus.Starting)
+ && !scheduledTasks.ContainsKey(task.ScheduleId))
+ scheduledTasks.Add(task.ScheduleId, task);
+ }
+ }
+ catch { }
+
+ return scheduledTasks;
+ }
+
+ public static void SetTaskNotifyOnComplete(string taskId)
+ {
+ BackgroundTask task = GetTask(taskId);
+
+ if (task == null)
+ return;
+
+ task.NotifyOnComplete = true;
+ }
+
+ internal static void AddTaskThread(int taskId, Thread taskThread)
+ {
+ if (_taskThreadsDictionary.ContainsKey(taskId))
+ _taskThreadsDictionary[taskId] = taskThread;
+ else
+ _taskThreadsDictionary.AddOrUpdate(taskId, taskThread, (key, oldValue) => taskThread);
+ }
+
+ public static void StopTask(string taskId)
+ {
+ BackgroundTask task = GetTask(taskId);
+
+ if (task == null)
+ {
+ return;
+ }
+
+ task.Status = BackgroundTaskStatus.Abort;
+
+ StopProcess(task);
+
+ if (!HasErrors(task))
+ {
+ task.Severity = 1;
+ }
+
+ task.FinishDate = DateTime.Now;
+
+ WriteWarning(task.Guid, "Task aborted by user");
+
+ AddAuditLog(task);
+
+ TaskController.UpdateTask(task);
+ }
+
+ private static void StopProcess(BackgroundTask task)
+ {
+ if (_taskThreadsDictionary.ContainsKey(task.Id))
+ {
+ if (_taskThreadsDictionary[task.Id] != null)
+ if (_taskThreadsDictionary[task.Id].IsAlive)
+ {
+ if (!task.Completed)
+ _taskThreadsDictionary[task.Id].Abort();
+ _taskThreadsDictionary[task.Id] = null;
+ }
+ Thread deleted;
+ _taskThreadsDictionary.TryRemove(task.Id, out deleted);
+ }
+ }
+
+ private static void AddAuditLog(BackgroundTask task)
+ {
+ task.Logs = TaskController.GetLogs(task, task.StartDate);
+
+ string executionLog = FormatExecutionLog(task);
+
+ UserInfo user = UserController.GetUserInternally(task.EffectiveUserId);
+ string username = user != null ? user.Username : null;
+
+ AuditLog.AddAuditLogRecord(task.TaskId, task.Severity, task.EffectiveUserId,
+ username, task.PackageId, task.ItemId,
+ task.ItemName, task.StartDate, task.FinishDate, task.Source,
+ task.TaskName, executionLog);
+ }
+
+ public static List GetUserTasks(int userId)
+ {
+ List list = new List();
+
+ // try to get user first
+ UserInfo user = UserController.GetUser(userId);
+ if (user == null)
+ return list; // prohibited user
+
+ // get user tasks
+ foreach (BackgroundTask task in TaskController.GetTasks(user.IsPeer ? user.OwnerId : user.UserId))
+ {
+ if (task.UserId == userId && !task.Completed
+ && task.Status == BackgroundTaskStatus.Run)
+ {
+ list.Add(task);
+ }
+ }
+ return list;
+ }
+
+ public static List GetUserCompletedTasks(int userId)
+ {
+ return new List();
+ }
+
+ public static int GetTasksNumber()
+ {
+ return TaskController.GetTasks().Count;
+ }
+
+ #region Private Helpers
+
+ private static void CallTaskEventHandler(BackgroundTask task, bool onComplete)
+ {
+ string[] taskHandlers = GetTaskEventHandlers(task.Source, task.TaskName);
+ if (taskHandlers != null)
+ {
+ foreach (string taskHandler in taskHandlers)
+ {
+ try
+ {
+ Type handlerType = Type.GetType(taskHandler);
+ TaskEventHandler handler = (TaskEventHandler)Activator.CreateInstance(handlerType);
+
+ if (handler != null)
+ {
+ if (onComplete)
+ handler.OnComplete();
+ else
+ handler.OnStart();
+ }
+ }
+ catch (Exception ex)
+ {
+ WriteError(ex, "Error executing task event handler: {0}", ex.Message);
+ }
+ }
+ }
+ }
+
+ private static string[] GetTaskEventHandlers(string source, string taskName)
+ {
+ // load configuration
+ string appRoot = AppDomain.CurrentDomain.BaseDirectory;
+ string path = Path.Combine(appRoot, "TaskEventHandlers.config");
+
+ if (eventHandlers == null)
+ {
+ eventHandlers = Hashtable.Synchronized(new Hashtable());
+
+ // load from XML
+ if (File.Exists(path))
+ {
+ List xmlConfigs = new List();
+ xmlConfigs.Add(new XmlDocument());
+ xmlConfigs[0].Load(path);
+ // Lookup for external references first
+ XmlNodeList xmlReferences = xmlConfigs[0].SelectNodes("//reference");
+ foreach (XmlElement xmlReference in xmlReferences)
+ {
+ string referencePath = Path.Combine(appRoot, xmlReference.GetAttribute("src"));
+ if (File.Exists(referencePath))
+ {
+ XmlDocument xmldoc = new XmlDocument();
+ xmldoc.Load(referencePath);
+ xmlConfigs.Add(xmldoc);
+ }
+ }
+
+ // parse XML
+ foreach (XmlDocument xml in xmlConfigs)
+ {
+ XmlNodeList xmlHandlers = xml.SelectNodes("//handler");
+ foreach (XmlNode xmlHandler in xmlHandlers)
+ {
+ string keyName = xmlHandler.ParentNode.Attributes["source"].Value
+ + xmlHandler.ParentNode.Attributes["name"].Value;
+
+ // get handlers collection
+ List taskHandlers = (List)eventHandlers[keyName];
+ if (taskHandlers == null)
+ {
+ taskHandlers = new List();
+ eventHandlers[keyName] = taskHandlers;
+ }
+
+ string handlerType = xmlHandler.Attributes["type"].Value;
+ taskHandlers.Add(handlerType);
+ }
+ }
+ }
+ }
+
+ string fullTaskName = source + taskName;
+ List handlersList = (List)eventHandlers[fullTaskName];
+ return handlersList == null ? null : handlersList.ToArray();
+ }
+
+ #endregion
+
+
+ #region ResultTasks
+
+ public static void CompleteResultTask(ResultObject res, string errorCode, Exception ex, string errorMessage)
+ {
+ if (res != null)
+ {
+ res.IsSuccess = false;
+
+ if (!string.IsNullOrEmpty(errorCode))
+ res.ErrorCodes.Add(errorCode);
+ }
+
+ if (ex != null)
+ TaskManager.WriteError(ex);
+
+ if (!string.IsNullOrEmpty(errorMessage))
+ TaskManager.WriteError(errorMessage);
+
+ //LogRecord.
+ CompleteTask();
+
+
+ }
+
+ public static void CompleteResultTask(ResultObject res, string errorCode, Exception ex)
+ {
+ CompleteResultTask(res, errorCode, ex, null);
+ }
+
+ public static void CompleteResultTask(ResultObject res, string errorCode)
+ {
+ CompleteResultTask(res, errorCode, null, null);
+ }
+
+ public static void CompleteResultTask(ResultObject res)
+ {
+ CompleteResultTask(res, null);
+ }
+
+ public static void CompleteResultTask()
+ {
+ CompleteResultTask(null);
+ }
+
+ public static T StartResultTask(string source, string taskName) where T : ResultObject, new()
+ {
+ StartTask(source, taskName);
+ T res = new T();
+ res.IsSuccess = true;
+ return res;
+ }
+
+ public static T StartResultTask(string source, string taskName, object itemName) where T : ResultObject, new()
+ {
+ StartTask(source, taskName, itemName);
+ T res = new T();
+ res.IsSuccess = true;
+ return res;
+ }
+
+ public static T StartResultTask(string source, string taskName, object itemName, int packageId) where T : ResultObject, new()
+ {
+ StartTask(source, taskName, itemName, 0, packageId, null);
+ T res = new T();
+ res.IsSuccess = true;
+ return res;
+ }
+
+ public static T StartResultTask(string source, string taskName, int packageId) where T : ResultObject, new()
+ {
+ StartTask(source, taskName, null, 0, packageId, null);
+ T res = new T();
+ res.IsSuccess = true;
+ return res;
+ }
+
+ public static T StartResultTask(string source, string taskName, int itemId, BackgroundTaskParameter parameter) where T : ResultObject, new()
+ {
+ StartTask(source, taskName, itemId, parameter);
+ T res = new T();
+ res.IsSuccess = true;
+ return res;
+ }
+
+ public static T StartResultTask(string source, string taskName, int itemId, List parameters) where T : ResultObject, new()
+ {
+ StartTask(source, taskName, itemId, parameters);
+ T res = new T();
+ res.IsSuccess = true;
+ return res;
+ }
+
+ public static T StartResultTask(string source, string taskName, int itemId, object itemName, int packageId) where T : ResultObject, new()
+ {
+ StartTask(source, taskName, itemName, itemId, packageId, null);
+ T res = new T();
+ res.IsSuccess = true;
+ return res;
+ }
+
+ public static T StartResultTask(string source, string taskName, Guid taskId, object itemName, int packageId) where T : ResultObject, new()
+ {
+ StartTask(taskId.ToString(), source, taskName, itemName, 0, packageId);
+ T res = new T();
+ res.IsSuccess = true;
+ return res;
+ }
+
+ public static T StartResultTask