using System; using System.Collections; using CMS.CMSHelper; using CMS.Community; using CMS.GlobalHelper; using CMS.SettingsProvider; using CMS.ExtendedControls; using CMS.SiteProvider; public partial class CMSModules_Friends_Controls_Friends_Request : FriendsActionControl { #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 { base.IsLiveSite = value; selectUser.IsLiveSite = value; plcMess.IsLiveSite = value; } } #endregion #region "Methods" protected void Page_Load(object sender, EventArgs e) { // Set user id UserID = QueryHelper.GetInteger("userid", 0); RequestedUserID = QueryHelper.GetInteger("requestid", 0); int siteId = QueryHelper.GetInteger("siteid", -1); if (RequestedUserID != 0) { plcUserSelect.Visible = false; } bool isGlobalAdmin = CMSContext.CurrentUser.IsGlobalAdministrator; RedirectIfRequestIsInvalid(UserID, RequestedUserID); // Show site filter for global admin only in sitemanager selectUser.ShowSiteFilter = ((siteId == 0) && isGlobalAdmin); selectUser.WhereCondition = "UserName NOT LIKE N'public'"; if (IsLiveSite && !isGlobalAdmin) { selectUser.HideDisabledUsers = true; selectUser.HideHiddenUsers = true; selectUser.HideNonApprovedUsers = true; } // Enable automatic approval plcAdministrator.Visible = CanApprove(); if (!ModuleEntry.IsModuleLoaded(ModuleEntry.MESSAGING)) { chkSendMessage.Visible = false; chkSendMessage.Checked = false; } } /// /// Formats username of sender and recipients. /// public override string GetFormattedUserName(string userName, string fullName, string nickName) { return Functions.GetFormattedUserName(userName, fullName, nickName, IsLiveSite); } /// /// Redirects user to an AccessDenied Page with proper error message if /// request parameters are not correct. /// /// ID of the user, sending the request. /// ID of th recepient of the request. private void RedirectIfRequestIsInvalid(int userID, int requestID) { string message = VerifyRequestParameters(userID, requestID); if (!String.IsNullOrEmpty(message)) { UseCMSDeskAccessDeniedPage = !IsLiveSite; RedirectToAccessDenied(message); } } /// /// Verifies request parameters and generates a proper erroe message if /// request parameters are not correct. /// /// ID of the user, sending the request. /// ID of th recepient of the request. private string VerifyRequestParameters(int userID, int requestID) { UserInfo requestedUser = null; if (requestID > 0) { requestedUser = UserInfoProvider.GetUserInfo(requestID); } UserInfo requestingUser = UserInfoProvider.GetUserInfo(userID); if (((requestedUser == null) && (requestID != 0)) || (requestingUser == null)) { return GetString("user.error_doesnoteexist"); } string errMsg = VerifyRequestedUser(requestedUser) ?? VerifyRequestingUser(requestingUser); return errMsg; } /// /// Verifies whether current user has permissions to create a friend-request on behalf of /// /// User on behalf of which the friend request is attempted. /// Error message if there is an error. Null otherwise. private string VerifyRequestingUser(UserInfo requestingUser) { if (!currentUser.IsGlobalAdministrator) { if (CanApprove()) { if (!requestingUser.IsInSite(CMSContext.CurrentSiteName)) { return GetString("user.error_doesnoteexist"); } } else if (requestingUser.UserID != currentUser.UserID) { return GetString("friends.error_permission_createfriendsonbehalf"); } } return null; } /// /// Verifies whether current user has permissions to send a friend-request to /// /// User to which the friend request is being sent. /// Error message if there is an error. Null otherwise. private string VerifyRequestedUser(UserInfo requestedUser) { if (!currentUser.IsGlobalAdministrator && (requestedUser != null)) { if (!requestedUser.IsInSite(CMSContext.CurrentSiteName) || (requestedUser.UserIsHidden) || (!requestedUser.Enabled) || (requestedUser.UserSettings.UserWaitingForApproval)) { return GetString("user.error_doesnoteexist"); } } return null; } #endregion #region "Button handling" protected void btnRequest_Click(object senderObject, EventArgs e) { RaiseOnCheckPermissions(PERMISSION_MANAGE, this); string message = string.Empty; // Requested user id not set explicitly if (RequestedUserID == 0) { RequestedUserID = ValidationHelper.GetInteger(selectUser.Value, 0); } // Both users have to be specified if ((RequestedUserID == 0) || (UserID == 0)) { message = GetString("friends.friendrequired"); } else { UserInfo requestedUser = UserInfoProvider.GetUserInfo(RequestedUserID); message = requestedUser == null ? GetString("user.error_doesnoteexist") : VerifyRequestedUser(requestedUser); if (String.IsNullOrEmpty(message)) { if (!FriendInfoProvider.FriendshipExists(UserID, RequestedUserID)) { // Set up control Comment = txtComment.Text; SendMail = chkSendEmail.Checked; SendMessage = chkSendMessage.Checked; SelectedFriends = new ArrayList(); SelectedFriends.Add(RequestedUserID); AutomaticApprovment = chkAutomaticApprove.Checked; message = PerformAction(FriendsActionEnum.Request); } else { message = GetString("friends.friendshipexists"); } } } if (!String.IsNullOrEmpty(message)) { ShowError(message); } else { // Register wopener script ScriptHelper.RegisterWOpenerScript(Page); btnRequest.Enabled = false; selectUser.Enabled = false; txtComment.Enabled = false; chkAutomaticApprove.Enabled = false; chkSendEmail.Enabled = false; chkSendMessage.Enabled = false; btnCancel.ResourceString = "general.close"; ShowConfirmation(GetString("friends.friendshiprequested")); btnCancel.OnClientClick = "if((wopener != null) && (wopener.refreshList != null)){wopener.refreshList();}CloseDialog();return false;"; } } #endregion }