using System;
using System.Data;
using System.Collections;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using CMS.CMSHelper;
using CMS.Community;
using CMS.ExtendedControls;
using CMS.GlobalHelper;
using CMS.PortalEngine;
using CMS.SettingsProvider;
using CMS.UIControls;
using CMS.WebAnalytics;
public partial class CMSModules_Groups_Controls_GroupJoin : CMSAdminControl
{
#region "Variables"
private string mJoinText;
private string mSuccessfulJoinText;
private string mSuccessfulJoinTextWaitingForApproval;
private string mUnSuccessfulJoinText;
private GroupInfo mGroup = null;
private CMSButton mJoinButton = null;
private CMSButton mCancelButton = null;
#endregion
#region "Public properties"
///
/// Returns group name of current group.
///
private string GroupName
{
get
{
if (Group != null)
{
return " " + Group.GroupDisplayName;
}
return "";
}
}
///
/// Gets or sets the text which should be displayed on join dialog.
///
public string JoinText
{
get
{
return DataHelper.GetNotEmpty(mJoinText, GetString("Community.Group.Join") + HTMLHelper.HTMLEncode(GroupName) + "?");
}
set
{
mJoinText = value;
}
}
///
/// Gets or sets the text which should be displayed on join dialog after successful join action.
///
public string SuccessfulJoinText
{
get
{
return DataHelper.GetNotEmpty(mSuccessfulJoinText, GetString("Community.Group.SuccessfulJoin").Replace("##GroupName##", HTMLHelper.HTMLEncode(GroupName)));
}
set
{
mSuccessfulJoinText = value;
}
}
///
/// Gets or sets the text which should be displayed on join dialog after successful join action but must be approved by group admin.
///
public string SuccessfulJoinTextWaitingForApproval
{
get
{
return DataHelper.GetNotEmpty(mSuccessfulJoinTextWaitingForApproval, GetString("Community.Group.SuccessfulJoinApproval").Replace("##GroupName##", HTMLHelper.HTMLEncode(GroupName)));
}
set
{
mSuccessfulJoinTextWaitingForApproval = value;
}
}
///
/// Gets or sets the text which should be displayed on join dialog if join actin was unsuccessful.
///
public string UnSuccessfulJoinText
{
get
{
return DataHelper.GetNotEmpty(mUnSuccessfulJoinText, GetString("Community.Group.UnSuccessfulJoin"));
}
set
{
mUnSuccessfulJoinText = value;
}
}
///
/// Gets or sets the group info object for destination group.
///
public GroupInfo Group
{
get
{
return mGroup;
}
set
{
mGroup = value;
}
}
///
/// Indicates if control buttons should be displayed.
///
public bool DisplayButtons
{
get
{
return plcButtons.Visible;
}
set
{
plcButtons.Visible = value;
}
}
///
/// Join button.
///
public CMSButton JoinButton
{
get
{
if (mJoinButton == null)
{
mJoinButton = btnJoin;
}
return mJoinButton;
}
set
{
mJoinButton = value;
}
}
///
/// Cancel button.
///
public CMSButton CancelButton
{
get
{
if (mCancelButton == null)
{
mCancelButton = btnCancel;
}
return mCancelButton;
}
set
{
mCancelButton = value;
}
}
#endregion
protected void Page_Load(object sender, EventArgs e)
{
ScriptHelper.RegisterWOpenerScript(Page);
JoinButton.Click += new EventHandler(btnJoin_Click);
CancelButton.Text = GetString("General.Cancel");
JoinButton.Text = GetString("General.Join");
if (CMSContext.CurrentUser.IsPublic())
{
JoinButton.Visible = false;
lblInfo.Visible = false;
return;
}
CancelButton.OnClientClick = "CloseDialog()";
lblInfo.Text = JoinText;
}
///
/// Join handler.
///
/// Sender
/// EventArgs
protected void btnJoin_Click(object sender, EventArgs e)
{
if (CMSContext.CurrentUser.IsPublic())
{
return;
}
CancelButton.Text = GetString("General.Close");
JoinButton.Enabled = false;
CancelButton.OnClientClick = "if ((wopener != null)&&(wopener.ReloadPage != null)) {wopener.ReloadPage();} CloseDialog();";
if (Group == null)
{
return;
}
// Check whether user is not already in group or group is not approved or group is not enabled
if (GroupMemberInfoProvider.IsMemberOfGroup(CMSContext.CurrentUser.UserID, Group.GroupID) ||
!Group.GroupApproved)
{
lblInfo.Text = UnSuccessfulJoinText;
return;
}
GroupMemberInfo gmi = new GroupMemberInfo();
;
gmi.MemberJoined = DateTime.Now;
gmi.MemberRejectedWhen = DateTimeHelper.ZERO_TIME;
gmi.MemberStatus = GroupMemberStatus.Rejected;
switch (Group.GroupApproveMembers)
{
// Only approved members can join
case GroupApproveMembersEnum.ApprovedCanJoin:
// Only invited members
case GroupApproveMembersEnum.InvitedWithoutApproval:
gmi.MemberGroupID = Group.GroupID;
gmi.MemberUserID = CMSContext.CurrentUser.UserID;
gmi.MemberStatus = GroupMemberStatus.WaitingForApproval;
GroupMemberInfoProvider.SetGroupMemberInfo(gmi);
if (Group.GroupSendWaitingForApprovalNotification)
{
GroupMemberInfoProvider.SendNotificationMail("Groups.MemberWaitingForApproval", CMSContext.CurrentSiteName, gmi, true);
GroupMemberInfoProvider.SendNotificationMail("Groups.MemberJoinedWaitingForApproval", CMSContext.CurrentSiteName, gmi, false);
}
LogJoinActivity(gmi, Group);
lblInfo.Text = SuccessfulJoinTextWaitingForApproval;
break;
// Any site members can join
case GroupApproveMembersEnum.AnyoneCanJoin:
gmi.MemberGroupID = Group.GroupID;
gmi.MemberUserID = CMSContext.CurrentUser.UserID;
gmi.MemberStatus = GroupMemberStatus.Approved;
gmi.MemberApprovedWhen = DateTime.Now;
GroupMemberInfoProvider.SetGroupMemberInfo(gmi);
if (Group.GroupSendJoinLeaveNotification)
{
GroupMemberInfoProvider.SendNotificationMail("Groups.MemberJoin", CMSContext.CurrentSiteName, gmi, true);
GroupMemberInfoProvider.SendNotificationMail("Groups.MemberJoinedConfirmation", CMSContext.CurrentSiteName, gmi, false);
}
LogJoinActivity(gmi, Group);
lblInfo.Text = SuccessfulJoinText;
break;
}
}
///
/// Log activity
///
/// Member info
/// Group object
private void LogJoinActivity(GroupMemberInfo gmi, GroupInfo group)
{
Activity activity = new ActivityJoinGroup(gmi, group, CMSContext.ActivityEnvironmentVariables);
activity.Log();
}
}