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 }