using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using CMS.CMSHelper; using CMS.GlobalHelper; using CMS.SettingsProvider; using CMS.SiteProvider; using CMS.DocumentEngine; using CMS.UIControls; using CMS.ExtendedControls; using TreeNode = CMS.DocumentEngine.TreeNode; public partial class CMSModules_Content_Controls_Dialogs_Selectors_LinkMediaSelector_NewFolder : CMSAdminControl { #region "Delegates & Events" /// /// Delegate of event fired when cancel button is clicked. /// public delegate void OnCancelClickEventHandler(); /// /// Delegate of event fired when folder has been deleted. /// public delegate void OnFolderChangeEventHandler(int nodeToSelect); /// /// Event raised when cancel button is clicked. /// public event OnCancelClickEventHandler CancelClick; /// /// Event raised when folder has been deleted. /// public event OnFolderChangeEventHandler OnFolderChange; #endregion #region "Private variables" private int mParentNodeId = 0; private string mParentCulture = null; private TreeNode mParentNode = null; private TreeProvider mTreeProvider = null; #endregion #region "Private properties" /// /// Gets tree provider object for current user. /// private TreeProvider TreeProvider { get { return mTreeProvider ?? (mTreeProvider = new TreeProvider(CMSContext.CurrentUser)); } } #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; } } /// /// ID of the parent of the newly created node. /// public int ParentNodeID { get { return mParentNodeId; } set { mParentNodeId = value; } } /// /// Culture of the parent of the newly created node. /// public string ParentCulture { get { return mParentCulture ?? (mParentCulture = CMSContext.PreferredCultureCode); } set { mParentCulture = value; } } /// /// Gets parent node object. /// public TreeNode ParentNode { get { if ((mParentNode == null) && (mParentNodeId > 0)) { mParentNode = TreeProvider.SelectSingleNode(ParentNodeID, ParentCulture); } return mParentNode; } set { mParentNode = value; } } #endregion protected override void OnLoad(EventArgs e) { RaiseOnCheckPermissions(PERMISSION_READ, this); base.OnLoad(e); } protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); if (!StopProcessing) { // Initialize control SetupControl(); } else { Visible = false; } } /// /// Clears form controls content. /// public override void ClearForm() { txtFolderName.Text = string.Empty; } #region "Event handlers" protected void btnOk_Click(object sender, EventArgs e) { // Check permissions string errMsg = CheckNodePermissions(); // If validation succeeded if (errMsg == string.Empty) { try { // Validate form entry errMsg = ValidateForm(); if (errMsg == string.Empty) { if (ParentNode != null) { // Initialize and create new folder node TreeNode newFolder = TreeNode.New("CMS.folder", TreeProvider); // Set properties newFolder.DocumentName = txtFolderName.Text.Trim(); newFolder.DocumentCulture = ParentCulture; newFolder.SetValue("NodeOwner", CMSContext.CurrentUser.UserID); // Create new folder DocumentHelper.InsertDocument(newFolder, ParentNode, TreeProvider); // Reload parent content if (OnFolderChange != null) { OnFolderChange(newFolder.NodeID); } } } else { // Display an error to the user ShowError(errMsg); } } catch (Exception ex) { // Display an error to the user ShowError(GetString("general.erroroccurred") + " " + ex.Message); } } else { // Display an error to the user ShowError(errMsg); } } /// /// Checks user's permissions for the parent node. /// private string CheckNodePermissions() { string errMsg = string.Empty; if (ParentNodeID > 0) { if (ParentNode != null) { SiteInfo si = SiteInfoProvider.GetSiteInfo(ParentNode.NodeSiteID); if (si != null) { // Check permissions and allowed document type DataClassInfo folderClass = DataClassInfoProvider.GetDataClass("CMS.Folder"); if (folderClass != null) { // Check allowed document type if (!DataClassInfoProvider.IsChildClassAllowed(ValidationHelper.GetInteger(ParentNode.GetValue("NodeClassID"), 0), folderClass.ClassID)) { errMsg = GetString("dialogs.document.classnotallowed"); } // Check document permissions if (!CMSContext.CurrentUser.IsAuthorizedToCreateNewDocument(ParentNode, folderClass.ClassName)) { errMsg = GetString("dialogs.document.NotAuthorizedToCreate"); } } else { errMsg = GetString("dialogs.document.folderclassnotfound"); } } else { errMsg = GetString("dialogs.document.sitemissing"); } } else { errMsg = GetString("dialogs.document.parentmissing"); } } else { errMsg = GetString("dialogs.document.parentmissing"); } return errMsg; } protected void btnCancel_Click(object sender, EventArgs e) { // Let the parent control now about user's action if (CancelClick != null) { CancelClick(); } } #endregion #region "Private methods" /// /// Initializes the control. /// private void SetupControl() { // Setup labels' and buttons' text btnOk.Text = GetString("general.ok"); btnCancel.Text = GetString("general.cancel"); // Register for events btnCancel.Click += btnCancel_Click; rfvFolderName.ErrorMessage = GetString("media.folder.foldernameempty"); ltlScript.Text = GetFocusScript(); } /// /// Validates form entries. /// private string ValidateForm() { return new Validator().NotEmpty(txtFolderName.Text, GetString("dialogs.folder.foldernameempty")).Result; } /// /// Returns script for focus folder name textbox. /// private string GetFocusScript() { string script = "function FocusFolderName(){\n" + "var txtBox = document.getElementById('" + txtFolderName.ClientID + "');\n" + "if (txtBox != null) { \n" + " try {\n" + " txtBox.focus();\n" + " } catch (e) {\n" + " setTimeout('FocusFolderName()',50);\n" + " }\n" + "}\n" + "}\n"; return ScriptHelper.GetScript(script); } #endregion }