using System;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CMS.CMSHelper;
using CMS.Controls;
using CMS.ExtendedControls;
using CMS.GlobalHelper;
using CMS.SettingsProvider;
using CMS.SiteProvider;
public partial class CMSModules_Content_Controls_Filters_DocumentCultureFilter : CMSAbstractBaseFilterControl
{
#region "Variables"
private DataSet mSiteCultures = null;
private string mDefaultSiteCulture = null;
private string currentSiteName = null;
#endregion
#region "Properties"
///
/// Default culture of the site.
///
private string DefaultSiteCulture
{
get
{
return mDefaultSiteCulture ?? (mDefaultSiteCulture = CultureHelper.GetDefaultCulture(currentSiteName));
}
}
///
/// Site cultures.
///
private DataSet SiteCultures
{
get
{
if (mSiteCultures == null)
{
mSiteCultures = CultureInfoProvider.GetSiteCultures(currentSiteName).Copy();
if (!DataHelper.DataSourceIsEmpty(mSiteCultures))
{
DataTable cultureTable = mSiteCultures.Tables[0];
DataRow[] defaultCultureRow = cultureTable.Select("CultureCode='" + DefaultSiteCulture + "'");
// Ensure default culture to be first
DataRow dr = cultureTable.NewRow();
if (defaultCultureRow.Length > 0)
{
dr.ItemArray = defaultCultureRow[0].ItemArray;
cultureTable.Rows.InsertAt(dr, 0);
cultureTable.Rows.Remove(defaultCultureRow[0]);
}
}
}
return mSiteCultures;
}
}
///
/// Where condition.
///
public override string WhereCondition
{
get
{
base.WhereCondition = GenerateWhereCondition();
return base.WhereCondition;
}
set
{
base.WhereCondition = value;
}
}
#endregion
#region "Page events"
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
currentSiteName = CMSContext.CurrentSiteName;
}
protected void Page_Load(object sender, EventArgs e)
{
// Fill drop down lists
InitDropdownLists();
}
#endregion
#region "Methods"
///
/// Initializes drop down lists.
///
private void InitDropdownLists()
{
// Init cultures
cultureElem.DropDownCultures.CssClass = "SelectorDropDown";
cultureElem.DropDownCultures.Width = 306;
cultureElem.AddDefaultRecord = false;
cultureElem.UpdatePanel.RenderMode = UpdatePanelRenderMode.Inline;
cultureElem.SpecialFields = new string[,]
{
{ GetString("transman.anyculture"), "##ANY##" },
{ GetString("transman.allcultures"), "##ALL##" }
};
// Init operands
if (drpLanguage.Items.Count == 0)
{
drpLanguage.Items.Add(new ListItem(GetString("transman.translatedto"), "="));
drpLanguage.Items.Add(new ListItem(GetString("transman.nottranslatedto"), "<>"));
}
}
///
/// Creates where condition according to values selected in filter.
///
private string GenerateWhereCondition()
{
string where = "";
string val = ValidationHelper.GetString(cultureElem.Value, string.Empty);
if (val == string.Empty)
{
val = "##ANY##";
}
if (val != "##ANY##")
{
switch (val)
{
case "##ALL##":
where = SqlHelperClass.AddWhereCondition(where, "((SELECT COUNT(*) FROM View_CMS_Tree_Joined AS TreeView WHERE TreeView.NodeID = View_CMS_Tree_Joined_Versions.NodeID) " + SqlHelperClass.GetSafeQueryString(drpLanguage.SelectedValue, false) + " " + SiteCultures.Tables[0].Rows.Count + ")");
break;
default:
string oper = (drpLanguage.SelectedValue == "<>") ? "NOT" : "";
where = SqlHelperClass.AddWhereCondition(where, "NodeID " + oper + " IN (SELECT NodeID FROM View_CMS_Tree_Joined AS TreeView WHERE TreeView.NodeID = NodeID AND DocumentCulture = '" + SqlHelperClass.GetSafeQueryString(val, false) + "')");
break;
}
}
else if (drpLanguage.SelectedValue == "<>")
{
where = SqlHelperClass.NO_DATA_WHERE;
}
return where;
}
#endregion
#region "State management"
///
/// Resets filter to the default state.
///
public override void ResetFilter()
{
drpLanguage.SelectedIndex = 0;
cultureElem.Value = "##ANY##";
}
#endregion
}