using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Xml;
using System.Xml.Linq;
using umbraco.cms.businesslogic.member;
using Umbraco.Core;
using Umbraco.Core.Models;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Web.PublishedCache;
using Umbraco.Web.Security;
namespace Umbraco.Web.Models
{
///
/// A readonly member profile model
///
[ModelBinder(typeof(ProfileModelBinder))]
public class ProfileModel : PostRedirectModel
{
public static ProfileModel CreateModel()
{
var model = new ProfileModel(false);
return model;
}
private ProfileModel(bool doLookup)
{
MemberProperties = new List();
if (doLookup && UmbracoContext.Current != null)
{
var helper = new MembershipHelper(UmbracoContext.Current);
var model = helper.GetCurrentMemberProfileModel();
MemberProperties = model.MemberProperties;
}
}
[Obsolete("Do not use this ctor as it will perform business logic lookups. Use the MembershipHelper.CreateProfileModel or the static ProfileModel.CreateModel() to create an empty model.")]
public ProfileModel()
:this(true)
{
}
[Required]
[RegularExpression(@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?",
ErrorMessage = "Please enter a valid e-mail address")]
public string Email { get; set; }
///
/// The member's real name
///
public string Name { get; set; }
///
/// The member's member type alias
///
[ReadOnly(true)]
public string MemberTypeAlias { get; set; }
[ReadOnly(true)]
public string UserName { get; set; }
[ReadOnly(true)]
public string PasswordQuestion { get; set; }
[ReadOnly(true)]
public string Comment { get; set; }
[ReadOnly(true)]
public bool IsApproved { get; set; }
[ReadOnly(true)]
public bool IsLockedOut { get; set; }
[ReadOnly(true)]
public DateTime LastLockoutDate { get; set; }
[ReadOnly(true)]
public DateTime CreationDate { get; set; }
[ReadOnly(true)]
public DateTime LastLoginDate { get; set; }
[ReadOnly(true)]
public DateTime LastActivityDate { get; set; }
[ReadOnly(true)]
public DateTime LastPasswordChangedDate { get; set; }
///
/// The list of member properties
///
///
/// Adding items to this list on the front-end will not add properties to the member in the database.
///
public List MemberProperties { get; set; }
///
/// A custom model binder for MVC because the default ctor performs a lookup!
///
internal class ProfileModelBinder : DefaultModelBinder
{
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
{
return ProfileModel.CreateModel();
}
}
}
}