using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
using CMS.FormEngine;
using CMS.GlobalHelper;
using CMS.SettingsProvider;
using CMS.UIControls;
using CMS.ExtendedControls;
public partial class CMSModules_SmartSearch_Controls_Edit_SearchFields : CMSAdminEditControl
{
#region "Private variables"
private DataClassInfo dci = null;
private DataClassInfo document = null;
private ArrayList attributes = new ArrayList();
private FormInfo fi = null;
private bool mLoadActualValues = false;
// Contains item list for 'Title' drop-down list.
private string allowedTitles = "DocumentName;DocumentNamePath;DocumentUrlPath;DocumentPageTitle;DocumentPageDescription;DocumentMenuCaption;DocumentCustomData;DocumentTags;NodeAliasPath;NodeName;NodeAlias;NodeCustomData;SKUNumber;SKUName;SKUDescription;SKUImagePath;SKUCustomData";
// Contains item list for 'Content' drop-down list.
private string allowedContent = "DocumentName;DocumentNamePath;DocumentUrlPath;DocumentPageTitle;DocumentPageDescription;DocumentMenuCaption;DocumentContent;DocumentCustomData;DocumentTags;NodeAliasPath;NodeName;NodeAlias;NodeCustomData;SKUNumber;SKUName;SKUDescription;SKUImagePath;SKUCustomData";
// Contains item list for 'Image' field
private string allowedImage = "DocumentContent;SKUImagePath";
// Contains item list for 'Date' drop-down list.
private string allowedDate = "DocumentModifiedWhen;DocumentCreatedWhen;DocumentCheckedOutWhen;DocumentPublishFrom;DocumentPublishTo;SKULastModified;SKUCreated";
private string mSaveResourceString = "general.changessaved";
private string mRebuildIndexResourceString = "searchindex.requiresrebuild";
#endregion
#region "Public properties"
///
/// Messages placeholder
///
public override MessagesPlaceHolder MessagesPlaceHolder
{
get
{
return plcMess;
}
}
///
/// Indicates if control is used on live site.
///
public override bool IsLiveSite
{
get
{
return base.IsLiveSite;
}
set
{
plcMess.IsLiveSite = value;
base.IsLiveSite = value;
}
}
///
/// Gets or sets the value that indicates whether dropdown lists should be
/// filled by actual object values or document values only
///
public bool LoadActualValues
{
get
{
return mLoadActualValues;
}
set
{
mLoadActualValues = value;
}
}
///
/// Indicates if "OK" button should be displayed.
///
public bool DisplayOkButton
{
get
{
return ClassFields.DisplayOkButton;
}
set
{
ClassFields.DisplayOkButton = value;
}
}
///
/// Gets or sets the resource string which is displayed after the save action.
///
public string SaveResourceString
{
get
{
return mSaveResourceString;
}
set
{
mSaveResourceString = value;
}
}
///
/// Resource text for rebuild index label.
///
public string RebuildIndexResourceString
{
get
{
return mRebuildIndexResourceString;
}
set
{
mRebuildIndexResourceString = value;
}
}
#endregion
#region "Methods"
protected void Page_Load(object sender, EventArgs e)
{
ClassFields.OnSaved += new EventHandler(ClassFields_OnSaved);
ClassFields.DisplaySaved = false;
if (!RequestHelper.IsPostBack())
{
ReloadData();
}
}
///
/// Reloads data in control.
///
public override void ReloadData()
{
base.ReloadData();
ReloadSearch(false);
}
///
/// Reload data.
///
/// Indicates whether search options should be set automatically
public void ReloadSearch(bool setAutomatically)
{
ClassFields.ItemID = ItemID;
ClassFields.ReloadData(setAutomatically, true);
// Initialize properties
List itemList = null;
FormFieldInfo formField = null;
// Load DataClass
dci = DataClassInfoProvider.GetDataClass(ItemID);
if (dci != null)
{
// Load XML definition
fi = FormHelper.GetFormInfo(dci.ClassName, true);
if (CMSString.Compare(dci.ClassName, "cms.user", true) == 0)
{
plcImage.Visible = false;
ClassFields.DisplaySetAutomatically = false;
pnlIndent.Visible = true;
document = DataClassInfoProvider.GetDataClass("cms.usersettings");
if (document != null)
{
FormInfo fiSettings = FormHelper.GetFormInfo(document.ClassName, true);
fi.CombineWithForm(fiSettings, true, String.Empty);
}
}
// Get all fields
itemList = fi.GetFormElements(true, true);
}
if (itemList != null)
{
if (itemList.Any())
{
pnlIndent.Visible = true;
}
// Store each field to array
foreach (object item in itemList)
{
if (item is FormFieldInfo)
{
formField = ((FormFieldInfo)(item));
object[] obj = { formField.Name, FormHelper.GetDataType(formField.DataType) };
attributes.Add(obj);
}
}
}
ReloadControls();
}
///
/// Reloads drop-down lists with new data.
///
private void ReloadControls()
{
if ((dci != null))
{
#region "Load drop-down list 'Title field'"
drpTitleField.Items.Clear();
string[] array = null;
if (!LoadActualValues)
{
array = allowedTitles.Split(';');
foreach (string item in array)
{
if (!String.IsNullOrEmpty(item))
{
drpTitleField.Items.Add(new ListItem(item));
}
}
}
foreach (object[] item in attributes)
{
object[] obj = item;
drpTitleField.Items.Add(new ListItem(obj[0].ToString()));
}
// Preselect value
if (!String.IsNullOrEmpty(dci.ClassSearchTitleColumn))
{
drpTitleField.SelectedValue = dci.ClassSearchTitleColumn;
}
else
{
if (!LoadActualValues)
{
drpTitleField.SelectedValue = "DocumentName";
}
}
#endregion
#region "Load drop-down list 'Content field'"
drpContentField.Items.Clear();
if (!LoadActualValues)
{
array = allowedContent.Split(';');
foreach (string item in array)
{
if (!String.IsNullOrEmpty(item))
{
drpContentField.Items.Add(new ListItem(item));
}
}
}
else
{
drpContentField.Items.Add(new ListItem(GetString("general.selectnone"), "0"));
}
foreach (object[] item in attributes)
{
object[] obj = item;
drpContentField.Items.Add(new ListItem(obj[0].ToString()));
}
// Preselect value
if (!String.IsNullOrEmpty(dci.ClassSearchContentColumn))
{
drpContentField.SelectedValue = dci.ClassSearchContentColumn;
}
else
{
if (!LoadActualValues)
{
drpContentField.SelectedValue = "DocumentContent";
}
}
#endregion
#region "Load drop-down list 'Image field'"
drpImageField.Items.Clear();
drpImageField.Items.Add(new ListItem(GetString("general.selectnone"), "0"));
if (!LoadActualValues)
{
array = allowedImage.Split(';');
foreach (string item in array)
{
if (!String.IsNullOrEmpty(item))
{
drpImageField.Items.Add(new ListItem(item));
}
}
}
foreach (object[] item in attributes)
{
object[] obj = item;
drpImageField.Items.Add(new ListItem(obj[0].ToString()));
}
// Preselect value
if (!String.IsNullOrEmpty(dci.ClassSearchImageColumn))
{
drpImageField.SelectedValue = dci.ClassSearchImageColumn;
}
#endregion
#region "Load drop-down list 'Date field'"
drpDateField.Items.Clear();
if (!LoadActualValues)
{
array = allowedDate.Split(';');
foreach (string item in array)
{
if (!String.IsNullOrEmpty(item))
{
drpDateField.Items.Add(new ListItem(item));
}
}
}
else
{
drpDateField.Items.Add(new ListItem(GetString("general.selectnone"), "0"));
}
foreach (object[] item in attributes)
{
object[] obj = item;
drpDateField.Items.Add(new ListItem(obj[0].ToString()));
}
// Preselect value
if (!String.IsNullOrEmpty(dci.ClassSearchCreationDateColumn))
{
drpDateField.SelectedValue = dci.ClassSearchCreationDateColumn;
}
else
{
if (!LoadActualValues)
{
drpDateField.SelectedValue = "DocumentCreatedWhen";
}
}
#endregion
}
}
///
/// Calls method from ClassFields control which stores data.
///
public void SaveData()
{
ClassFields.SaveData();
}
#endregion
#region "Events"
///
/// OK button click handler.
///
private void ClassFields_OnSaved(object sender, EventArgs e)
{
if (dci == null)
{
dci = DataClassInfoProvider.GetDataClass(ItemID);
}
if (dci != null)
{
dci.ClassSearchTitleColumn = drpTitleField.SelectedValue;
dci.ClassSearchContentColumn = drpContentField.SelectedValue;
if (drpImageField.SelectedValue != "0")
{
dci.ClassSearchImageColumn = drpImageField.SelectedValue;
}
else
{
dci.ClassSearchImageColumn = DBNull.Value.ToString();
}
dci.ClassSearchCreationDateColumn = drpDateField.SelectedValue;
DataClassInfoProvider.SetDataClass(dci);
RaiseOnSaved();
}
// Display a message
if (!String.IsNullOrEmpty(SaveResourceString))
{
string saveMessage = GetString(SaveResourceString);
if (!String.IsNullOrEmpty(saveMessage))
{
ShowConfirmation(saveMessage);
}
}
if ((ClassFields.Changed) && (!String.IsNullOrEmpty(RebuildIndexResourceString)))
{
ShowInformation(GetString(RebuildIndexResourceString));
}
}
#endregion
}