HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/RMourik/bassol.nl/CMS/CMSModules/SmartSearch/Controls/Edit/SearchFields.ascx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI.WebControls;
using System.Collections;

using CMS.FormEngine;
using CMS.Helpers;
using CMS.Base;
using CMS.Search;
using CMS.UIControls;
using CMS.ExtendedControls;
using CMS.DataEngine;

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;
    private bool mAdvancedMode = true;

    // 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"

    /// <summary>
    /// Messages placeholder
    /// </summary>
    public override MessagesPlaceHolder MessagesPlaceHolder
    {
        get
        {
            return plcMess;
        }
    }


    /// <summary>
    /// Indicates if control is used on live site.
    /// </summary>
    public override bool IsLiveSite
    {
        get
        {
            return base.IsLiveSite;
        }
        set
        {
            plcMess.IsLiveSite = value;
            base.IsLiveSite = value;
        }
    }


    /// <summary>
    /// Gets or sets the value that indicates whether dropdown lists should be
    /// filled by actual object values or document values only
    /// </summary>
    public bool LoadActualValues
    {
        get
        {
            return mLoadActualValues;
        }
        set
        {
            mLoadActualValues = value;
        }
    }


    /// <summary>
    /// Gets or sets the resource string which is displayed after the save action.
    /// </summary>
    public string SaveResourceString
    {
        get
        {
            return mSaveResourceString;
        }
        set
        {
            mSaveResourceString = value;
        }
    }


    /// <summary>
    /// Resource text for rebuild index label.
    /// </summary>
    public string RebuildIndexResourceString
    {
        get
        {
            return mRebuildIndexResourceString;
        }
        set
        {
            mRebuildIndexResourceString = value;
        }
    }


    /// <summary>
    /// Indicates if advanced mode is used.
    /// </summary>
    public bool AdvancedMode
    {
        get
        {
            return mAdvancedMode;
        }
        set
        {
            mAdvancedMode = value;
        }
    }


    /// <summary>
    /// Gets current class.
    /// </summary>
    private DataClassInfo ClassInfo
    {
        get
        {
            if (dci == null)
            {
                dci = DataClassInfoProvider.GetDataClassInfo(ItemID);
            }
            return dci;
        }
    }


    /// <summary>
    /// Indicates if control is enabled.
    /// </summary>
    public bool Enabled
    {
        get
        {
            return pnlBody.Enabled;
        }
        set
        {
            pnlBody.Enabled = value;
        }
    }

    #endregion


    #region "Methods"

    protected void Page_Load(object sender, EventArgs e)
    {
        ClassFields.OnSaved += ClassFields_OnSaved;
        ClassFields.DisplaySaved = false;

        // Setup controls
        if (!URLHelper.IsPostback() && (ClassInfo != null))
        {
            pnlSearchFields.Visible = chkSearchEnabled.Checked = ClassInfo.ClassSearchEnabled;
        }

        plcAdvancedMode.Visible = AdvancedMode;

        if (!URLHelper.IsPostback())
        {
            ReloadData();
        }
    }


    /// <summary>
    /// Reloads data in control.
    /// </summary>
    public override void ReloadData()
    {
        base.ReloadData();
        ReloadSearch(false);
    }


    /// <summary>
    /// Reload data.
    /// </summary>
    /// <param name="setAutomatically">Indicates whether search options should be set automatically</param>
    public void ReloadSearch(bool setAutomatically)
    {
        ClassFields.ItemID = ItemID;
        ClassFields.ReloadData(setAutomatically, true);

        // Initialize properties
        List<IField> itemList = null;

        if (ClassInfo != null)
        {
            // Load XML definition
            fi = FormHelper.GetFormInfo(ClassInfo.ClassName, true);

            if (CMSString.Compare(ClassInfo.ClassName, "cms.user", true) == 0)
            {
                plcImage.Visible = false;
                ClassFields.DisplaySetAutomatically = false;
                pnlIndent.Visible = true;

                document = DataClassInfoProvider.GetDataClassInfo("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 (var item in itemList)
            {
                var formField = item as FormFieldInfo;
                if (formField != null)
                {
                    object[] obj = { formField.Name, DataTypeManager.GetSystemType(TypeEnum.Field, formField.DataType) };
                    attributes.Add(obj);
                }
            }
        }

        if (AdvancedMode)
        {
            ReloadControls();
        }
    }


    /// <summary>
    /// Reloads drop-down lists with new data.
    /// </summary>
    private void ReloadControls()
    {
        if ((ClassInfo != null))
        {
            #region "Load drop-down list 'Title field'"

            drpTitleField.Items.Clear();
            string[] array;

            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(ClassInfo.ClassSearchTitleColumn))
            {
                drpTitleField.SelectedValue = ClassInfo.ClassSearchTitleColumn;
            }
            else
            {
                if (!LoadActualValues)
                {
                    drpTitleField.SelectedValue = SearchHelper.DEFAULT_SEARCH_TITLE_COLUMN;
                }
            }

            #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(ClassInfo.ClassSearchContentColumn))
            {
                drpContentField.SelectedValue = ClassInfo.ClassSearchContentColumn;
            }
            else
            {
                if (!LoadActualValues)
                {
                    drpContentField.SelectedValue = SearchHelper.DEFAULT_SEARCH_CONTENT_COLUMN;
                }
            }

            #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(ClassInfo.ClassSearchImageColumn))
            {
                drpImageField.SelectedValue = ClassInfo.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(ClassInfo.ClassSearchCreationDateColumn))
            {
                drpDateField.SelectedValue = ClassInfo.ClassSearchCreationDateColumn;
            }
            else
            {
                if (!LoadActualValues)
                {
                    drpDateField.SelectedValue = SearchHelper.DEFAULT_SEARCH_CREATION_DATE_COLUMN;
                }
            }

            #endregion
        }
    }


    /// <summary>
    /// Enables or disables search for current class.
    /// </summary>
    public bool SaveSearchAvailability()
    {
        bool changed = false;
        if (ItemID > 0)
        {
            DataClassInfo classInfo = DataClassInfoProvider.GetDataClassInfo(ItemID);
            if (classInfo != null)
            {
                if (classInfo.ClassSearchEnabled != chkSearchEnabled.Checked)
                {
                    changed = true;
                }
                classInfo.ClassSearchEnabled = chkSearchEnabled.Checked;
                DataClassInfoProvider.SetDataClassInfo(classInfo);

                if (!chkSearchEnabled.Checked)
                {
                    ShowConfirmation(GetString("search.searchwasdisabled"));
                }
            }
        }
        return changed;
    }


    /// <summary>
    /// Calls method from ClassFields control which stores data.
    /// </summary>
    public void SaveData()
    {
        ClassFields.SaveData();
    }

    #endregion


    #region "Events"

    public void btnOK_Click(object sender, EventArgs e)
    {
        SaveData();
    }


    /// <summary>
    /// CheckedChanged event handler.
    /// </summary>
    protected void chkSearchEnabled_CheckedChanged(object sender, EventArgs e)
    {
        pnlSearchFields.Visible = chkSearchEnabled.Checked;

        if (chkSearchEnabled.Checked)
        {
            ReloadData();
        }
    }


    /// <summary>
    /// OK button click handler.
    /// </summary>
    private void ClassFields_OnSaved(object sender, EventArgs e)
    {
        bool enabledChanged = false;
        if (ClassInfo != null)
        {
            enabledChanged = SaveSearchAvailability();

            if (AdvancedMode)
            {
                // Save advanced information only in advanced mode
                ClassInfo.ClassSearchTitleColumn = drpTitleField.SelectedValue;
                ClassInfo.ClassSearchContentColumn = drpContentField.SelectedValue;
                if (drpImageField.SelectedValue != "0")
                {
                    ClassInfo.ClassSearchImageColumn = drpImageField.SelectedValue;
                }
                else
                {
                    ClassInfo.ClassSearchImageColumn = DBNull.Value.ToString();
                }
                ClassInfo.ClassSearchCreationDateColumn = drpDateField.SelectedValue;
                DataClassInfoProvider.SetDataClassInfo(ClassInfo);
            }

            RaiseOnSaved();
        }

        // Display a message
        if (!String.IsNullOrEmpty(SaveResourceString))
        {
            string saveMessage = GetString(SaveResourceString);
            if (!String.IsNullOrEmpty(saveMessage))
            {
                ShowConfirmation(saveMessage);
            }
        }

        if ((ClassFields.Changed || enabledChanged) && (!String.IsNullOrEmpty(RebuildIndexResourceString)))
        {
            ShowInformation(GetString(RebuildIndexResourceString));
        }
    }

    #endregion
}