using System;
using System.Web.UI.WebControls;
using System.Data;
using CMS.CMSHelper;
using CMS.Community;
using CMS.GlobalHelper;
using CMS.SettingsProvider;
using CMS.UIControls;
using CMS.SiteProvider;
public partial class CMSModules_Groups_Controls_Members_MemberList : CMSAdminListControl
{
#region "Variables"
private int mGroupId = 0;
#endregion
#region "Public properties"
///
/// Gets or sets the group ID for which the members should be displayed.
///
public int GroupID
{
get
{
return mGroupId;
}
set
{
mGroupId = value;
gridElem.WhereCondition = CreateWhereCondition();
}
}
#endregion
#region "Page events"
protected void Page_Load(object sender, EventArgs e)
{
// Initialize unigrid
gridElem.OnAction += new OnActionEventHandler(gridElem_OnAction);
gridElem.OnExternalDataBound += new OnExternalDataBoundEventHandler(gridElem_OnExternalDataBound);
gridElem.WhereCondition = CreateWhereCondition();
gridElem.IsLiveSite = IsLiveSite;
gridElem.OnBeforeDataReload += new OnBeforeDataReload(gridElem_OnBeforeDataReload);
gridElem.ZeroRowsText = GetString("general.nodatafound");
}
#endregion
#region "GridView actions handling"
///
/// On before data reyload action.
///
private void gridElem_OnBeforeDataReload()
{
string where = CreateWhereCondition();
// Prepare where condition
if (!string.IsNullOrEmpty(filterMembers.WhereCondition))
{
where = where + " AND (" + filterMembers.WhereCondition + ")";
}
gridElem.WhereCondition = where;
}
///
/// Unigrid OnExternalDataBound event.
///
protected object gridElem_OnExternalDataBound(object sender, string sourceName, object parameter)
{
GroupMemberStatus status = GroupMemberStatus.Approved;
DataRowView drv = null;
GridViewRow gvr = null;
bool current = false;
switch (sourceName.ToLowerCSafe())
{
case "memberapprovedwhen":
case "memberrejectedwhen":
if (parameter != DBNull.Value)
{
// Get current dateTime
return CMSContext.ConvertDateTime(Convert.ToDateTime(parameter), this);
}
break;
case "approve":
gvr = parameter as GridViewRow;
if (gvr != null)
{
drv = gvr.DataItem as DataRowView;
if (drv != null)
{
// Check for current user
if (IsLiveSite && (CMSContext.CurrentUser.UserID == ValidationHelper.GetInteger(drv["MemberUserID"], 0)))
{
current = true;
}
// Do not allow approve hidden or disabled users
bool hiddenOrDisabled = IsUserHiddenOrDisabled(drv);
status = (GroupMemberStatus)ValidationHelper.GetInteger(drv["MemberStatus"], 0);
// Enable or disable Approve button
if (!current && (status != GroupMemberStatus.Approved) && !hiddenOrDisabled)
{
ImageButton button = ((ImageButton)sender);
button.ImageUrl = GetImageUrl("Design/Controls/UniGrid/Actions/Approve.png");
button.ToolTip = GetString("general.approve");
button.Enabled = true;
}
else
{
ImageButton button = ((ImageButton)sender);
button.ImageUrl = GetImageUrl("Design/Controls/UniGrid/Actions/approvedisabled.png");
button.ToolTip = GetString("general.approve");
button.Enabled = false;
}
}
}
break;
case "reject":
gvr = parameter as GridViewRow;
if (gvr != null)
{
drv = gvr.DataItem as DataRowView;
if (drv != null)
{
// Check for current user
if (IsLiveSite && (CMSContext.CurrentUser.UserID == ValidationHelper.GetInteger(drv.Row["MemberUserID"], 0)))
{
current = true;
}
status = (GroupMemberStatus)ValidationHelper.GetInteger(drv["MemberStatus"], 0);
// Enable or disable Reject button
if (!current && (status != GroupMemberStatus.Rejected))
{
ImageButton button = ((ImageButton)sender);
button.ImageUrl = GetImageUrl("Design/Controls/UniGrid/Actions/Reject.png");
button.ToolTip = GetString("general.reject");
button.Enabled = true;
}
else
{
ImageButton button = ((ImageButton)sender);
button.ImageUrl = GetImageUrl("Design/Controls/UniGrid/Actions/rejectdisabled.png");
button.ToolTip = GetString("general.reject");
button.Enabled = false;
}
}
}
break;
case "formattedusername":
// Format username
return HTMLHelper.HTMLEncode(Functions.GetFormattedUserName(Convert.ToString(parameter), IsLiveSite));
case "edit":
gvr = parameter as GridViewRow;
if (gvr != null)
{
drv = gvr.DataItem as DataRowView;
if (drv != null)
{
// Do not allow approve hidden or disabled users
bool hiddenOrDisabled = IsUserHiddenOrDisabled(drv);
// Enable or disable Edit button
if (!hiddenOrDisabled)
{
ImageButton button = ((ImageButton)sender);
button.ImageUrl = GetImageUrl("Design/Controls/UniGrid/Actions/Edit.png");
button.ToolTip = GetString("general.edit");
button.Enabled = true;
}
else
{
ImageButton button = ((ImageButton)sender);
button.ImageUrl = GetImageUrl("Design/Controls/UniGrid/Actions/editdisabled.png");
button.ToolTip = GetString("general.edit");
button.Enabled = false;
}
}
}
break;
}
return parameter;
}
///
/// Handles the UniGrid's OnAction event.
///
/// Name of item (button) that throws event
/// ID (value of Primary key) of corresponding data row
protected void gridElem_OnAction(string actionName, object actionArgument)
{
switch (actionName)
{
case "delete":
case "approve":
case "reject":
// Check MANAGE permission for groups module
if (!CheckPermissions("cms.groups", PERMISSION_MANAGE, GroupID))
{
return;
}
break;
}
if (actionName == "delete")
{
// Delete member
GroupMemberInfoProvider.DeleteGroupMemberInfo(ValidationHelper.GetInteger(actionArgument, 0));
}
else if (actionName == "approve")
{
// Approve member
GroupMemberInfo gmi = GroupMemberInfoProvider.GetGroupMemberInfo(ValidationHelper.GetInteger(actionArgument, 0));
if (gmi != null)
{
gmi.MemberApprovedByUserID = CMSContext.CurrentUser.UserID;
gmi.MemberStatus = GroupMemberStatus.Approved;
gmi.MemberApprovedWhen = DateTime.Now;
gmi.MemberRejectedWhen = DataHelper.DATETIME_NOT_SELECTED;
GroupMemberInfoProvider.SetGroupMemberInfo(gmi);
GroupInfo group = GroupInfoProvider.GetGroupInfo(GroupID);
if ((group != null) && (group.GroupSendWaitingForApprovalNotification))
{
// Send notification email
GroupMemberInfoProvider.SendNotificationMail("Groups.MemberApproved", CMSContext.CurrentSiteName, gmi, false);
}
}
}
else if (actionName == "reject")
{
// Reject member
GroupMemberInfo gmi = GroupMemberInfoProvider.GetGroupMemberInfo(ValidationHelper.GetInteger(actionArgument, 0));
if (gmi != null)
{
gmi.MemberApprovedByUserID = CMSContext.CurrentUser.UserID;
gmi.MemberStatus = GroupMemberStatus.Rejected;
gmi.MemberApprovedWhen = DataHelper.DATETIME_NOT_SELECTED;
gmi.MemberRejectedWhen = DateTime.Now;
GroupMemberInfoProvider.SetGroupMemberInfo(gmi);
GroupInfo group = GroupInfoProvider.GetGroupInfo(GroupID);
if ((group != null) && (group.GroupSendWaitingForApprovalNotification))
{
// Send notification email
GroupMemberInfoProvider.SendNotificationMail("Groups.MemberRejected", CMSContext.CurrentSiteName, gmi, false);
}
}
}
RaiseOnAction(actionName, actionArgument);
}
#endregion
#region "Methods"
///
/// Reloads the grid data.
///
public void ReloadGrid()
{
gridElem.ReloadData();
}
///
/// Creates where condition for unigrid according to the parameters.
///
private string CreateWhereCondition()
{
// Prepare where condition
string where = String.Format("(MemberGroupID = {0} AND SiteID = {1})", mGroupId, CMSContext.CurrentSiteID);
if (IsLiveSite)
{
where += " AND (UserIsHidden = 0 OR UserIsHidden IS NULL) AND " + UserInfoProvider.USER_ENABLED_WHERE_CONDITION;
}
return where;
}
///
/// Returns if user is hidden or disabled
///
/// DataRowView with user data to inspect
private bool IsUserHiddenOrDisabled(DataRowView drv)
{
if (drv != null)
{
return (ValidationHelper.GetBoolean(drv["UserIsHidden"], false) || (!ValidationHelper.GetBoolean(drv["UserEnabled"], true) || (ValidationHelper.GetInteger(drv["UserAccountLockReason"], 0) != 0)));
}
return true;
}
#endregion
}