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/MediaLibrary/Controls/UI/MediaLibraryEdit.ascx.cs
using System;
using System.Linq;

using CMS.DataEngine;
using CMS.ExtendedControls;
using CMS.FormControls;
using CMS.Helpers;
using CMS.MediaLibrary;
using CMS.Membership;
using CMS.SiteProvider;
using CMS.UIControls;

public partial class CMSModules_MediaLibrary_Controls_UI_MediaLibraryEdit : CMSAdminEditControl
{
    #region "Private variables"

    private int mMediaLibraryID;
    private Guid mMediaLibraryGroupGUID = Guid.Empty;
    private bool mEnable = true;
    private MediaLibraryInfo mLibraryInfo;

    #endregion


    #region "Private properties"

    /// <summary>
    /// Current library info.
    /// </summary>
    private MediaLibraryInfo LibraryInfo
    {
        get
        {
            if ((mLibraryInfo == null) && (MediaLibraryID > 0))
            {
                // Get data
                mLibraryInfo = MediaLibraryInfoProvider.GetMediaLibraryInfo(MediaLibraryID);

                // Check whether library belongs to requested group when entered 
                if ((mLibraryInfo != null) && (MediaLibraryGroupID > 0) && (mLibraryInfo.LibraryGroupID != MediaLibraryGroupID))
                {
                    mLibraryInfo = null;
                }

                // Check whether library belongs to current site when not global admin
                if ((mLibraryInfo != null) && (!MembershipContext.AuthenticatedUser.IsGlobalAdministrator) && (mLibraryInfo.LibrarySiteID != SiteContext.CurrentSiteID))
                {
                    mLibraryInfo = null;
                }
            }

            return mLibraryInfo;
        }
    }

    #endregion


    #region "Public properties"

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


    /// <summary>
    /// Gets or sets media library ID.
    /// </summary>
    public int MediaLibraryID
    {
        get
        {
            return mMediaLibraryID;
        }
        set
        {
            mMediaLibraryID = value;
            mLibraryInfo = null;
        }
    }


    /// <summary>
    /// Gets or sets media library group ID.
    /// </summary>
    public int MediaLibraryGroupID
    {
        get;
        set;
    }


    /// <summary>
    /// Gets or sets media library group GUID.
    /// </summary>
    public Guid MediaLibraryGroupGUID
    {
        get
        {
            return mMediaLibraryGroupGUID;
        }
        set
        {
            mMediaLibraryGroupGUID = value;
        }
    }


    /// <summary>
    /// Indicates whether editing form is enabled.
    /// </summary>
    public bool Enable
    {
        get
        {
            return mEnable;
        }
        set
        {
            mEnable = value;
        }
    }


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


    /// <summary>
    /// Gets the editing form.
    /// </summary>
    public UIForm EditingForm
    {
        get
        {
            return editElem;
        }
    }


    /// <summary>
    /// Indicates if control has stopped processing.
    /// </summary>
    public override bool StopProcessing
    {
        get
        {
            return editElem.StopProcessing;
        }
        set
        {
            editElem.StopProcessing = value;
        }
    }

    #endregion


    #region "Life-cycle events"


    /// <summary>
    /// Page_Load event handler.
    /// </summary>
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!StopProcessing)
        {
            // Initialize only when visible
            if (Visible)
            {
                InitializeControl();

                // Initialize controls
                editElem.OnBeforeSave += editElem_OnBeforeSave;
                editElem.OnAfterSave += editElem_OnAfterSave;
                editElem.OnBeforeValidate += editElem_OnBeforeValidate;
                editElem.OnAfterValidate += editElem_OnAfterValidate;
            }

            if (!URLHelper.IsPostback() && !IsLiveSite)
            {
                CheckLibraryID();
            }
        }
    }

    #endregion


    #region "Public methods"

    /// <summary>
    /// Reloads control's content.
    /// </summary>
    public override void ReloadData()
    {
        InitializeControl();
        if (CheckLibraryID())
        {
            editElem.ReloadData();
        }
    }

    #endregion


    #region "Private methods"

    /// <summary>
    /// Initializes controls
    /// </summary>
    private void InitializeControl()
    {
        RaiseOnCheckPermissions(PERMISSION_READ, this);

        if (!CheckPermissions())
        {
            ShowError(MediaLibraryHelper.GetAccessDeniedMessage("Manage"));
            return;
        }

        if (MediaLibraryGroupID > 0)
        {
            editElem.ObjectType = MediaLibraryInfo.OBJECT_TYPE_GROUP;
        }

        // Hide code name edit for simple mode
        if (DisplayMode == ControlDisplayModeEnum.Simple)
        {
            editElem.FieldsToHide.Add("LibraryName");
        }

        if (!Enable)
        {
            editElem.Enabled = false;
        }
    }



    /// <summary>
    /// Check library identifier if correct.
    /// </summary>
    private bool CheckLibraryID()
    {
        // Get info and load controls            
        if ((MediaLibraryID > 0) && (LibraryInfo == null))
        {
            plcProperties.Visible = false;
            ShowError(GetString("general.invalidid"));
            return false;
        }
        else
        {
            plcProperties.Visible = true;
            return true;
        }
    }


    /// <summary>
    /// Returns a value indicating whether the specified media library root folder name is unique.
    /// </summary>
    /// <param name="folderName">A name of the media library root folder.</param>
    private bool IsFolderNameUnique(string folderName)
    {
        MediaLibraryInfo library = MediaLibraryInfoProvider.GetMediaLibraries()
                                                            .TopN(1)
                                                            .Column("LibraryID")
                                                            .WhereEquals("LibraryFolder", folderName)
                                                            .WhereEquals("LibrarySiteID", SiteContext.CurrentSiteID)
                                                            .FirstOrDefault();

        return (library == null) || (MediaLibraryID == library.LibraryID);
    }


    /// <summary>
    /// Returns a value indicating whether the current user is authorized to manage the edited media library.
    /// </summary>
    private bool CheckPermissions()
    {
        if (LibraryInfo != null)
        {
            return MediaLibraryInfoProvider.IsUserAuthorizedPerLibrary(LibraryInfo, "Manage");
        }
        if (MembershipContext.AuthenticatedUser.IsAuthorizedPerResource("CMS.MediaLibrary", "Manage"))
        {
            return true;
        }
        if ((MediaLibraryGroupID > 0) && (MembershipContext.AuthenticatedUser.IsGroupAdministrator(MediaLibraryGroupID)))
        {
            return true;
        }

        return false;
    }

    #endregion


    #region "Form handlers"

    /// <summary>
    /// OnAfterSave event handler.
    /// </summary>
    protected void editElem_OnAfterSave(object sender, EventArgs e)
    {
        if (MediaLibraryID == 0)
        {
            MediaLibraryID = editElem.EditedObject.Generalized.ObjectID;
        }
    }


    /// <summary>
    /// OnBeforeSave event handler.
    /// </summary>
    protected void editElem_OnBeforeSave(object sender, EventArgs e)
    {
        if (editElem.RedirectUrlAfterCreate == null)
        {
            editElem.RedirectUrlAfterCreate = String.Empty;
        }

        if (MediaLibraryGroupID > 0)
        {
            editElem.Data["LibraryGroupID"] = MediaLibraryGroupID;
        }

        // If creating new group library setup default security
        if ((MediaLibraryGroupID > 0) && (MediaLibraryID == 0))
        {
            // Set default group media library security
            MediaLibraryInfo library = (MediaLibraryInfo)editElem.EditedObject;
            library.FileCreate = SecurityAccessEnum.GroupMembers;
            library.FileDelete = SecurityAccessEnum.Nobody;
            library.FileModify = SecurityAccessEnum.Nobody;
            library.FolderCreate = SecurityAccessEnum.Nobody;
            library.FolderDelete = SecurityAccessEnum.Nobody;
            library.FolderModify = SecurityAccessEnum.Nobody;
            library.Access = SecurityAccessEnum.GroupMembers;
        }
    }


    /// <summary>
    /// OnAfterValidate event handler.
    /// </summary>
    protected void editElem_OnAfterValidate(object sender, EventArgs e)
    {
        bool error = false;

        FormEngineUserControl folderControl = editElem.FieldControls["LibraryFolder"];
        if (folderControl.Enabled)
        {
            folderControl.Text = URLHelper.GetSafeFileName(folderControl.Text.Trim(), SiteContext.CurrentSiteName);

            // Emptiness is validated in Basic form
            if (!String.IsNullOrEmpty(folderControl.Text))
            {
                Validator validator = new Validator().IsFolderName(folderControl.Text, GetString("media.error.FolderNameIsNotValid")).MatchesCondition(folderControl.Text, x => x != "." && x != "..", GetString("media.error.FolderNameIsRelative")).MatchesCondition(folderControl.Text, IsFolderNameUnique, GetString("media.error.FolderExists"));

                if (!validator.IsValid)
                {
                    editElem.DisplayErrorLabel("LibraryFolder", HTMLHelper.HTMLEncode(validator.Result));
                    error = true;
                }
            }
        }

        editElem.StopProcessing = error;
    }


    /// <summary>
    /// OnBeforeValidate event handler.
    /// </summary>
    protected void editElem_OnBeforeValidate(object sender, EventArgs e)
    {
        // Check permission before save        
        if (!CheckPermissions())
        {
            ShowError(MediaLibraryHelper.GetAccessDeniedMessage("Manage"));
            editElem.StopProcessing = true;
            return;
        }

        // Get the code name of the edited media library
        if ((MediaLibraryID == 0) && (DisplayMode == ControlDisplayModeEnum.Simple))
        {
            editElem.FieldControls["LibraryName"].Text = ValidationHelper.GetCodeName(editElem.FieldControls["LibraryDisplayName"].Text, null, "_group_" + Guid.NewGuid());
        }
    }

    #endregion
}