using System;
using System.Collections.Generic;
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.EmailEngine;
using CMS.EventLog;
using CMS.GlobalHelper;
using CMS.SettingsProvider;
using CMS.SiteProvider;
using CMS.UIControls;
using CMS.WebAnalytics;
using CMS.ExtendedControls.ActionsConfig;
public partial class CMSModules_Membership_Pages_Users_General_User_WaitingForApproval : CMSUsersPage
{
#region "Methods"
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
gridElem.HideFilterButton = true;
gridElem.LoadGridDefinition();
// Filter settings
IUserFilter filter = (IUserFilter)gridElem.FilterFields["UserID"].ValueControl;
filter.DisplayUserEnabled = false;
}
///
/// Page load.
///
protected void Page_Load(object sender, EventArgs e)
{
// Pagetitle
Title = "Users - Waiting for approval";
// Set grid list properties
gridElem.OnAction += new OnActionEventHandler(gridElem_OnAction);
gridElem.OnBeforeDataReload += new OnBeforeDataReload(gridElem_OnBeforeDataReload);
gridElem.OnExternalDataBound += new OnExternalDataBoundEventHandler(gridElem_OnExternalDataBound);
gridElem.ZeroRowsText = GetString("general.nodatafound");
CurrentMaster.HeaderActions.ActionPerformed += new CommandEventHandler(HeaderActions_ActionPerformed);
CurrentMaster.HeaderActions.AddAction(new HeaderAction()
{
ControlType = HeaderActionTypeEnum.LinkButton,
Text = GetString("administration.users.approveallselected"),
OnClientClick = "if(confirm(" + ScriptHelper.GetString(GetString("administration.users.approveallselectedquestion")) + ")){}else{return false}",
ImageUrl = GetImageUrl("Design/Controls/UniGrid/Actions/approve.png"),
CommandName = "approveall"
});
CurrentMaster.HeaderActions.AddAction(new HeaderAction()
{
ControlType = HeaderActionTypeEnum.LinkButton,
Text = GetString("administration.users.rejectallselected"),
ImageUrl = GetImageUrl("Design/Controls/UniGrid/Actions/reject.png"),
OnClientClick = "OpenReject(); return false;",
CommandName = "rejectall"
});
ltlScript.Text = "";
// Register script for javascript postback
ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "UpdatePage", ScriptHelper.GetScript(
"function UpdatePage(){ " + Page.ClientScript.GetPostBackEventReference(btnUpdate, "") + "; } \n"));
// Register dialog script for modal window
ScriptHelper.RegisterDialogScript(this);
// Register opener for modal window
ScriptHelper.RegisterClientScriptBlock(this, GetType(), "OpenReject",
ScriptHelper.GetScript(
"function OpenReject(user)\n" +
"{\n" +
"document.getElementById('" + hdnUser.ClientID + "').value = user; \n" +
"modalDialog('" + ResolveUrl("~/CMSModules/Membership/Pages/Users/General/User_Reject.aspx") + "', 'UserReject', 650, 480); \n" +
"return false;\n" +
"}\n"));
// Register script for recieving data from modal window
ScriptHelper.RegisterClientScriptBlock(this, GetType(), "SetRejectParam",
ScriptHelper.GetScript(
"function SetRejectParam(reason, email, confirmDelete)\n" +
"{\n" +
"document.getElementById('" + hdnReason.ClientID + "').value = reason;\n" +
"document.getElementById('" + hdnSendEmail.ClientID + "').value = email;\n" +
"document.getElementById('" + hdnConfirmDelete.ClientID + "').value = confirmDelete;\n" +
"UpdatePage();\n" +
"}\n"));
}
void HeaderActions_ActionPerformed(object sender, CommandEventArgs e)
{
switch (e.CommandName)
{
case "approveall":
ApproveAll();
break;
case "rejectall":
RejectAll();
break;
}
}
///
/// Sets grid where condition before data binding.
///
protected void gridElem_OnBeforeDataReload()
{
// Add now parameter
if (gridElem.QueryParameters == null)
{
gridElem.QueryParameters = new QueryDataParameters();
}
gridElem.QueryParameters.Add("@Now", DateTime.Now);
gridElem.WhereCondition = GetWhereCondition();
}
private string GetWhereCondition()
{
string whereCondition = "(UserWaitingForApproval = 1)";
// Get site related condition
if (SiteID != 0)
{
whereCondition += " AND (UserID IN (SELECT UserID FROM CMS_UserSite WHERE SiteID=" + SiteID + "))";
}
return whereCondition;
}
///
/// Handles Unigrid's OnExternalDataBound event.
///
protected object gridElem_OnExternalDataBound(object sender, string sourceName, object parameter)
{
switch (sourceName.ToLowerCSafe())
{
case "userenabled":
return UniGridFunctions.ColoredSpanYesNo(parameter);
case "formattedusername":
return HTMLHelper.HTMLEncode(Functions.GetFormattedUserName(Convert.ToString(parameter)));
}
return parameter;
}
///
/// Handles the UniGrid's OnAction event.
///
/// Name of item (button) that threw event
/// ID (value of Primary key) of corresponding data row
protected void gridElem_OnAction(string actionName, object actionArgument)
{
// Check "modify" permission
if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.Users", "Modify"))
{
RedirectToAccessDenied("CMS.Users", "Modify");
}
// Approve action
if (actionName == "approve")
{
ApproveUsers(ValidationHelper.GetInteger(actionArgument, 0));
}
}
///
/// Approves all selected users.
///
private void ApproveAll()
{
// Check "modify" permission
if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.Users", "Modify"))
{
RedirectToAccessDenied("CMS.Users", "Modify");
}
if (gridElem.SelectedItems.Count > 0)
{
ApproveUsers(0);
}
else
{
ltlScript.Text = ScriptHelper.GetScript("alert('" + GetString("administration.users.nousers") + "');");
}
}
///
/// Reject all selected users.
///
private void RejectAll()
{
// Check "modify" permission
if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.Users", "Modify"))
{
RedirectToAccessDenied("CMS.Users", "Modify");
}
hdnUser.Value = "0";
}
///
/// Approve users.
///
/// User ID
protected void ApproveUsers(int actionArgument)
{
// Process single user
if (actionArgument > 0)
{
SetUserInfo(actionArgument);
}
// Process all selected users
else
{
// Get selected users
List users = gridElem.SelectedItems;
// Set user activation properties
foreach (string userID in users)
{
SetUserInfo(ValidationHelper.GetInteger(userID, 0));
}
}
gridElem.ResetSelection();
gridElem.ReloadData();
}
///
/// Reject users.
///
/// User ID
private void RejectUsers(int actionArgument)
{
// Process single user
if (actionArgument > 0)
{
DeleteUser(actionArgument);
}
// Process all selected users
else
{
// Get selected users
List users = gridElem.SelectedItems;
// Set user activation properties
foreach (string userID in users)
{
DeleteUser(ValidationHelper.GetInteger(userID, 0));
}
}
// Reload data
hdnReason.Value = "";
hdnSendEmail.Value = "";
hdnConfirmDelete.Value = "";
hdnUser.Value = "";
gridElem.ResetSelection();
gridElem.ReloadData();
}
///
/// Sets new UserInfo for approved user.
///
/// User to be approved
protected void SetUserInfo(int userID)
{
UserInfo user = UserInfoProvider.GetFullUserInfo(userID);
// Cancel waiting for approval attribute
user.UserSettings.UserWaitingForApproval = false;
// Set activation time to now
user.UserSettings.UserActivationDate = DateTime.Now;
// Set user who activated this account
user.UserSettings.UserActivatedByUserID = CMSContext.CurrentUser.UserID;
// Enable user
user.UserEnabled = true;
UserInfoProvider.SetUserInfo(user);
// Send e-mail to user
if (!String.IsNullOrEmpty(user.Email))
{
EmailTemplateInfo template = EmailTemplateProvider.GetEmailTemplate("RegistrationUserApproved", CMSContext.CurrentSiteName);
if (template != null)
{
string from = EmailHelper.GetSender(template, SettingsKeyProvider.GetStringValue(CMSContext.CurrentSiteName + ".CMSNoreplyEmailAddress"));
if (!String.IsNullOrEmpty(from))
{
EmailMessage email = new EmailMessage();
email.EmailFormat = EmailFormatEnum.Default;
// Get e-mail sender and subject from template, if used
email.From = from;
email.Recipients = user.Email;
string[,] replacements = new string[1, 2];
// Prepare macro replacements
replacements[0, 0] = "homepageurl";
replacements[0, 1] = URLHelper.GetAbsoluteUrl("~/");
MacroResolver resolver = CMSContext.CurrentResolver;
resolver.EncodeResolvedValues = true;
resolver.SourceParameters = replacements;
email.Body = resolver.ResolveMacros(template.TemplateText);
resolver.EncodeResolvedValues = false;
string emailSubject = EmailHelper.GetSubject(template, GetString("registrationform.registrationapprovalemailsubject"));
email.Subject = resolver.ResolveMacros(emailSubject);
email.PlainTextBody = resolver.ResolveMacros(template.TemplatePlainText);
email.CcRecipients = template.TemplateCc;
email.BccRecipients = template.TemplateBcc;
try
{
// Add attachments
MetaFileInfoProvider.ResolveMetaFileImages(email, template.TemplateID, EmailObjectType.EMAILTEMPLATE, MetaFileInfoProvider.OBJECT_CATEGORY_TEMPLATE);
EmailSender.SendEmail(CMSContext.CurrentSiteName, email);
}
catch
{
EventLogProvider ev = new EventLogProvider();
ev.LogEvent("E", DateTime.Now, "Membership", "WaitingForApprovalEmail", CMSContext.CurrentSite.SiteID);
}
}
else
{
EventLogProvider eventLog = new EventLogProvider();
eventLog.LogEvent(EventLogProvider.EVENT_TYPE_ERROR, DateTime.Now, "WaitingForApproval", "EmailSenderNotSpecified");
}
}
else
{
// Log missing e-mail template
try
{
EventLogProvider el = new EventLogProvider();
el.LogEvent("E", DateTime.Now, "RegistrationUserApproved", "GetEmailTemplate", HTTPHelper.GetAbsoluteUri());
}
catch
{
}
}
}
// User is approved and enabled, could be logged into statistics
AnalyticsHelper.LogRegisteredUser(CMSContext.CurrentSiteName, user);
}
///
/// Rejects and deletes user.
///
/// User to be rejected
protected void DeleteUser(int userID)
{
// Find user
UserInfo user = UserInfoProvider.GetFullUserInfo(userID);
// Send e-mail if requested
if (hdnSendEmail.Value == "true")
{
EmailMessage em = new EmailMessage();
string from = SettingsKeyProvider.GetStringValue(CMSContext.CurrentSiteName + ".CMSNoreplyEmailAddress");
if (!String.IsNullOrEmpty(from))
{
// Set message content
em.From = from;
em.Recipients = user.Email;
em.Subject = GetString("administration.users.rejected");
em.EmailFormat = EmailFormatEnum.Default;
string emailBody = hdnReason.Value.Trim();
em.Body = HTMLHelper.HTMLEncode(emailBody);
em.PlainTextBody = emailBody;
// Send message
EmailSender.SendEmail(em);
}
else
{
EventLogProvider eventLog = new EventLogProvider();
eventLog.LogEvent(EventLogProvider.EVENT_TYPE_ERROR, DateTime.Now, "WaitingForApproval", "EmailSenderNotSpecified");
}
}
// Delete user
SessionManager.RemoveUser(userID);
UserInfoProvider.DeleteUser(userID);
}
///
/// Reject all selected users.
///
protected void btnUpdate_Click(object sender, EventArgs e)
{
// Check "modify" permission
if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.Users", "Modify"))
{
RedirectToAccessDenied("CMS.Users", "Modify");
}
// Run reject function
if ((hdnConfirmDelete.Value != null) && (hdnConfirmDelete.Value != ""))
{
RejectUsers(ValidationHelper.GetInteger(hdnUser.Value, 0));
}
}
#endregion
}