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
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);
if (accountCheck < 0) return accountCheck;
// place log record
TaskManager.StartTask("EXCHANGE", "ADD_EXCHANGE_EXCHANGEDISCLAIMER", itemID);
TaskManager.StartTask("EXCHANGE", "ADD_EXCHANGE_EXCHANGEDISCLAIMER", itemId);
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)
{
@ -5586,20 +5595,26 @@ namespace WebsitePanel.EnterpriseServer
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);
if (accountCheck < 0) return accountCheck;
// place log record
TaskManager.StartTask("EXCHANGE", "UPDATE_EXCHANGE_EXCHANGEDISCLAIMER", itemID);
TaskManager.StartTask("EXCHANGE", "UPDATE_EXCHANGE_EXCHANGEDISCLAIMER", itemId);
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)
{
@ -5622,7 +5637,17 @@ namespace WebsitePanel.EnterpriseServer
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)
{
@ -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);
if (accountCheck < 0) return accountCheck;
// place log record
TaskManager.StartTask("EXCHANGE", "SET_EXCHANGE_ACCOUNTDISCLAIMERID", AccountID);
TaskManager.StartTask("EXCHANGE", "SET_EXCHANGE_ACCOUNTDISCLAIMERID", accountID);
try
{
ExchangeDisclaimer disclaimer = null;
int oldExchangeDisclaimerId = GetExchangeAccountDisclaimerId(itemId, accountID);
if (ExchangeDisclaimerId != -1)
disclaimer = GetExchangeDisclaimer(itemId, ExchangeDisclaimerId);
ExchangeDisclaimer newDisclaimer = null;
ExchangeDisclaimer oldDisclaimer = null;
if (newExchangeDisclaimerId != -1) newDisclaimer = GetExchangeDisclaimer(itemId, newExchangeDisclaimerId);
if (oldExchangeDisclaimerId != -1) oldDisclaimer = GetExchangeDisclaimer(itemId, oldExchangeDisclaimerId);
// load account
ExchangeAccount account = GetAccount(itemId, AccountID);
ExchangeAccount account = GetAccount(itemId, accountID);
Organization org = (Organization)PackageController.GetPackageItem(itemId);
if (org == null)
return -1;
if (org == null) return -1;
int exchangeServiceId = GetExchangeServiceID(org.PackageId);
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))
exchange.NewDisclaimerTransportRule(transportRuleName, account.PrimaryEmailAddress, disclaimer.DisclaimerText);
if (oldDisclaimer != null)
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)
{
@ -5723,7 +5760,7 @@ namespace WebsitePanel.EnterpriseServer
TaskManager.CompleteTask();
}
return 0;
return res;
}

View file

@ -29,6 +29,7 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
namespace WebsitePanel.Providers.HostedSolution
{
@ -63,5 +64,14 @@ namespace WebsitePanel.Providers.HostedSolution
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);
// Disclaimers
int NewDisclaimerTransportRule(string Name, string From, string Text);
int RemoveTransportRule(string Name);
int SetDisclaimer(string name, string text);
int RemoveDisclaimer(string name);
int AddDisclamerMember(string name, string member);
int RemoveDisclamerMember(string name, string member);
// Archiving
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
public int NewDisclaimerTransportRule(string Name, string From, string Text)
{
return NewDisclaimerTransportRuleInternal(Name, From, Text);
}
private const string disclamerMemberPostfix = "_members";
public int RemoveTransportRule(string Name)
public int SetDisclaimer(string name, string text)
{
return RemoveTransportRuleInternal(Name);
}
internal virtual int NewDisclaimerTransportRuleInternal(string Name, string From, string Text)
{
ExchangeLog.LogStart("NewDisclaimerTransportRuleInternal");
ExchangeLog.LogStart("SetDisclaimer");
Runspace runSpace = null;
try
{
runSpace = OpenRunspace();
Command cmd = new Command("New-TransportRule");
cmd.Parameters.Add("Name", Name);
cmd.Parameters.Add("From", From);
Command cmd;
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("ApplyHtmlDisclaimerLocation", "Append");
cmd.Parameters.Add("ApplyHtmlDisclaimerText", Text);
cmd.Parameters.Add("ApplyHtmlDisclaimerText", text);
cmd.Parameters.Add("ApplyHtmlDisclaimerFallbackAction", "Wrap");
ExecuteShellCommand(runSpace, cmd);
}
catch (Exception exc)
{
@ -7650,23 +7673,85 @@ namespace WebsitePanel.Providers.HostedSolution
{
CloseRunspace(runSpace);
}
ExchangeLog.LogEnd("NewDisclaimerTransportRuleInternal");
ExchangeLog.LogEnd("SetDisclaimer");
return 0;
}
internal virtual int RemoveTransportRuleInternal(string Name)
public int RemoveDisclaimer(string name)
{
ExchangeLog.LogStart("RemoveTransportRuleInternal");
ExchangeLog.LogStart("RemoveDisclaimer");
Runspace runSpace = null;
try
{
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));
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)
{
@ -7677,8 +7762,7 @@ namespace WebsitePanel.Providers.HostedSolution
{
CloseRunspace(runSpace);
}
ExchangeLog.LogEnd("RemoveTransportRuleInternal");
ExchangeLog.LogEnd("RemoveDisclamerMember");
return 0;
}

View file

@ -6933,31 +6933,143 @@ namespace WebsitePanel.Providers.HostedSolution
#region Disclaimers
public int NewDisclaimerTransportRule(string Name, string From, string Text)
{
return NewDisclaimerTransportRuleInternal(Name, From, Text);
}
private const string disclamerMemberPostfix = "_members";
public int RemoveTransportRule(string Name)
public int SetDisclaimer(string name, string text)
{
return RemoveTransportRuleInternal(Name);
}
internal virtual int NewDisclaimerTransportRuleInternal(string Name, string From, string Text)
{
ExchangeLog.LogStart("NewDisclaimerTransportRuleInternal");
ExchangeLog.LogStart("SetDisclaimer");
Runspace runSpace = null;
try
{
runSpace = OpenRunspace();
Command cmd = new Command("New-TransportRule");
cmd.Parameters.Add("Name", Name);
cmd.Parameters.Add("From", From);
Command cmd;
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("ApplyHtmlDisclaimerLocation", "Append");
cmd.Parameters.Add("ApplyHtmlDisclaimerText", Text);
cmd.Parameters.Add("ApplyHtmlDisclaimerText", text);
cmd.Parameters.Add("ApplyHtmlDisclaimerFallbackAction", "Wrap");
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)
{
@ -6968,38 +7080,11 @@ namespace WebsitePanel.Providers.HostedSolution
{
CloseRunspace(runSpace);
}
ExchangeLog.LogEnd("NewDisclaimerTransportRuleInternal");
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");
ExchangeLog.LogEnd("RemoveDisclamerMember");
return 0;
}
#endregion
#region Archiving

View file

@ -823,15 +823,27 @@ namespace WebsitePanel.Server
#region Disclaimers
[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")]
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