Disclaimers fix

This commit is contained in:
dev_amdtel 2014-08-16 00:26:00 +04:00
parent da3008c9cc
commit 61f6820f98
7 changed files with 2152 additions and 1773 deletions

View file

@ -5565,17 +5565,26 @@ namespace WebsitePanel.EnterpriseServer
#region Disclaimers #region Disclaimers
public static int AddExchangeDisclaimer(int itemID, ExchangeDisclaimer disclaimer) public static int AddExchangeDisclaimer(int itemId, ExchangeDisclaimer disclaimer)
{ {
int res = -1;
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (accountCheck < 0) return accountCheck; if (accountCheck < 0) return accountCheck;
// place log record // place log record
TaskManager.StartTask("EXCHANGE", "ADD_EXCHANGE_EXCHANGEDISCLAIMER", itemID); TaskManager.StartTask("EXCHANGE", "ADD_EXCHANGE_EXCHANGEDISCLAIMER", itemId);
try try
{ {
return DataProvider.AddExchangeDisclaimer(itemID, disclaimer); Organization org = (Organization)PackageController.GetPackageItem(itemId);
if (org == null) return -1;
int exchangeServiceId = GetExchangeServiceID(org.PackageId);
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
res = DataProvider.AddExchangeDisclaimer(itemId, disclaimer);
disclaimer.ExchangeDisclaimerId = res;
exchange.SetDisclaimer(disclaimer.WSPUniqueName, disclaimer.DisclaimerText);
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -5586,20 +5595,26 @@ namespace WebsitePanel.EnterpriseServer
TaskManager.CompleteTask(); TaskManager.CompleteTask();
} }
return res;
} }
public static int UpdateExchangeDisclaimer(int itemID, ExchangeDisclaimer disclaimer) public static int UpdateExchangeDisclaimer(int itemId, ExchangeDisclaimer disclaimer)
{ {
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (accountCheck < 0) return accountCheck; if (accountCheck < 0) return accountCheck;
// place log record // place log record
TaskManager.StartTask("EXCHANGE", "UPDATE_EXCHANGE_EXCHANGEDISCLAIMER", itemID); TaskManager.StartTask("EXCHANGE", "UPDATE_EXCHANGE_EXCHANGEDISCLAIMER", itemId);
try try
{ {
DataProvider.UpdateExchangeDisclaimer(itemID, disclaimer); Organization org = (Organization)PackageController.GetPackageItem(itemId);
if (org == null) return -1;
int exchangeServiceId = GetExchangeServiceID(org.PackageId);
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
exchange.SetDisclaimer(disclaimer.WSPUniqueName, disclaimer.DisclaimerText);
DataProvider.UpdateExchangeDisclaimer(itemId, disclaimer);
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -5622,7 +5637,17 @@ namespace WebsitePanel.EnterpriseServer
try try
{ {
DataProvider.DeleteExchangeDisclaimer(exchangeDisclaimerId); ExchangeDisclaimer disclaimer = null;
if (exchangeDisclaimerId != -1) disclaimer = GetExchangeDisclaimer(itemId, exchangeDisclaimerId);
Organization org = (Organization)PackageController.GetPackageItem(itemId);
if (org == null) return -1;
int exchangeServiceId = GetExchangeServiceID(org.PackageId);
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
if (exchange.RemoveDisclaimer(disclaimer.WSPUniqueName)!=-1)
DataProvider.DeleteExchangeDisclaimer(exchangeDisclaimerId);
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -5677,42 +5702,54 @@ namespace WebsitePanel.EnterpriseServer
} }
public static int SetExchangeAccountDisclaimerId(int itemId, int AccountID, int ExchangeDisclaimerId) public static int SetExchangeAccountDisclaimerId(int itemId, int accountID, int newExchangeDisclaimerId)
{ {
int res = 0;
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (accountCheck < 0) return accountCheck; if (accountCheck < 0) return accountCheck;
// place log record // place log record
TaskManager.StartTask("EXCHANGE", "SET_EXCHANGE_ACCOUNTDISCLAIMERID", AccountID); TaskManager.StartTask("EXCHANGE", "SET_EXCHANGE_ACCOUNTDISCLAIMERID", accountID);
try try
{ {
ExchangeDisclaimer disclaimer = null; int oldExchangeDisclaimerId = GetExchangeAccountDisclaimerId(itemId, accountID);
if (ExchangeDisclaimerId != -1) ExchangeDisclaimer newDisclaimer = null;
disclaimer = GetExchangeDisclaimer(itemId, ExchangeDisclaimerId); ExchangeDisclaimer oldDisclaimer = null;
if (newExchangeDisclaimerId != -1) newDisclaimer = GetExchangeDisclaimer(itemId, newExchangeDisclaimerId);
if (oldExchangeDisclaimerId != -1) oldDisclaimer = GetExchangeDisclaimer(itemId, oldExchangeDisclaimerId);
// load account // load account
ExchangeAccount account = GetAccount(itemId, AccountID); ExchangeAccount account = GetAccount(itemId, accountID);
Organization org = (Organization)PackageController.GetPackageItem(itemId); Organization org = (Organization)PackageController.GetPackageItem(itemId);
if (org == null) if (org == null) return -1;
return -1;
int exchangeServiceId = GetExchangeServiceID(org.PackageId); int exchangeServiceId = GetExchangeServiceID(org.PackageId);
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId); ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
string transportRuleName = org.Name + "_" + account.PrimaryEmailAddress; // remove old version
string oldTransportRuleName = org.Name + "_" + account.PrimaryEmailAddress;
exchange.RemoveDisclaimer(oldTransportRuleName);
exchange.RemoveTransportRule(transportRuleName); // update disclaimer
if (newDisclaimer!=null)
exchange.SetDisclaimer(newDisclaimer.WSPUniqueName, newDisclaimer.DisclaimerText);
if (disclaimer != null) if (newExchangeDisclaimerId!=oldExchangeDisclaimerId)
{ {
if (!string.IsNullOrEmpty(disclaimer.DisclaimerText)) if (oldDisclaimer != null)
exchange.NewDisclaimerTransportRule(transportRuleName, account.PrimaryEmailAddress, disclaimer.DisclaimerText); exchange.RemoveDisclamerMember(oldDisclaimer.WSPUniqueName, account.PrimaryEmailAddress);
if (newDisclaimer != null)
res = exchange.AddDisclamerMember(newDisclaimer.WSPUniqueName, account.PrimaryEmailAddress);
if (res == 0)
DataProvider.SetExchangeAccountDisclaimerId(accountID, newExchangeDisclaimerId);
} }
DataProvider.SetExchangeAccountDisclaimerId(AccountID, ExchangeDisclaimerId);
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -5723,7 +5760,7 @@ namespace WebsitePanel.EnterpriseServer
TaskManager.CompleteTask(); TaskManager.CompleteTask();
} }
return 0; return res;
} }

View file

@ -29,6 +29,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using System.Text.RegularExpressions;
namespace WebsitePanel.Providers.HostedSolution namespace WebsitePanel.Providers.HostedSolution
{ {
@ -63,5 +64,14 @@ namespace WebsitePanel.Providers.HostedSolution
set { this.disclaimerText = value; } set { this.disclaimerText = value; }
} }
public string WSPUniqueName
{
get
{
Regex r = new Regex(@"[^A-Za-z0-9]");
return "WSPDisclaimer" + ExchangeDisclaimerId.ToString() + "_" + r.Replace(DisclaimerName, "");
}
}
} }
} }

View file

@ -131,8 +131,10 @@ namespace WebsitePanel.Providers.HostedSolution
void RemoveDevice(string id); void RemoveDevice(string id);
// Disclaimers // Disclaimers
int NewDisclaimerTransportRule(string Name, string From, string Text); int SetDisclaimer(string name, string text);
int RemoveTransportRule(string Name); int RemoveDisclaimer(string name);
int AddDisclamerMember(string name, string member);
int RemoveDisclamerMember(string name, string member);
// Archiving // Archiving
ResultObject SetMailBoxArchiving(string organizationId, string accountName, bool archive, long archiveQuotaKB, long archiveWarningQuotaKB, string RetentionPolicy); ResultObject SetMailBoxArchiving(string organizationId, string accountName, bool archive, long archiveQuotaKB, long archiveWarningQuotaKB, string RetentionPolicy);

View file

@ -7615,31 +7615,54 @@ namespace WebsitePanel.Providers.HostedSolution
#region Disclaimers #region Disclaimers
public int NewDisclaimerTransportRule(string Name, string From, string Text) private const string disclamerMemberPostfix = "_members";
{
return NewDisclaimerTransportRuleInternal(Name, From, Text);
}
public int RemoveTransportRule(string Name) public int SetDisclaimer(string name, string text)
{ {
return RemoveTransportRuleInternal(Name); ExchangeLog.LogStart("SetDisclaimer");
}
internal virtual int NewDisclaimerTransportRuleInternal(string Name, string From, string Text)
{
ExchangeLog.LogStart("NewDisclaimerTransportRuleInternal");
Runspace runSpace = null; Runspace runSpace = null;
try try
{ {
runSpace = OpenRunspace(); runSpace = OpenRunspace();
Command cmd = new Command("New-TransportRule"); Command cmd;
cmd.Parameters.Add("Name", Name);
cmd.Parameters.Add("From", From); bool distributionGroupExist = false;
bool transportRuleExist = false;
cmd = new Command("Get-DistributionGroup");
cmd.Parameters.Add("Identity", name + disclamerMemberPostfix);
Collection<PSObject> res = ExecuteShellCommand(runSpace, cmd);
distributionGroupExist = (res.Count > 0);
cmd = new Command("Get-TransportRule");
cmd.Parameters.Add("Identity", name);
res = ExecuteShellCommand(runSpace, cmd);
transportRuleExist = (res.Count > 0);
if (!distributionGroupExist)
{
cmd = new Command("New-DistributionGroup");
cmd.Parameters.Add("Name", name + disclamerMemberPostfix);
ExecuteShellCommand(runSpace, cmd);
}
if (transportRuleExist)
{
cmd = new Command("Set-TransportRule");
cmd.Parameters.Add("Identity", name);
}
else
{
cmd = new Command("New-TransportRule");
cmd.Parameters.Add("Name", name);
}
cmd.Parameters.Add("FromMemberOf", name + disclamerMemberPostfix);
cmd.Parameters.Add("Enabled", true); cmd.Parameters.Add("Enabled", true);
cmd.Parameters.Add("ApplyHtmlDisclaimerLocation", "Append"); cmd.Parameters.Add("ApplyHtmlDisclaimerLocation", "Append");
cmd.Parameters.Add("ApplyHtmlDisclaimerText", Text); cmd.Parameters.Add("ApplyHtmlDisclaimerText", text);
cmd.Parameters.Add("ApplyHtmlDisclaimerFallbackAction", "Wrap"); cmd.Parameters.Add("ApplyHtmlDisclaimerFallbackAction", "Wrap");
ExecuteShellCommand(runSpace, cmd); ExecuteShellCommand(runSpace, cmd);
} }
catch (Exception exc) catch (Exception exc)
{ {
@ -7650,23 +7673,85 @@ namespace WebsitePanel.Providers.HostedSolution
{ {
CloseRunspace(runSpace); CloseRunspace(runSpace);
} }
ExchangeLog.LogEnd("NewDisclaimerTransportRuleInternal"); ExchangeLog.LogEnd("SetDisclaimer");
return 0; return 0;
} }
internal virtual int RemoveTransportRuleInternal(string Name) public int RemoveDisclaimer(string name)
{ {
ExchangeLog.LogStart("RemoveTransportRuleInternal"); ExchangeLog.LogStart("RemoveDisclaimer");
Runspace runSpace = null; Runspace runSpace = null;
try try
{ {
runSpace = OpenRunspace(); runSpace = OpenRunspace();
Command cmd = new Command("Remove-TransportRule");
cmd.Parameters.Add("Identity", Name); Command cmd = new Command("Get-DistributionGroupMember");
cmd.Parameters.Add("Identity", name + disclamerMemberPostfix);
Collection<PSObject> res = ExecuteShellCommand(runSpace, cmd);
if (res.Count > 0)
return -1;
cmd = new Command("Remove-TransportRule");
cmd.Parameters.Add("Identity", name);
cmd.Parameters.Add("Confirm", new SwitchParameter(false)); cmd.Parameters.Add("Confirm", new SwitchParameter(false));
ExecuteShellCommand(runSpace, cmd); ExecuteShellCommand(runSpace, cmd);
cmd = new Command("Remove-DistributionGroup");
cmd.Parameters.Add("Identity", name + disclamerMemberPostfix);
cmd.Parameters.Add("Confirm", new SwitchParameter(false));
ExecuteShellCommand(runSpace, cmd);
}
catch (Exception exc)
{
ExchangeLog.LogError(exc);
return -1;
}
finally
{
CloseRunspace(runSpace);
}
ExchangeLog.LogEnd("RemoveDisclaimer");
return 0;
}
public int AddDisclamerMember(string name, string member)
{
ExchangeLog.LogStart("SetDisclamerMember");
Runspace runSpace = null;
try
{
runSpace = OpenRunspace();
Command cmd = new Command("Add-DistributionGroupMember");
cmd.Parameters.Add("Identity", name + disclamerMemberPostfix);
cmd.Parameters.Add("Member", member);
ExecuteShellCommand(runSpace, cmd);
}
catch (Exception exc)
{
ExchangeLog.LogError(exc);
return -1;
}
finally
{
CloseRunspace(runSpace);
}
ExchangeLog.LogEnd("SetDisclamerMember");
return 0;
}
public int RemoveDisclamerMember(string name, string member)
{
ExchangeLog.LogStart("RemoveDisclamerMember");
Runspace runSpace = null;
try
{
runSpace = OpenRunspace();
Command cmd = new Command("Remove-DistributionGroupMember");
cmd.Parameters.Add("Identity", name + disclamerMemberPostfix);
cmd.Parameters.Add("Member", member);
ExecuteShellCommand(runSpace, cmd);
} }
catch (Exception exc) catch (Exception exc)
{ {
@ -7677,8 +7762,7 @@ namespace WebsitePanel.Providers.HostedSolution
{ {
CloseRunspace(runSpace); CloseRunspace(runSpace);
} }
ExchangeLog.LogEnd("RemoveTransportRuleInternal"); ExchangeLog.LogEnd("RemoveDisclamerMember");
return 0; return 0;
} }

View file

@ -6933,31 +6933,143 @@ namespace WebsitePanel.Providers.HostedSolution
#region Disclaimers #region Disclaimers
public int NewDisclaimerTransportRule(string Name, string From, string Text) private const string disclamerMemberPostfix = "_members";
{
return NewDisclaimerTransportRuleInternal(Name, From, Text);
}
public int RemoveTransportRule(string Name) public int SetDisclaimer(string name, string text)
{ {
return RemoveTransportRuleInternal(Name); ExchangeLog.LogStart("SetDisclaimer");
}
internal virtual int NewDisclaimerTransportRuleInternal(string Name, string From, string Text)
{
ExchangeLog.LogStart("NewDisclaimerTransportRuleInternal");
Runspace runSpace = null; Runspace runSpace = null;
try try
{ {
runSpace = OpenRunspace(); runSpace = OpenRunspace();
Command cmd = new Command("New-TransportRule"); Command cmd;
cmd.Parameters.Add("Name", Name);
cmd.Parameters.Add("From", From); bool distributionGroupExist = false;
bool transportRuleExist = false;
cmd = new Command("Get-DistributionGroup");
cmd.Parameters.Add("Identity", name + disclamerMemberPostfix);
Collection<PSObject> res = ExecuteShellCommand(runSpace, cmd);
distributionGroupExist = (res.Count > 0);
cmd = new Command("Get-TransportRule");
cmd.Parameters.Add("Identity", name);
res = ExecuteShellCommand(runSpace, cmd);
transportRuleExist = (res.Count > 0);
if (!distributionGroupExist)
{
cmd = new Command("New-DistributionGroup");
cmd.Parameters.Add("Name", name + disclamerMemberPostfix);
ExecuteShellCommand(runSpace, cmd);
}
if (transportRuleExist)
{
cmd = new Command("Set-TransportRule");
cmd.Parameters.Add("Identity", name);
}
else
{
cmd = new Command("New-TransportRule");
cmd.Parameters.Add("Name", name);
}
cmd.Parameters.Add("FromMemberOf", name + disclamerMemberPostfix);
cmd.Parameters.Add("Enabled", true); cmd.Parameters.Add("Enabled", true);
cmd.Parameters.Add("ApplyHtmlDisclaimerLocation", "Append"); cmd.Parameters.Add("ApplyHtmlDisclaimerLocation", "Append");
cmd.Parameters.Add("ApplyHtmlDisclaimerText", Text); cmd.Parameters.Add("ApplyHtmlDisclaimerText", text);
cmd.Parameters.Add("ApplyHtmlDisclaimerFallbackAction", "Wrap"); cmd.Parameters.Add("ApplyHtmlDisclaimerFallbackAction", "Wrap");
ExecuteShellCommand(runSpace, cmd); ExecuteShellCommand(runSpace, cmd);
}
catch (Exception exc)
{
ExchangeLog.LogError(exc);
return -1;
}
finally
{
CloseRunspace(runSpace);
}
ExchangeLog.LogEnd("SetDisclaimer");
return 0;
}
public int RemoveDisclaimer(string name)
{
ExchangeLog.LogStart("RemoveDisclaimer");
Runspace runSpace = null;
try
{
runSpace = OpenRunspace();
Command cmd = new Command("Get-DistributionGroupMember");
cmd.Parameters.Add("Identity", name + disclamerMemberPostfix);
Collection<PSObject> res = ExecuteShellCommand(runSpace, cmd);
if (res.Count > 0)
return -1;
cmd = new Command("Remove-TransportRule");
cmd.Parameters.Add("Identity", name);
cmd.Parameters.Add("Confirm", new SwitchParameter(false));
ExecuteShellCommand(runSpace, cmd);
cmd = new Command("Remove-DistributionGroup");
cmd.Parameters.Add("Identity", name + disclamerMemberPostfix);
cmd.Parameters.Add("Confirm", new SwitchParameter(false));
ExecuteShellCommand(runSpace, cmd);
}
catch (Exception exc)
{
ExchangeLog.LogError(exc);
return -1;
}
finally
{
CloseRunspace(runSpace);
}
ExchangeLog.LogEnd("RemoveDisclaimer");
return 0;
}
public int AddDisclamerMember(string name, string member)
{
ExchangeLog.LogStart("SetDisclamerMember");
Runspace runSpace = null;
try
{
runSpace = OpenRunspace();
Command cmd = new Command("Add-DistributionGroupMember");
cmd.Parameters.Add("Identity", name + disclamerMemberPostfix);
cmd.Parameters.Add("Member", member);
ExecuteShellCommand(runSpace, cmd);
}
catch (Exception exc)
{
ExchangeLog.LogError(exc);
return -1;
}
finally
{
CloseRunspace(runSpace);
}
ExchangeLog.LogEnd("SetDisclamerMember");
return 0;
}
public int RemoveDisclamerMember(string name, string member)
{
ExchangeLog.LogStart("RemoveDisclamerMember");
Runspace runSpace = null;
try
{
runSpace = OpenRunspace();
Command cmd = new Command("Remove-DistributionGroupMember");
cmd.Parameters.Add("Identity", name + disclamerMemberPostfix);
cmd.Parameters.Add("Member", member);
ExecuteShellCommand(runSpace, cmd);
} }
catch (Exception exc) catch (Exception exc)
{ {
@ -6968,38 +7080,11 @@ namespace WebsitePanel.Providers.HostedSolution
{ {
CloseRunspace(runSpace); CloseRunspace(runSpace);
} }
ExchangeLog.LogEnd("NewDisclaimerTransportRuleInternal"); ExchangeLog.LogEnd("RemoveDisclamerMember");
return 0;
}
internal virtual int RemoveTransportRuleInternal(string Name)
{
ExchangeLog.LogStart("RemoveTransportRuleInternal");
Runspace runSpace = null;
try
{
runSpace = OpenRunspace();
Command cmd = new Command("Remove-TransportRule");
cmd.Parameters.Add("Identity", Name);
cmd.Parameters.Add("Confirm", false);
ExecuteShellCommand(runSpace, cmd);
}
catch(Exception exc)
{
ExchangeLog.LogError(exc);
return -1;
}
finally
{
CloseRunspace(runSpace);
}
ExchangeLog.LogEnd("RemoveTransportRuleInternal");
return 0; return 0;
} }
#endregion #endregion
#region Archiving #region Archiving

View file

@ -823,15 +823,27 @@ namespace WebsitePanel.Server
#region Disclaimers #region Disclaimers
[WebMethod, SoapHeader("settings")] [WebMethod, SoapHeader("settings")]
public int NewDisclaimerTransportRule(string Name, string From, string Text) public int SetDisclaimer(string name, string text)
{ {
return ES.NewDisclaimerTransportRule(Name, From, Text); return ES.SetDisclaimer(name, text);
} }
[WebMethod, SoapHeader("settings")] [WebMethod, SoapHeader("settings")]
public int RemoveTransportRule(string Name) public int RemoveDisclaimer(string name)
{ {
return ES.RemoveTransportRule(Name); return ES.RemoveDisclaimer(name);
}
[WebMethod, SoapHeader("settings")]
public int AddDisclamerMember(string name, string member)
{
return ES.AddDisclamerMember(name, member);
}
[WebMethod, SoapHeader("settings")]
public int RemoveDisclamerMember(string name, string member)
{
return ES.RemoveDisclamerMember(name, member);
} }
#endregion #endregion