using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using CMS.UIControls; using CMS.GlobalHelper; using CMS.Chat; using CMS.CMSHelper; using CMS.SiteProvider; using CMS.FormControls; public partial class CMSModules_Chat_Controls_UI_ChatRoomUser_Edit : CMSAdminEditControl { #region "Fields" private ChatRoomInfo chatRoom; #endregion #region "Properties" /// /// Gets current room /// private ChatRoomInfo ChatRoom { get { if (chatRoom == null) { chatRoom = ChatRoomInfoProvider.GetChatRoomInfo(ChatRoomID); } return chatRoom; } } /// /// UIForm control used for editing objects properties. /// public UIForm UIFormControl { get { return this.EditForm; } } /// /// User will be inserted/edited in this room /// public int ChatRoomID { get; set; } /// /// Gets current RoomUser /// public ChatRoomUserInfo TypedEditedObject { get { return (ChatRoomUserInfo)CMSContext.EditedObject; } } /// /// True if this control is editing existing object. False if new object is being created. /// public bool IsEditing { get { return TypedEditedObject != null; } } #endregion #region "Methods" protected void Page_Load(object sender, EventArgs e) { UIFormControl.OnCheckPermissions += new EventHandler(EditForm_OnCheckPermissions); UIFormControl.OnBeforeValidate += new EventHandler(EditForm_OnBeforeValidate); UIFormControl.OnBeforeSave += new EventHandler(EditForm_OnBeforeSave); ChatRoomInfo room = ChatRoom; if ((room == null) || room.IsOneToOneSupport) { RedirectToInformation(GetString("chat.error.internal")); } if (!RequestHelper.IsPostBack()) { List itemsToAdd = new List(); // Level can be set to None only if editing existing user in room if (IsEditing) { itemsToAdd.Add(AdminLevelEnum.None); } // Level can be set to Join only in private rooms if (room.ChatRoomPrivate) { itemsToAdd.Add(AdminLevelEnum.Join); } // Level can be set to Admin always itemsToAdd.Add(AdminLevelEnum.Admin); foreach (AdminLevelEnum enumValue in itemsToAdd) { fdrpAdminLevel.Items.Add(new ListItem(enumValue.ToStringValue(), ((int)enumValue).ToString())); } if (IsEditing) { fdrpAdminLevel.SelectedValue = ((int)TypedEditedObject.ChatRoomUserAdminLevel).ToString(); } } if (IsEditing) { ChatUserInfo chatUser = ChatUserInfoProvider.GetChatUserInfo(TypedEditedObject.ChatRoomUserChatUserID); litChatUserLink.Text = ChatHelper.GetCMSDeskChatUserField(this, chatUser); fUserSelector.Value = chatUser.ChatUserUserID; litChatUserLink.Visible = true; fUserSelector.Visible = false; // Disable user selector and set ProcessDisabledFields to false, so it won't be validated UIFormControl.ProcessDisabledFields = false; fUserSelector.Enabled = false; } else { litChatUserLink.Visible = false; fUserSelector.Visible = true; if (room.ChatRoomSiteID.HasValue) { fUserSelector.SiteID = room.ChatRoomSiteID.Value; fUserSelector.ShowSiteFilter = false; } } } void EditForm_OnBeforeSave(object sender, EventArgs e) { int chatUserID; if (IsEditing) { chatUserID = TypedEditedObject.ChatRoomUserChatUserID; } else { int userID = ValidationHelper.GetInteger(fUserSelector.Value, 0); chatUserID = ChatUserHelper.GetChatUserFromCMSUser(UserInfoProvider.GetUserInfo(userID)).ChatUserID; } AdminLevelEnum adminLevel = ChatHelper.GetEnum(Convert.ToInt32(fdrpAdminLevel.SelectedValue), AdminLevelEnum.None); ChatRoomUserHelper.SetChatAdminLevel(ChatRoomID, chatUserID, adminLevel); URLHelper.Redirect(string.Format("List.aspx?roomid={0}&saved=1", ChatRoomID)); // Stop processing, because save was handled manually UIFormControl.StopProcessing = true; } void EditForm_OnBeforeValidate(object sender, EventArgs e) { int chatUserID; if (IsEditing) { chatUserID = TypedEditedObject.ChatRoomUserChatUserID; } else { int userID = ValidationHelper.GetInteger(fUserSelector.Value, 0); UserInfo user = UserInfoProvider.GetUserInfo(userID); if (user == null) { ShowErrorAndStopProcessing("chat.pleaseselectuser"); return; } if (user.IsPublic()) { ShowErrorAndStopProcessing("chat.cantaddpermissionstopublicuser"); return; } chatUserID = ChatUserHelper.GetChatUserFromCMSUser(user).ChatUserID; ChatRoomUserInfo chatRoomUser = ChatRoomUserInfoProvider.GetChatRoomUser(chatUserID, ChatRoomID); // If user with already raised privilegies is beign created if ((chatRoomUser != null) && (chatRoomUser.ChatRoomUserAdminLevel >= (ChatRoom.ChatRoomPrivate ? AdminLevelEnum.Join : AdminLevelEnum.Admin))) { ShowErrorAndStopProcessing("chat.errror.userhasalreadyraisedprivilegies"); return; } } } void EditForm_OnCheckPermissions(object sender, EventArgs e) { ((CMSChatPage)Page).CheckModifyPermission(ChatRoom.ChatRoomSiteID); } /// /// Shows error and sets StopProcessing flag of UIFormControl to true. /// /// Error is passed as resource string, which is resolved before displaying. /// /// Error resource string private void ShowErrorAndStopProcessing(string resourceString) { ShowError(GetString(resourceString)); UIFormControl.StopProcessing = true; } #endregion }