Taylohtio/AlertManager/SPSolutions.SharePoint.Aler.../SPSolutions.SharePoint/SPSolutions.SharePoint.Alerts/SPAlertTemplateConfiguratio...

511 lines
13 KiB
C#

using Microsoft.SharePoint;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Xml;
namespace SPSolutions.SharePoint.Alerts
{
public class SPAlertTemplateConfiguration
{
private List<SPAlertEventType> m_alertEventTypes;
private List<SPAlertFilter> m_alertFilters;
private List<SPAlertFrequency> m_alertFrequencies;
private SPAlertType m_alertType;
private bool m_alwaysNotify;
private SPAlertEventType m_defaultAlertEventType;
private SPAlertFrequency m_defaultAlertFrequency;
private DateTime m_defaultAlertFrequencyTime;
private string m_defaultTitle;
private List<string> m_digestNotificationExludedFields;
private string m_digestNotificationXml;
private List<string> m_immediateNotificationExludedFields;
private string m_immediateNotificationXml;
private bool m_showAlertEventTypes;
private bool m_showAlertFilters;
private bool m_showAlertFrequencies;
private bool m_showAlertFrequencyTime;
private XmlDocument m_xml;
private bool m_isDirty;
public bool IsDirty
{
get
{
return this.m_isDirty;
}
set
{
this.m_isDirty = value;
}
}
public List<SPAlertEventType> AlertEventTypes
{
get
{
return this.m_alertEventTypes;
}
set
{
this.m_alertEventTypes = value;
}
}
public List<SPAlertFilter> AlertFilters
{
get
{
return this.m_alertFilters;
}
set
{
this.m_alertFilters = value;
}
}
public List<SPAlertFrequency> AlertFrequencies
{
get
{
return this.m_alertFrequencies;
}
set
{
this.m_alertFrequencies = value;
}
}
public SPAlertType AlertType
{
get
{
return this.m_alertType;
}
set
{
this.m_alertType = value;
}
}
public bool AlwaysNotify
{
get
{
return this.m_alwaysNotify;
}
set
{
this.m_alwaysNotify = value;
}
}
public SPAlertEventType DefaultAlertEventType
{
get
{
return this.m_defaultAlertEventType;
}
set
{
this.m_defaultAlertEventType = value;
}
}
public SPAlertFrequency DefaultAlertFrequency
{
get
{
return this.m_defaultAlertFrequency;
}
set
{
if (this.m_defaultAlertFrequency != value)
{
this.m_defaultAlertFrequency = value;
this.IsDirty = true;
}
}
}
public DateTime DefaultAlertFrequencyTime
{
get
{
return this.m_defaultAlertFrequencyTime;
}
set
{
this.m_defaultAlertFrequencyTime = value;
}
}
public string DefaultTitle
{
get
{
return this.m_defaultTitle;
}
set
{
this.m_defaultTitle = value;
}
}
public List<string> DigestNotificationExcludedFields
{
get
{
return this.m_digestNotificationExludedFields;
}
set
{
this.m_digestNotificationExludedFields = value;
}
}
public string DigestNotificaitonXml
{
get
{
return this.m_digestNotificationXml;
}
set
{
this.m_digestNotificationXml = value;
}
}
public bool HasAlertEventTypes
{
get
{
return this.AlertEventTypes != null && this.AlertEventTypes.Count > 0;
}
}
public bool HasAlertFilters
{
get
{
return this.AlertFilters != null && this.AlertFilters.Count > 0;
}
}
public bool HasAlertFrequencies
{
get
{
return this.AlertFrequencies != null && this.AlertFrequencies.Count > 0;
}
}
public List<string> ImmediateNotificationExcludedFields
{
get
{
return this.m_immediateNotificationExludedFields;
}
set
{
this.m_immediateNotificationExludedFields = value;
}
}
public string ImmediateNotificationXml
{
get
{
return this.m_immediateNotificationXml;
}
set
{
this.m_immediateNotificationXml = value;
}
}
public bool ShowAlertEventTypes
{
get
{
return this.m_showAlertEventTypes;
}
set
{
this.m_showAlertEventTypes = value;
}
}
public bool ShowAlertFilters
{
get
{
return this.m_showAlertFilters;
}
set
{
this.m_showAlertFilters = value;
}
}
public bool ShowAlertFrequencies
{
get
{
return this.m_showAlertFrequencies;
}
set
{
this.m_showAlertFrequencies = value;
}
}
public bool ShowAlertFrequencyImmediate
{
get
{
return this.AlertFrequencies.Contains(SPAlertFrequency.Immediate);
}
}
public bool ShowAlertFrequencyDaily
{
get
{
return this.AlertFrequencies.Contains(SPAlertFrequency.Daily);
}
}
public bool ShowAlertFrequencyWeekly
{
get
{
return this.AlertFrequencies.Contains(SPAlertFrequency.Weekly);
}
}
public bool ShowAlertFrequencyTime
{
get
{
return this.m_showAlertFrequencyTime;
}
set
{
this.m_showAlertFrequencyTime = value;
}
}
public XmlDocument Xml
{
get
{
return this.m_xml;
}
set
{
this.m_xml = value;
}
}
private SPAlertTemplateConfiguration()
{
this.m_alertEventTypes = new List<SPAlertEventType>();
this.m_alertFilters = new List<SPAlertFilter>();
this.m_alertFrequencies = new List<SPAlertFrequency>();
this.m_digestNotificationExludedFields = new List<string>();
this.m_immediateNotificationExludedFields = new List<string>();
this.m_showAlertEventTypes = true;
this.m_showAlertFilters = true;
this.m_showAlertFrequencies = true;
this.m_showAlertFrequencyTime = true;
this.m_alertFrequencies.Add(SPAlertFrequency.Immediate);
this.m_alertFrequencies.Add(SPAlertFrequency.Daily);
this.m_alertFrequencies.Add(SPAlertFrequency.Weekly);
this.m_defaultAlertFrequency = 0;
this.m_defaultAlertFrequencyTime = DateTime.Now;
this.m_alwaysNotify = false;
}
public void UpdateXml()
{
try
{
this.UpdateAlertTemplateFrequency();
}
finally
{
this.IsDirty = true;
}
}
private void UpdateAlertTemplateFrequency()
{
XmlNode xmlNode = this.Xml.SelectSingleNode("AlertTemplate/Frequency");
if (xmlNode == null)
{
return;
}
xmlNode.Attributes["IsVisible"].Value = Convert.ToString(this.ShowAlertFrequencies);
XmlAttribute xmlAttribute = xmlNode.Attributes["DefaultFrequency"];
if (this.DefaultAlertFrequency == SPAlertFrequency.Daily)
{
if (xmlAttribute != null)
{
xmlAttribute.Value = "Daily";
}
}
else
{
if (this.DefaultAlertFrequency == SPAlertFrequency.Weekly && xmlAttribute != null)
{
xmlAttribute.Value = "Weekly";
}
}
if (this.DefaultAlertFrequency == null && xmlAttribute != null)
{
xmlAttribute.Value = "Immediate";
}
xmlAttribute = xmlNode.Attributes["DefaultTime"];
if (xmlAttribute != null)
{
xmlAttribute.Value = this.DefaultAlertFrequencyTime.ToUniversalTime().ToString();
}
xmlAttribute = xmlNode.Attributes["ShowTime"];
if (xmlAttribute != null)
{
xmlAttribute.Value = Convert.ToString(this.ShowAlertFrequencyTime);
}
Dictionary<SPAlertFrequency, string> dictionary = new Dictionary<SPAlertFrequency, string>(3);
dictionary.Add(SPAlertFrequency.Immediate, "ShowImmediate");
dictionary.Add(SPAlertFrequency.Daily, "ShowDaily");
dictionary.Add(SPAlertFrequency.Weekly, "ShowWeekly");
foreach (SPAlertFrequency current in dictionary.Keys)
{
xmlAttribute = xmlNode.Attributes[dictionary[current]];
if (this.AlertFrequencies.Contains(current))
{
xmlAttribute.Value = "true";
}
else
{
xmlAttribute.Value = "false";
}
}
}
private void InitializeFromXml(XmlDocument xmlDoc)
{
this.Xml = xmlDoc;
this.InitializeAlertTemplateFilters();
this.InitializeAlertTemplateEventTypes();
this.InitializeAlertTemplate();
this.InitializeAlertTemplateFrequency();
this.IsDirty = false;
}
private void InitializeAlertTemplateFilters()
{
XmlNode xmlNode = this.Xml.SelectSingleNode("AlertTemplate/Filters");
if (xmlNode == null)
{
return;
}
foreach (XmlNode xmlNode2 in xmlNode.ChildNodes)
{
string query = this.PopulateAlertFilterQueryWithCurrentUserID(xmlNode2.SelectSingleNode("Query"));
SPAlertFilter item = new SPAlertFilter(xmlNode2.SelectSingleNode("FriendlyName").InnerText.Trim(), query, string.Empty);
this.AlertFilters.Add(item);
}
XmlNode xmlNode3 = xmlNode.Attributes["IsVisible"];
this.ShowAlertFilters = (xmlNode3 != null && string.Compare(xmlNode3.Value, "true", true) == 0);
}
private string PopulateAlertFilterQueryWithCurrentUserID(XmlNode queryNode)
{
XmlNodeList xmlNodeList = queryNode.SelectNodes(".//Value[UserID]");
foreach (XmlNode xmlNode in xmlNodeList)
{
xmlNode.Attributes["type"].Value = "string";
xmlNode.InnerXml = SPContext.Current.Web.CurrentUser.LoginName;
}
return queryNode.OuterXml;
}
private void InitializeAlertTemplateEventTypes()
{
XmlNode xmlNode = this.Xml.SelectSingleNode("AlertTemplate/EventTypes");
if (xmlNode == null)
{
return;
}
foreach (XmlNode xmlNode2 in xmlNode.ChildNodes)
{
SPAlertEventType sPAlertEventType = new SPAlertEventType(xmlNode2.InnerText.Trim(), int.Parse(xmlNode2.Attributes["Mask"].Value.Substring(2), NumberStyles.HexNumber));
if (xmlNode2 != null && string.Compare(xmlNode2.Value, "true", true) == 0)
{
this.DefaultAlertEventType = sPAlertEventType;
}
this.AlertEventTypes.Add(sPAlertEventType);
}
XmlNode xmlNode3 = xmlNode.Attributes["IsVisible"];
this.ShowAlertEventTypes = (xmlNode3 != null && string.Compare(xmlNode3.Value, "true", true) == 0);
}
private void InitializeAlertTemplate()
{
XmlNode xmlNode = this.Xml.SelectSingleNode("AlertTemplate");
if (xmlNode == null)
{
return;
}
if (xmlNode.Attributes["DefaultTitle"] != null)
{
this.DefaultTitle = xmlNode.Attributes["DefaultTitle"].Value;
}
XmlNode xmlNode2 = xmlNode.Attributes["AlwaysNotify"];
this.AlwaysNotify = (xmlNode2 != null && string.Compare(xmlNode2.Value, "true", true) == 0);
}
private void InitializeAlertTemplateFrequency()
{
XmlNode xmlNode = this.Xml.SelectSingleNode("AlertTemplate/Frequency");
if (xmlNode == null)
{
return;
}
this.ShowAlertFrequencies = (string.Compare(xmlNode.Attributes["IsVisible"].Value, "true", true) == 0);
XmlAttribute xmlAttribute = xmlNode.Attributes["DefaultFrequency"];
if (xmlAttribute != null && xmlAttribute.Value == "Daily")
{
this.DefaultAlertFrequency = SPAlertFrequency.Daily;
}
else
{
if (xmlAttribute != null && xmlAttribute.Value == "Weekly")
{
this.DefaultAlertFrequency = SPAlertFrequency.Weekly;
}
}
xmlAttribute = xmlNode.Attributes["DefaultTime"];
this.DefaultAlertFrequencyTime = ((xmlAttribute == null) ? DateTime.Now : DateTime.Parse(xmlAttribute.Value));
xmlAttribute = xmlNode.Attributes["ShowTime"];
this.ShowAlertFrequencyTime = (xmlAttribute != null && string.Compare(xmlAttribute.Value, "true", true) == 0);
Dictionary<SPAlertFrequency, string> dictionary = new Dictionary<SPAlertFrequency, string>(3);
dictionary.Add(SPAlertFrequency.Immediate, "ShowImmediate");
dictionary.Add(SPAlertFrequency.Daily, "ShowDaily");
dictionary.Add(SPAlertFrequency.Weekly, "ShowWeekly");
foreach (SPAlertFrequency current in dictionary.Keys)
{
xmlAttribute = xmlNode.Attributes[dictionary[current]];
if (xmlAttribute != null)
{
if (string.Compare(xmlAttribute.Value, "true", true) == 0)
{
if (!this.AlertFrequencies.Contains(current))
{
this.AlertFrequencies.Add(current);
}
}
else
{
if (string.Compare(xmlAttribute.Value, "false", true) == 0 && this.AlertFrequencies.Contains(current))
{
this.AlertFrequencies.Remove(current);
}
}
}
}
}
public static SPAlertTemplateConfiguration GetConfiguration(SPAlertTemplate alertTemplate, uint lcid)
{
if (alertTemplate == null)
{
throw new ArgumentNullException("alertTemplate");
}
return SPAlertTemplateConfiguration.GetConfiguration(alertTemplate.GetLocalizedXml(lcid));
}
public static SPAlertTemplateConfiguration GetConfiguration(string xml)
{
SPAlertTemplateConfiguration sPAlertTemplateConfiguration = new SPAlertTemplateConfiguration();
SPAlertTemplateConfiguration.InitializeAlertTemplateConfiguration(sPAlertTemplateConfiguration, xml);
return sPAlertTemplateConfiguration;
}
private static void InitializeAlertTemplateConfiguration(SPAlertTemplateConfiguration alertTemplateConfiguration, string xml)
{
if (string.IsNullOrEmpty(xml))
{
return;
}
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml);
alertTemplateConfiguration.InitializeFromXml(xmlDocument);
}
}
}