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 }