using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using CMS.EventLog; using CMS.FormControls; using CMS.FormEngine; using CMS.GlobalHelper; using CMS.SettingsProvider; public partial class CMSFormControls_Filters_NumberFilter : FormEngineUserControl, IFilterFormControl { protected string mOperatorFieldName = null; #region "Properties" /// /// Gets or sets value. /// public override object Value { get { return txtText.Text; } set { // Load default value on insert if ((FieldInfo != null) && (FieldInfo.DataType == FormFieldDataTypeEnum.Decimal)) { txtText.Text = FormHelper.GetDoubleValueInCurrentCulture(value); } else { txtText.Text = ValidationHelper.GetString(value, null); } } } /// /// Gets name of the field for operator value. Default value is 'Operator'. /// protected string OperatorFieldName { get { if (string.IsNullOrEmpty(mOperatorFieldName)) { // Get name of the field for operator value mOperatorFieldName = DataHelper.GetNotEmpty(GetValue("OperatorFieldName"), "Operator"); } return mOperatorFieldName; } } /// /// Gets or sets default operator to use for the first inicialization of the control. /// public string DefaultOperator { get; set; } #endregion #region "Methods" protected void Page_Load(object sender, EventArgs e) { CheckFieldEmptiness = false; InitFilterDropDown(); if (ContainsColumn(OperatorFieldName)) { drpOperator.SelectedValue = ValidationHelper.GetString(Form.Data.GetValue(OperatorFieldName), "0"); } else { // Set default operator if (!RequestHelper.IsPostBack() && (DefaultOperator != null)) { drpOperator.SelectedValue = DefaultOperator; } } } /// /// Returns other values related to this form control. /// /// Returns an array where first dimension is attribute name and the second dimension is its value. public override object[,] GetOtherValues() { if (Form.Data is DataRowContainer) { if (!ContainsColumn(OperatorFieldName)) { Form.DataRow.Table.Columns.Add(OperatorFieldName); } // Set properties names object[,] values = new object[3,2]; values[0, 0] = OperatorFieldName; values[0, 1] = drpOperator.SelectedValue; return values; } return null; } /// /// Initializes operator filter dropdown list. /// private void InitFilterDropDown() { if (drpOperator.Items.Count == 0) { drpOperator.Items.Add(new ListItem("=", "=")); drpOperator.Items.Add(new ListItem("<>", "<>")); drpOperator.Items.Add(new ListItem("<", "<")); drpOperator.Items.Add(new ListItem("<=", "<=")); drpOperator.Items.Add(new ListItem(">", ">")); drpOperator.Items.Add(new ListItem(">=", ">=")); } } /// /// Gets where condition. /// public override string GetWhereCondition() { string tempVal = ValidationHelper.GetString(Value, string.Empty).Trim(); string op = drpOperator.SelectedValue; // No condition if (string.IsNullOrEmpty(tempVal) || string.IsNullOrEmpty(op)) { return null; } // Only number if (ValidationHelper.IsDouble(tempVal) || ValidationHelper.IsInteger(tempVal)) { try { // Format where condition return string.Format(WhereConditionFormat, FieldInfo.Name, SqlHelperClass.GetSafeQueryString(tempVal, false), op); } catch (Exception ex) { // Log exception EventLogProvider.LogException("NumberFilter", "GetWhereCondition", ex); } } return null; } #endregion #region "IFilterFormControl Members" /// /// Where condition format. /// public string WhereConditionFormat { get { // Get filter where condition format or default format return DataHelper.GetNotEmpty(GetValue("WhereConditionFormat"), "[{0}] {2} {1}"); } set { SetValue("WhereConditionFormat", value); } } #endregion }