using System; using System.Data; using System.Web.UI.WebControls; using CMS.CMSHelper; using CMS.Community; using CMS.GlobalHelper; using CMS.PortalControls; using CMS.PortalEngine; using CMS.SettingsProvider; using CMS.SiteProvider; using CMS.WebAnalytics; public partial class CMSWebParts_Community_Membership_MyInvitations : CMSAbstractWebPart { #region "Private variables" private int mUserId = 0; private string mUserName = String.Empty; protected string mDeleteImageUrl = string.Empty; protected string mAcceptImageUrl = string.Empty; protected string mDeleteToolTip = string.Empty; protected string mAcceptToolTip = string.Empty; private UserInfo userInfo = null; #endregion #region "Public properties" /// /// Gets or sets URL of the delete button image. /// public string DeleteImageUrl { get { return URLHelper.ResolveUrl(DataHelper.GetNotEmpty(GetValue("DeleteImageUrl"), GetImageUrl("Design/Controls/UniGrid/Actions/delete.png"))); } set { mDeleteImageUrl = value; SetValue("DeleteImageUrl", value); } } /// /// Gets or sets URL of the accept button image. /// public string AcceptImageUrl { get { return URLHelper.ResolveUrl(DataHelper.GetNotEmpty(GetValue("AcceptImageUrl"), GetImageUrl("Design/Controls/UniGrid/Actions/Approve.png"))); } set { mDeleteImageUrl = value; SetValue("AcceptImageUrl", value); } } /// /// Gets or sets the value that indicates whether control should be hidden if no data found. /// public bool HideControlForZeroRows { get { return ValidationHelper.GetBoolean(GetValue("HideControlForZeroRows"), rptMyInvitations.HideControlForZeroRows); } set { SetValue("HideControlForZeroRows", value); rptMyInvitations.HideControlForZeroRows = value; } } /// /// Gets or sets the text which is displayed when there is no data. /// public string ZeroRowsText { get { return ValidationHelper.GetString(GetValue("ZeroRowsText"), rptMyInvitations.ZeroRowsText); } set { SetValue("ZeroRowsText", value); rptMyInvitations.ZeroRowsText = value; } } /// /// ID of user. /// [Obsolete("Use UserName instead")] public int UserID { get { mUserId = ValidationHelper.GetInteger(GetValue("UserID"), 0); return (mUserId == 0) ? CMSContext.CurrentUser.UserID : mUserId; } set { SetValue("UserID", value); mUserId = value; } } /// /// Name of user. /// public string UserName { get { // Get value mUserName = ValidationHelper.GetString(GetValue("UserName"), String.Empty); if (mUserName != String.Empty) { return mUserName; } // Back compatibility int userID = ValidationHelper.GetInteger(GetValue("UserID"), 0); if (userID != 0) { if (userID == CMSContext.CurrentUser.UserID) { return CMSContext.CurrentUser.UserName; } if (userInfo == null) { userInfo = UserInfoProvider.GetUserInfo(userID); } if (userInfo != null) { return userInfo.UserName; } } return CMSContext.CurrentUser.UserName; } set { // Set value SetValue("UserName", value); mUserName = value; } } #endregion #region "Caption properties" /// /// 'Invitation is not valid' caption /// public string InvitationIsNotValid { get { return DataHelper.GetNotEmpty(GetValue("InvitationIsNotValid"), GetString("group.invitationisnotvalid")); } } /// /// 'Group no longer exists' caption /// public string GroupNoLongerExists { get { return DataHelper.GetNotEmpty(GetValue("GroupNoLongerExists"), GetString("group.nolongerexists")); } } /// /// 'Member joined' caption /// public string MemberJoined { get { return DataHelper.GetNotEmpty(GetValue("MemberJoined"), GetString("groups.memberjoined")); } } /// /// 'Member waiting' caption /// public string MemberWaiting { get { return DataHelper.GetNotEmpty(GetValue("MemberWaiting"), GetString("groups.memberjoinedwaiting")); } } /// /// 'User is already member' caption /// public string UserIsAlreadyMember { get { return DataHelper.GetNotEmpty(GetValue("UserIsAlreadyMember"), GetString("groups.userisalreadymember")); } } #endregion #region "Methods" /// /// Content loaded event handler. /// public override void OnContentLoaded() { base.OnContentLoaded(); SetupControl(); } /// /// Reloads data. /// public override void ReloadData() { base.ReloadData(); SetupControl(); } protected void SetupControl() { if (StopProcessing) { Visible = false; // Do not load data } else { // Set scripts ltlMessage.Text = ScriptHelper.GetScript("var deleteMessage ='" + GetString("general.confirmdelete") + "';"); ltlMessage.Text += ScriptHelper.GetScript("var acceptMessage ='" + GetString("groupinvitation.confirmaccept") + "';"); // Set repeater visibility settings rptMyInvitations.ZeroRowsText = ZeroRowsText; rptMyInvitations.HideControlForZeroRows = HideControlForZeroRows; // Set image and tooltip for actions mDeleteImageUrl = DeleteImageUrl; mAcceptImageUrl = AcceptImageUrl; mAcceptToolTip = GetString("general.accept"); mDeleteToolTip = GetString("general.delete"); BindData(); } } /// /// Deletes invitation. /// protected void btnDelete_OnCommand(object sender, CommandEventArgs e) { if (e.CommandName == "delete") { // Delete int invitationId = ValidationHelper.GetInteger(e.CommandArgument, 0); InvitationInfoProvider.DeleteInvitationInfo(invitationId); BindData(); } } /// /// Accepts invitation. /// protected void btnAccept_OnCommand(object sender, CommandEventArgs e) { if (e.CommandName == "accept") { // Accept int invitationId = ValidationHelper.GetInteger(e.CommandArgument, 0); InvitationInfo invitation = InvitationInfoProvider.GetInvitationInfo(invitationId); // Check if time is correct if ((invitation.InvitationValidTo == DateTimeHelper.ZERO_TIME) || (invitation.InvitationValidTo >= DateTime.Now)) { GroupInfo group = GroupInfoProvider.GetGroupInfo(invitation.InvitationGroupID); if (group != null) { // Check if invitation is from group member if (!GroupMemberInfoProvider.IsMemberOfGroup(invitation.InvitedUserID, invitation.InvitationGroupID)) { // Transfer user name to user info if (userInfo == null) { userInfo = UserInfoProvider.GetUserInfo(UserName); } if (userInfo != null) { // Create group member info object GroupMemberInfo groupMember = new GroupMemberInfo(); groupMember.MemberInvitedByUserID = invitation.InvitedByUserID; groupMember.MemberUserID = userInfo.UserID; groupMember.MemberGroupID = invitation.InvitationGroupID; groupMember.MemberJoined = DateTime.Now; // Set proper status depending on group settings switch (group.GroupApproveMembers) { case GroupApproveMembersEnum.ApprovedCanJoin: groupMember.MemberStatus = GroupMemberStatus.WaitingForApproval; lblInfo.Text = MemberWaiting.Replace("##GROUPNAME##", HTMLHelper.HTMLEncode(group.GroupDisplayName)) + "

"; break; default: groupMember.MemberApprovedByUserID = invitation.InvitedByUserID; groupMember.MemberApprovedWhen = DateTime.Now; groupMember.MemberStatus = GroupMemberStatus.Approved; lblInfo.Text = MemberJoined.Replace("##GROUPNAME##", HTMLHelper.HTMLEncode(group.GroupDisplayName)) + "

"; break; } // Store info object to database GroupMemberInfoProvider.SetGroupMemberInfo(groupMember); // Delete all invitations to specified group for specified user string whereCondition = "InvitationGroupID = " + invitation.InvitationGroupID + " AND (InvitedUserID=" + userInfo.UserID + ")"; InvitationInfoProvider.DeleteInvitations(whereCondition); // Log activity LogJoinActivity(groupMember, group); } } else { // Show error message and delete invitation lblInfo.Text = UserIsAlreadyMember.Replace("##GROUPNAME##", HTMLHelper.HTMLEncode(group.GroupDisplayName)) + "

"; lblInfo.CssClass = "InvitationErrorLabel"; InvitationInfoProvider.DeleteInvitationInfo(invitation); } } else { // Show error message and delete invitation lblInfo.Text = GroupNoLongerExists + "

"; lblInfo.CssClass = "InvitationErrorLabel"; InvitationInfoProvider.DeleteInvitationInfo(invitation); } } else { // Show error message and delete invitation lblInfo.Text = InvitationIsNotValid + "

"; lblInfo.CssClass = "InvitationErrorLabel"; InvitationInfoProvider.DeleteInvitationInfo(invitation); } lblInfo.Visible = true; BindData(); } } /// /// Binds data to repeater. /// private void BindData() { if (UserName != String.Empty) { // Get correct invitations DataSet invitations = InvitationInfoProvider.GetMyInvitations("InvitedUserID IN (SELECT UserID FROM CMS_User WHERE UserName='" + UserName.Replace("'", "''") + "')", "InvitationCreated"); rptMyInvitations.DataSource = invitations; rptMyInvitations.DataBind(); // Hide control if no data if (DataHelper.DataSourceIsEmpty(invitations) && (HideControlForZeroRows)) { Visible = false; rptMyInvitations.Visible = false; } } } /// /// Resolve text. /// /// Input value public string ResolveText(object value) { return HTMLHelper.HTMLEncode(ValidationHelper.GetString(value, "")); } /// /// Log activity /// /// Member info /// Group info private void LogJoinActivity(GroupMemberInfo gmi,GroupInfo group) { Activity activity = new ActivityJoinGroup(gmi, group, CMSContext.ActivityEnvironmentVariables); activity.Log(); } #endregion }