using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using CMS.CMSHelper;
using CMS.GlobalHelper;
using CMS.SiteProvider;
using CMS.UIControls;
public partial class CMSModules_Membership_Pages_Users_User_Edit_Settings : CMSUsersPage
{
#region "Variables"
private UserInfo ui;
private bool error = false;
#endregion
#region "Public methods"
///
/// Shows the specified error message.
///
/// Error message text
public override void ShowError(string text)
{
base.ShowError(text);
error = true;
}
#endregion
#region "Protected methods"
///
/// Handles onInit, fill timezone dropdownlist.
///
protected override void OnInit(EventArgs e)
{
timeZone.ReloadData();
base.OnInit(e);
}
///
/// Handles Page Load.
///
protected void Page_Load(object sender, EventArgs e)
{
//Load labels
lblActivatedByUser.Text = GetString("adm.user.lblActivatedByUser");
lblActivationDate.Text = GetString("adm.user.lblActivationDate");
lblCampaign.Text = GetString("adm.user.lblCampaign");
lblMessageNotifEmail.Text = GetString("adm.user.lblMessageNotifEmail");
lblNickName.Text = GetString("adm.user.lblNickName");
lblRegInfo.Text = GetString("adm.user.lblRegInfo");
lblTimeZone.Text = GetString("adm.user.lblTimeZone");
lblURLReferrer.Text = GetString("adm.user.lblURLReferrer");
lblUserPicture.Text = GetString("adm.user.lblUserPicture");
lblUserSignature.Text = GetString("adm.user.lblUserSignature");
lblWaitingForActivation.Text = GetString("adm.user.lblWaitingForActivation");
lblUserLiveID.Text = GetString("adm.user.lblUserLiveID");
lblUserOpenID.ResourceString = "adm.user.lblOpenID";
lblLinkedInUserID.Text = GetString("adm.user.lblUserLinkedInID");
lblBadge.Text = GetString("adm.user.lblBadge");
lblUserShowSplashScreen.Text = GetString("adm.user.lblUserShowSplashScreen");
lblUserActivityPoints.Text = GetString("adm.user.lblUserActivityPoints");
lblUserForumPosts.Text = GetString("adm.user.lblUserForumPosts");
lblUserBlogPosts.Text = GetString("adm.user.lblUserBlogPosts");
lblUserBlogComments.Text = GetString("adm.user.lblUserBlogComments");
lblUserGender.Text = GetString("adm.user.lblUserGender");
lblUserDateOfBirth.Text = GetString("adm.user.lblUserDateOfBirth");
lblUserMessageBoardPosts.Text = GetString("adm.user.lblUserMessageBoardPosts");
lblPosition.Text = ResHelper.GetString("adm.user.lblUserPosition");
lblUserSkype.Text = ResHelper.GetString("adm.user.lblUserSkype");
lblUserIM.Text = ResHelper.GetString("adm.user.lblUserIM");
lblUserPhone.Text = ResHelper.GetString("adm.user.lblUserPhone");
if (!RequestHelper.IsPostBack())
{
rbtnlGender.Items.Add(new ListItem(GetString("general.unknown"), "0"));
rbtnlGender.Items.Add(new ListItem(GetString("general.male"), "1"));
rbtnlGender.Items.Add(new ListItem(GetString("general.female"), "2"));
}
// Get userid from query string
int userId = QueryHelper.GetInteger("userID", 0);
// Check that only global administrator can edit global administrator's accounts
if (userId > 0)
{
ui = UserInfoProvider.GetUserInfo(userId);
CheckUserAvaibleOnSite(ui);
EditedObject = ui;
if (!CheckGlobalAdminEdit(ui))
{
plcTable.Visible = false;
ShowError(GetString("Administration-User_List.ErrorGlobalAdmin"));
}
}
UserPictureFormControl.IsLiveSite = false;
//Load user data
LoadData();
}
///
/// Loads data of edited user from DB.
///
protected void LoadData()
{
//Check if user exists
if (ui != null)
{
if (!RequestHelper.IsPostBack())
{
if ((ui.UserSettings != null) && (ui.UserSettings.UserActivatedByUserID > 0))
{
UserInfo user = UserInfoProvider.GetUserInfo(ui.UserSettings.UserActivatedByUserID);
if (user != null)
{
lblUserFullName.Text = HTMLHelper.HTMLEncode(user.FullName);
}
}
if (String.IsNullOrEmpty(lblUserFullName.Text))
{
lblUserFullName.Text = GetString("general.na");
}
activationDate.SelectedDateTime = ui.UserSettings.UserActivationDate;
txtCampaign.Text = ui.UserCampaign;
txtMessageNotifEmail.Text = ui.UserMessagingNotificationEmail;
txtNickName.Text = ui.UserNickName;
//txtCustomData.Text = ui.UserCustomData.GetData();
//txtPreferences.Text = ui.UserSettings.UserPreferences.Value;
LoadRegInfo(ui.UserSettings);
timeZone.Value = ui.UserSettings.UserTimeZoneID;
txtURLReferrer.Text = ui.UserURLReferrer;
txtUserSignature.Text = ui.UserSignature;
txtUserDescription.Text = ui.UserSettings.UserDescription;
chkWaitingForActivation.Checked = ui.UserSettings.UserWaitingForApproval;
chkLogActivities.Checked = ui.UserSettings.UserLogActivities;
badgeSelector.Value = ui.UserSettings.UserBadgeID;
txtUserLiveID.Text = ui.UserSettings.WindowsLiveID;
txtFacebookUserID.Text = ui.UserSettings.UserFacebookID;
txtOpenID.Text = OpenIDUserInfoProvider.GetOpenIDByUserID(ui.UserID);
txtLinkedInID.Text = ui.UserSettings.UserLinkedInID;
chkUserShowSplashScreen.Checked = ui.UserSettings.UserShowSplashScreen;
chkUserShowWebPartToolbar.Checked = ui.UserSettings.UserWebPartToolbarEnabled;
chkUserShowWebPartToolbar.Attributes.Add("onclick", "javascript: document.getElementById('" + lblUserWebPartToolbarPosition.ClientID + "').style.display = document.getElementById('" + drpUserWebPartToolbarPosition.ClientID + "').style.display = (this.checked ? 'block' : 'none');");
LoadWebPartToolbarPositions();
drpUserWebPartToolbarPosition.SelectedValue = WebPartToolbarPositionEnumFunctions.GetWebPartToolbarPositionString(ui.UserSettings.UserWebPartToolbarPosition);
if (!chkUserShowWebPartToolbar.Checked)
{
lblUserWebPartToolbarPosition.Style.Add("display", "none");
drpUserWebPartToolbarPosition.Style.Add("display", "none");
}
txtUserActivityPoints.Text = ui.UserSettings.UserActivityPoints.ToString();
lblUserForumPostsValue.Text = ui.UserSettings.UserForumPosts.ToString();
lblUserBlogPostsValue.Text = ui.UserSettings.UserBlogPosts.ToString();
lblUserBlogCommentsValue.Text = ui.UserSettings.UserBlogComments.ToString();
rbtnlGender.SelectedValue = ui.UserSettings.UserGender.ToString();
dtUserDateOfBirth.SelectedDateTime = ui.UserSettings.UserDateOfBirth;
lblUserMessageBoardPostsValue.Text = ui.UserSettings.UserMessageBoardPosts.ToString();
txtUserSkype.Text = ValidationHelper.GetString(ui.UserSettings.GetValue("UserSkype"), "");
txtUserIM.Text = ValidationHelper.GetString(ui.UserSettings.GetValue("UserIM"), "");
txtPhone.Text = ValidationHelper.GetString(ui.UserSettings.GetValue("UserPhone"), "");
txtPosition.Text = ValidationHelper.GetString(ui.UserSettings.GetValue("UserPosition"), "");
}
// Load user picture, even for postback
SetUserPictureArea(ui);
}
}
///
/// Displays user's registration information.
///
/// User info
protected void LoadRegInfo(UserSettingsInfo usi)
{
if ((usi.UserRegistrationInfo != null) && (usi.UserRegistrationInfo.ColumnNames != null))
{
plcUserLastLogonInfo.Controls.Add(new LiteralControl("
"));
foreach (string column in usi.UserRegistrationInfo.ColumnNames)
{
Label lbl = new Label();
lbl.Text = HTMLHelper.HTMLEncode(TextHelper.LimitLength((string)usi.UserRegistrationInfo[column], 80, "...")) + "
";
lbl.ToolTip = HTMLHelper.HTMLEncode(column + " - " + (string)usi.UserRegistrationInfo[column]);
plcUserLastLogonInfo.Controls.Add(lbl);
}
plcUserLastLogonInfo.Controls.Add(new LiteralControl("
"));
}
else
{
plcUserLastLogonInfo.Controls.Add(new LiteralControl(GetString("general.na") + "
"));
}
}
///
/// Loads the web part toolbar positions into the drop down list.
///
protected void LoadWebPartToolbarPositions()
{
if (drpUserWebPartToolbarPosition.Items.Count == 0)
{
drpUserWebPartToolbarPosition.Items.Add(new ListItem(GetString("general.top"), WebPartToolbarPositionEnumFunctions.GetWebPartToolbarPositionString(WebPartToolbarPositionEnum.Top)));
drpUserWebPartToolbarPosition.Items.Add(new ListItem(GetString("general.left"), WebPartToolbarPositionEnumFunctions.GetWebPartToolbarPositionString(WebPartToolbarPositionEnum.Left)));
drpUserWebPartToolbarPosition.Items.Add(new ListItem(GetString("general.right"), WebPartToolbarPositionEnumFunctions.GetWebPartToolbarPositionString(WebPartToolbarPositionEnum.Right)));
drpUserWebPartToolbarPosition.Items.Add(new ListItem(GetString("general.bottom"), WebPartToolbarPositionEnumFunctions.GetWebPartToolbarPositionString(WebPartToolbarPositionEnum.Bottom)));
}
}
///
/// Saves data of edited user from TextBoxes into DB.
///
protected void ButtonOK_Click(object sender, EventArgs e)
{
// Check "modify" permission
if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.Users", "Modify"))
{
RedirectToAccessDenied("CMS.Users", "Modify");
}
string errorMessage = null;
// If some email address is set check the format
if (!string.IsNullOrEmpty(txtMessageNotifEmail.Text))
{
errorMessage = new Validator().IsEmail(txtMessageNotifEmail.Text, GetString("adm.user.messageemailincorrect")).Result;
}
if (!UserPictureFormControl.IsValid())
{
errorMessage = UserPictureFormControl.ErrorMessage;
}
if (!dtUserDateOfBirth.IsValidRange() || !activationDate.IsValidRange())
{
errorMessage = GetString("general.errorinvaliddatetimerange");
}
// Clean from empty strings
txtNickName.Text = txtNickName.Text.Trim();
txtUserSignature.Text = txtUserSignature.Text.Trim();
txtUserDescription.Text = txtUserDescription.Text.Trim();
txtMessageNotifEmail.Text = txtMessageNotifEmail.Text.Trim();
if (string.IsNullOrEmpty(errorMessage) && (ui != null))
{
ui.UserSettings.UserActivationDate = activationDate.SelectedDateTime;
ui.UserCampaign = txtCampaign.Text;
ui.UserMessagingNotificationEmail = txtMessageNotifEmail.Text;
ui.UserNickName = txtNickName.Text;
// Check that Windows Live ID is not already registered to some user
string windowsID = txtUserLiveID.Text.Trim();
UserInfo uiUpdated = UserInfoProvider.GetUserInfoByWindowsLiveID(windowsID);
// Windows Live ID is not assigned
if ((uiUpdated == null) || (uiUpdated.UserID == ui.UserID))
{
ui.UserSettings.WindowsLiveID = windowsID;
}
// Windows Live ID is already assigned
else
{
ShowError(GetString("mem.liveid.idalreadyregistered") + uiUpdated.UserName);
return;
}
// Check that FacebookID is not already registered to some user
string facebookID = txtFacebookUserID.Text.Trim();
uiUpdated = UserInfoProvider.GetUserInfoByFacebookConnectID(facebookID);
// Facebook ID not assigned to a user
if ((uiUpdated == null) || (uiUpdated.UserID == ui.UserID))
{
ui.UserSettings.UserFacebookID = facebookID;
}
// Facebook ID is already registered
else
{
ShowError(GetString("mem.facebook.idregistered") + uiUpdated.UserName);
return;
}
// Check that LinkedIn member ID is not already registered to some user
string linkedInID = txtLinkedInID.Text.Trim();
uiUpdated = UserInfoProvider.GetUserInfoByLinkedInID(linkedInID);
// LinkedIn member ID is not assigned
if ((uiUpdated == null) || (uiUpdated.UserID == ui.UserID))
{
ui.UserSettings.UserLinkedInID = linkedInID;
}
// LinkedIn member ID is already assigned
else
{
ShowError(GetString("mem.linkedin.idalreadyregistered") + uiUpdated.UserName);
return;
}
ui.UserSettings.UserTimeZoneID = ValidationHelper.GetInteger(timeZone.Value, 0);
ui.UserURLReferrer = txtURLReferrer.Text;
ui.UserSignature = txtUserSignature.Text;
ui.UserSettings.UserDescription = txtUserDescription.Text;
ui.UserSettings.UserWaitingForApproval = chkWaitingForActivation.Checked;
ui.UserSettings.UserLogActivities = chkLogActivities.Checked;
ui.UserSettings.UserBadgeID = ValidationHelper.GetInteger(badgeSelector.Value, 0);
ui.UserSettings.UserShowSplashScreen = chkUserShowSplashScreen.Checked;
ui.UserSettings.UserWebPartToolbarEnabled = chkUserShowWebPartToolbar.Checked;
ui.UserSettings.UserWebPartToolbarPosition = WebPartToolbarPositionEnumFunctions.GetWebPartToolbarPositionEnum(drpUserWebPartToolbarPosition.SelectedValue);
ui.UserSettings.UserActivityPoints = ValidationHelper.GetInteger(txtUserActivityPoints.Text, 0);
ui.UserSettings.UserGender = ValidationHelper.GetInteger(rbtnlGender.SelectedValue, 0);
ui.UserSettings.UserDateOfBirth = dtUserDateOfBirth.SelectedDateTime;
ui.UserSettings.SetValue("UserPosition", txtPosition.Text);
ui.UserSettings.SetValue("UserSkype", txtUserSkype.Text);
ui.UserSettings.SetValue("UserIM", txtUserIM.Text);
ui.UserSettings.SetValue("UserPhone", txtPhone.Text);
//Set user picture to DB
UserPictureFormControl.UpdateUserPicture(ui);
UserInfoProvider.SetUserInfo(ui);
// Update OpenID value
UpdateOpenID(ui);
// Display info label only if no error occurred
if (!error)
{
//Update user picture on the page
SetUserPictureArea(ui);
ShowChangesSaved();
}
}
else
{
ShowError(errorMessage);
}
}
#endregion
#region "Private methods"
///
/// Updates OpenID for given user.
///
private void UpdateOpenID(UserInfo ui)
{
if (ui != null)
{
string oldOpenID = OpenIDUserInfoProvider.GetOpenIDByUserID(ui.UserID);
string newOpenID = txtOpenID.Text.Trim();
UserInfo uiUpdated = OpenIDUserInfoProvider.GetUserInfoByOpenID(newOpenID);
// Make sure that only non-existing OpenID identifier can be saved
if ((uiUpdated == null) || (uiUpdated.UserID == ui.UserID))
{
// Update or delete given OpenID related to user
OpenIDUserInfoProvider.UpdateOpenIDUserInfo(oldOpenID, newOpenID, ui.UserID);
}
else
{
ShowError(GetString("mem.openid.idassignedto") + uiUpdated.UserName);
}
}
}
///
/// Sets user picture control.
///
private void SetUserPictureArea(UserInfo ui)
{
UserPictureFormControl.UserInfo = ui;
UserPictureFormControl.MaxSideSize = 100;
}
#endregion
}