using System;
using System.Web.UI;
using CMS.Controls;
using CMS.GlobalHelper;
using CMS.SettingsProvider;
using CMS.SiteProvider;
using CMS.UIControls;
using CMS.CMSHelper;
public partial class CMSFormControls_Filters_SiteFilter : CMSAbstractBaseFilterControl
{
#region "Variables"
private CMSUserControl filteredControl = null;
private string mFilterMode = null;
public bool mIsLiveSite = true;
#endregion
#region "Properties"
///
/// Current filter mode.
///
public override string FilterMode
{
get
{
return mFilterMode ?? (mFilterMode = ValidationHelper.GetString(filteredControl.GetValue("FilterMode"), "").ToLowerCSafe());
}
set
{
mFilterMode = value;
}
}
///
/// Enables or disables live site mode of site selector.
///
public override bool IsLiveSite
{
get
{
return mIsLiveSite;
}
set
{
mIsLiveSite = value;
}
}
///
/// Where condition.
///
public override string WhereCondition
{
get
{
int selectedSite = ValidationHelper.GetInteger(siteSelector.Value, 0);
base.WhereCondition = GenerateWhereCondition(selectedSite);
return base.WhereCondition;
}
set
{
base.WhereCondition = value;
}
}
///
/// Filter value.
///
public override object Value
{
get
{
return siteSelector.Value;
}
set
{
SetValue(value);
}
}
///
/// Indicates if label should be displayed.
///
public bool ShowLabel
{
get
{
return plcLabel.Visible;
}
set
{
plcLabel.Visible = value;
}
}
///
/// Gets inner uniselector.
///
public UniSelector Selector
{
get
{
return siteSelector.UniSelector;
}
}
#endregion
#region "Page events"
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
filteredControl = FilteredControl as CMSUserControl;
siteSelector.DropDownSingleSelect.AutoPostBack = true;
siteSelector.UniSelector.OnSelectionChanged += Site_Changed;
siteSelector.UniSelector.DialogWindowName = "SiteSelectionDialog";
siteSelector.IsLiveSite = IsLiveSite;
// All cultures field in cultures mode
switch (FilterMode)
{
case "cultures":
{
siteSelector.AllowEmpty = false;
siteSelector.AllowAll = false;
siteSelector.UniSelector.SpecialFields = new string[,] { { ResHelper.GetString("general.allcultures"), string.Empty } };
}
break;
case "role":
{
siteSelector.AllowEmpty = false;
siteSelector.AllowAll = false;
siteSelector.AllowGlobal = true;
}
break;
case "user":
{
siteSelector.AllowAll = true;
siteSelector.AllowEmpty = false;
}
break;
case "notificationtemplate":
{
siteSelector.AllowEmpty = false;
siteSelector.AllowAll = false;
}
break;
case "notificationtemplateglobal":
{
siteSelector.AllowEmpty = false;
siteSelector.AllowAll = false;
siteSelector.UniSelector.SpecialFields = new string[,] { { ResHelper.GetString("general.global"), "" } };
}
break;
case "department":
{
siteSelector.AllowEmpty = false;
siteSelector.AllowAll = false;
siteSelector.AllowGlobal = true;
}
break;
default:
{
if ((Parameters != null) && (Parameters["ObjectType"] != null))
{
// Get object type
GeneralizedInfo currentObject = CMSObjectHelper.GetObject(ValidationHelper.GetString(Parameters["ObjectType"], String.Empty));
if (currentObject != null)
{
// Show global value if supports global objects
if (currentObject.TypeInfo.SupportsGlobalObjects)
{
siteSelector.AllowGlobal = true;
}
siteSelector.AllowAll = false;
siteSelector.AllowEmpty = false;
siteSelector.Value = CMSContext.CurrentSiteID;
}
}
else
{
// Use default settings
siteSelector.AllowAll = true;
siteSelector.AllowEmpty = false;
plcLabel.Visible = false;
}
}
break;
}
// Set initial filter value
if (!RequestHelper.IsPostBack())
{
if (filteredControl != null)
{
int defaultValue = ValidationHelper.GetInteger(filteredControl.GetValue("DefaultFilterValue"), 0);
if (defaultValue > 0)
{
siteSelector.UniSelector.Value = defaultValue;
WhereCondition = GenerateWhereCondition(defaultValue);
}
}
}
}
///
/// OnLoad override - check whether filter is set.
///
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
lblSite.ResourceString = "general.site";
lblSite.DisplayColon = true;
if (siteSelector.UniSelector.HasData)
{
int selectedSite = ValidationHelper.GetInteger(siteSelector.Value, 0);
// Generate current where condition
WhereCondition = GenerateWhereCondition(selectedSite);
}
}
#endregion
#region "Other methods"
///
/// Generates where condition.
///
protected string GenerateWhereCondition(int siteId)
{
switch (FilterMode)
{
case "user":
{
// If some site selected filter users
if (siteId > 0)
{
return "UserID IN (SELECT UserID FROM CMS_UserSite WHERE SiteID = " + siteId + ")";
}
}
break;
case "role":
{
// If some site selected filter users
if (siteId > 0)
{
return "SiteID = " + siteId;
}
if (siteId.ToString() == siteSelector.GlobalRecordValue)
{
return "SiteID IS NULL";
}
}
break;
case "subscriber":
{
// If some site filters subscibers
if (siteId > 0)
{
return "SubscriberSiteID = " + siteId;
}
}
break;
case "cultures":
{
if (siteId > 0)
{
return "CultureID IN (SELECT CultureID FROM CMS_SiteCulture WHERE SiteID = " + siteId + ")";
}
}
break;
case "bizform":
{
if (siteId > 0)
{
return "FormSiteID = " + siteId;
}
}
break;
case "notificationtemplate":
case "notificationtemplateglobal":
{
string where = "";
// Set the prefix for the item
SiteInfo si = SiteInfoProvider.GetSiteInfo(siteId);
if (si != null)
{
filteredControl.SetValue("ItemPrefix", si.SiteName + ".");
where = "TemplateSiteID = " + siteId;
}
// Add global templates
else
{
filteredControl.SetValue("ItemPrefix", null);
where = "TemplateSiteID IS NULL";
}
return where;
}
case "department":
{
// If some site selected filter departments
if (siteId > 0)
{
return "DepartmentSiteID = " + siteId;
}
if (siteId.ToString() == siteSelector.GlobalRecordValue)
{
return "DepartmentSiteID IS NULL";
}
}
break;
default:
{
// Automatic filtering mode
if ((siteId > 0) || (siteId == UniSelector.US_GLOBAL_RECORD))
{
IObjectTypeDriven filtered = this.FilteredControl as IObjectTypeDriven;
if (filtered != null)
{
BaseInfo infoObj = CMSObjectHelper.GetReadOnlyObject(filtered.ObjectType);
return infoObj.TypeInfo.GetSiteWhereCondition(siteId, false);
}
}
}
break;
}
return String.Empty;
}
private void SetValue(object value)
{
try
{
siteSelector.Value = value;
}
catch
{
}
}
#endregion
#region "Other events"
///
/// Handles Site selector OnSelectionChanged event.
///
protected void Site_Changed(object sender, EventArgs e)
{
// Raise OnFilterChange event
RaiseOnFilterChanged();
}
#endregion
#region "State management"
///
/// Resets filter to default state.
///
public override void ResetFilter()
{
if (filteredControl != null)
{
int defaultValue = ValidationHelper.GetInteger(filteredControl.GetValue("DefaultFilterValue"), 0);
siteSelector.SiteID = defaultValue;
siteSelector.Reload(true);
WhereCondition = GenerateWhereCondition(defaultValue);
}
}
#endregion
}