228 lines
8 KiB
C#
228 lines
8 KiB
C#
|
|
using System;
|
|
using System.Data;
|
|
using System.Configuration;
|
|
using System.Collections;
|
|
using System.Text.RegularExpressions;
|
|
using System.Web;
|
|
using System.Web.Configuration;
|
|
using System.Web.Security;
|
|
using System.Web.UI;
|
|
using System.Web.UI.WebControls;
|
|
using System.Web.UI.WebControls.WebParts;
|
|
using System.Web.UI.HtmlControls;
|
|
using ScrewTurn.Wiki.PluginFramework;
|
|
using System.Globalization;
|
|
|
|
namespace ScrewTurn.Wiki {
|
|
|
|
public partial class UserProfile : BasePage {
|
|
|
|
private UserInfo currentUser;
|
|
|
|
protected void Page_Load(object sender, EventArgs e) {
|
|
Page.Title = Properties.Messages.ProfileTitle + " - " + Settings.WikiTitle;
|
|
|
|
if(SessionFacade.LoginKey == null) {
|
|
UrlTools.Redirect(UrlTools.BuildUrl("Login.aspx?Redirect=Profile.aspx"));
|
|
}
|
|
|
|
currentUser = SessionFacade.GetCurrentUser();
|
|
|
|
if(currentUser.Username == "admin") {
|
|
// Admin only has language preferences, stored in a cookie
|
|
UrlTools.Redirect("Language.aspx");
|
|
return;
|
|
}
|
|
|
|
if(!Page.IsPostBack) {
|
|
bool usersDataSupported = !currentUser.Provider.UsersDataReadOnly;
|
|
bool accountDetailsSupported = !currentUser.Provider.UserAccountsReadOnly;
|
|
|
|
pnlUserData.Visible = usersDataSupported;
|
|
pnlAccount.Visible = accountDetailsSupported;
|
|
pnlNoChanges.Visible = !usersDataSupported && !accountDetailsSupported;
|
|
|
|
languageSelector.LoadLanguages();
|
|
|
|
string name = string.IsNullOrEmpty(currentUser.DisplayName) ? currentUser.Username : currentUser.DisplayName;
|
|
lblUsername.Text = name;
|
|
txtDisplayName.Text = currentUser.DisplayName;
|
|
txtEmail1.Text = currentUser.Email;
|
|
lblGroupsList.Text = string.Join(", ", Array.ConvertAll(SessionFacade.GetCurrentGroups(), delegate(UserGroup g) { return g.Name; }));
|
|
|
|
LoadNotificationsStatus();
|
|
LoadLanguageAndTimezoneSettings();
|
|
|
|
rxvDisplayName.ValidationExpression = Settings.DisplayNameRegex;
|
|
rxvEmail1.ValidationExpression = Settings.EmailRegex;
|
|
rxvPassword1.ValidationExpression = Settings.PasswordRegex;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Loads the page/discussion change notification data.
|
|
/// </summary>
|
|
private void LoadNotificationsStatus() {
|
|
lstPageChanges.Items.Clear();
|
|
lstDiscussionMessages.Items.Clear();
|
|
|
|
bool pageChanges, discussionMessages;
|
|
Users.GetEmailNotification(currentUser, null as ScrewTurn.Wiki.PluginFramework.NamespaceInfo,
|
|
out pageChanges, out discussionMessages);
|
|
|
|
lstPageChanges.Items.Add(new ListItem("<root>", ""));
|
|
lstPageChanges.Items[0].Selected = pageChanges;
|
|
lstDiscussionMessages.Items.Add(new ListItem("<root>", ""));
|
|
lstDiscussionMessages.Items[0].Selected = discussionMessages;
|
|
|
|
foreach(ScrewTurn.Wiki.PluginFramework.NamespaceInfo ns in Pages.GetNamespaces()) {
|
|
Users.GetEmailNotification(currentUser, ns, out pageChanges, out discussionMessages);
|
|
|
|
lstPageChanges.Items.Add(new ListItem(ns.Name, ns.Name));
|
|
lstPageChanges.Items[lstPageChanges.Items.Count - 1].Selected = pageChanges;
|
|
|
|
lstDiscussionMessages.Items.Add(new ListItem(ns.Name, ns.Name));
|
|
lstDiscussionMessages.Items[lstPageChanges.Items.Count - 1].Selected = discussionMessages;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Loads language and time zone settings.
|
|
/// </summary>
|
|
private void LoadLanguageAndTimezoneSettings() {
|
|
// Load hard-stored settings
|
|
// If not available, look for cookie
|
|
// If not available, load defaults
|
|
|
|
string culture = Preferences.LoadLanguageFromUserData();
|
|
if(culture == null) culture = Preferences.LoadLanguageFromCookie();
|
|
if(culture == null) culture = Settings.DefaultLanguage;
|
|
|
|
int? tempTimezone = Preferences.LoadTimezoneFromUserData();
|
|
if(!tempTimezone.HasValue) tempTimezone = Preferences.LoadTimezoneFromCookie();
|
|
if(!tempTimezone.HasValue) tempTimezone = Settings.DefaultTimezone;
|
|
|
|
languageSelector.SelectedLanguage = culture;
|
|
languageSelector.SelectedTimezone = tempTimezone.ToString();
|
|
}
|
|
|
|
protected void btnSaveNotifications_Click(object sender, EventArgs e) {
|
|
// Assume lists have the same number of items
|
|
for(int i = 0; i < lstPageChanges.Items.Count; i++) {
|
|
bool pageChanges = lstPageChanges.Items[i].Selected;
|
|
bool discussionMessages = lstDiscussionMessages.Items[i].Selected;
|
|
|
|
Users.SetEmailNotification(currentUser,
|
|
Pages.FindNamespace(lstPageChanges.Items[i].Value), pageChanges, discussionMessages);
|
|
}
|
|
|
|
lblNotificationsResult.CssClass = "resultok";
|
|
lblNotificationsResult.Text = Properties.Messages.NotificationsStatusSaved;
|
|
}
|
|
|
|
protected void btnSaveLanguage_Click(object sender, EventArgs e) {
|
|
// Hard store settings
|
|
// Delete cookie
|
|
if(Preferences.SavePreferencesInUserData(languageSelector.SelectedLanguage,
|
|
int.Parse(languageSelector.SelectedTimezone, CultureInfo.InvariantCulture))) {
|
|
|
|
Preferences.DeletePreferencesCookie();
|
|
}
|
|
else {
|
|
Preferences.SavePreferencesInCookie(languageSelector.SelectedLanguage,
|
|
int.Parse(languageSelector.SelectedTimezone, CultureInfo.InvariantCulture));
|
|
}
|
|
lblLanguageResult.CssClass = "resultok";
|
|
lblLanguageResult.Text = Properties.Messages.PreferencesSaved;
|
|
}
|
|
|
|
protected void btnSaveDisplayName_Click(object sender, EventArgs e) {
|
|
lblSaveDisplayNameResult.CssClass = "";
|
|
lblSaveDisplayNameResult.Text = "";
|
|
|
|
Page.Validate("vgDisplayName");
|
|
if(!Page.IsValid) return;
|
|
|
|
if(Users.ModifyUser(currentUser, txtDisplayName.Text, null,
|
|
currentUser.Email, currentUser.Active)) {
|
|
lblSaveDisplayNameResult.CssClass = "resultok";
|
|
lblSaveDisplayNameResult.Text = Properties.Messages.DisplayNameSaved;
|
|
}
|
|
else {
|
|
lblSaveDisplayNameResult.CssClass = "resulterror";
|
|
lblSaveDisplayNameResult.Text = Properties.Messages.CouldNotSaveDisplayName;
|
|
}
|
|
|
|
currentUser = Users.FindUser(currentUser.Username);
|
|
}
|
|
|
|
protected void btnSaveEmail_Click(object sender, EventArgs e) {
|
|
lblSaveEmailResult.CssClass = "";
|
|
lblSaveEmailResult.Text = "";
|
|
|
|
Page.Validate("vgEmail");
|
|
if(!Page.IsValid) return;
|
|
|
|
Users.ChangeEmail(currentUser, txtEmail1.Text);
|
|
lblSaveEmailResult.CssClass = "resultok";
|
|
lblSaveEmailResult.Text = Properties.Messages.EmailSaved;
|
|
txtEmail2.Text = "";
|
|
|
|
currentUser = Users.FindUser(currentUser.Username);
|
|
}
|
|
|
|
protected void btnSavePassword_Click(object sender, EventArgs e) {
|
|
Page.Validate("vgPassword");
|
|
if(!Page.IsValid) return;
|
|
|
|
Users.ChangePassword(currentUser, txtPassword1.Text);
|
|
lblSavePasswordResult.CssClass = "resultok";
|
|
lblSavePasswordResult.Text = Properties.Messages.PasswordSaved;
|
|
txtOldPassword.Text = "";
|
|
txtPassword1.Text = "";
|
|
txtPassword2.Text = "";
|
|
|
|
currentUser = Users.FindUser(currentUser.Username);
|
|
}
|
|
|
|
protected void btnDeleteAccount_Click(object sender, EventArgs e) {
|
|
btnConfirm.Enabled = true;
|
|
btnDeleteAccount.Enabled = false;
|
|
}
|
|
|
|
protected void btnConfirm_Click(object sender, EventArgs e) {
|
|
Log.LogEntry("Account deletion requested", EntryType.General, currentUser.Username);
|
|
UserInfo user = Users.FindUser(currentUser.Username);
|
|
Users.RemoveUser(user);
|
|
Session.Abandon();
|
|
UrlTools.RedirectHome();
|
|
}
|
|
|
|
#region Custom Validators
|
|
|
|
protected void cvEmail1_ServerValidate(object source, ServerValidateEventArgs args) {
|
|
args.IsValid = (string.Compare(txtEmail1.Text, txtEmail2.Text, true) == 0);
|
|
}
|
|
|
|
protected void cvEmail2_ServerValidate(object source, ServerValidateEventArgs args) {
|
|
args.IsValid = true;
|
|
}
|
|
|
|
protected void cvPassword1_ServerValidate(object source, ServerValidateEventArgs args) {
|
|
args.IsValid = txtPassword1.Text.Equals(txtPassword2.Text);
|
|
}
|
|
|
|
protected void cvPassword2_ServerValidate(object source, ServerValidateEventArgs args) {
|
|
args.IsValid = true;
|
|
}
|
|
|
|
protected void cvOldPassword_ServerValidate(object source, ServerValidateEventArgs args) {
|
|
UserInfo user = SessionFacade.GetCurrentUser();
|
|
args.IsValid = user.Provider.TestAccount(user, txtOldPassword.Text);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
|
|
}
|