287 lines
12 KiB
C#
287 lines
12 KiB
C#
// Material sourced from the bluePortal project (http://blueportal.codeplex.com).
|
|
// Licensed under the Microsoft Public License (available at http://www.opensource.org/licenses/ms-pl.html).
|
|
|
|
using System;
|
|
using System.Data;
|
|
using System.Collections;
|
|
using System.Configuration;
|
|
using System.IO;
|
|
using System.Web;
|
|
using System.Web.Security;
|
|
using System.Web.UI;
|
|
using System.Web.UI.WebControls;
|
|
using System.Web.UI.WebControls.WebParts;
|
|
using System.Web.UI.HtmlControls;
|
|
|
|
namespace CSSFriendly
|
|
{
|
|
public class LoginAdapter : System.Web.UI.WebControls.Adapters.WebControlAdapter
|
|
{
|
|
private enum State
|
|
{
|
|
LoggingIn,
|
|
Failed,
|
|
Success,
|
|
}
|
|
State _state = State.LoggingIn;
|
|
|
|
private WebControlAdapterExtender _extender = null;
|
|
private WebControlAdapterExtender Extender
|
|
{
|
|
get
|
|
{
|
|
if (((_extender == null) && (Control != null)) ||
|
|
((_extender != null) && (Control != _extender.AdaptedControl)))
|
|
{
|
|
_extender = new WebControlAdapterExtender(Control);
|
|
}
|
|
|
|
System.Diagnostics.Debug.Assert(_extender != null, "CSS Friendly adapters internal error", "Null extender instance");
|
|
return _extender;
|
|
}
|
|
}
|
|
|
|
public LoginAdapter()
|
|
{
|
|
_state = State.LoggingIn;
|
|
}
|
|
|
|
/// ///////////////////////////////////////////////////////////////////////////////
|
|
/// PROTECTED
|
|
|
|
protected override void OnInit(EventArgs e)
|
|
{
|
|
base.OnInit(e);
|
|
|
|
Login login = Control as Login;
|
|
if (Extender.AdapterEnabled && (login != null))
|
|
{
|
|
RegisterScripts();
|
|
login.LoggedIn += OnLoggedIn;
|
|
login.LoginError += OnLoginError;
|
|
_state = State.LoggingIn;
|
|
}
|
|
}
|
|
|
|
protected override void CreateChildControls()
|
|
{
|
|
base.CreateChildControls();
|
|
Login login = Control as Login;
|
|
if ((login != null) && (login.Controls.Count == 1) && (login.LayoutTemplate != null))
|
|
{
|
|
Control container = login.Controls[0];
|
|
if (container != null)
|
|
{
|
|
container.Controls.Clear();
|
|
login.LayoutTemplate.InstantiateIn(container);
|
|
container.DataBind();
|
|
}
|
|
}
|
|
}
|
|
|
|
protected void OnLoggedIn(object sender, EventArgs e)
|
|
{
|
|
_state = State.Success;
|
|
}
|
|
|
|
protected void OnLoginError(object sender, EventArgs e)
|
|
{
|
|
_state = State.Failed;
|
|
}
|
|
|
|
protected override void RenderBeginTag(HtmlTextWriter writer)
|
|
{
|
|
if (Extender.AdapterEnabled)
|
|
{
|
|
Extender.RenderBeginTag(writer, "AspNet-Login");
|
|
}
|
|
else
|
|
{
|
|
base.RenderBeginTag(writer);
|
|
}
|
|
}
|
|
|
|
protected override void RenderEndTag(HtmlTextWriter writer)
|
|
{
|
|
if (Extender.AdapterEnabled)
|
|
{
|
|
Extender.RenderEndTag(writer);
|
|
}
|
|
else
|
|
{
|
|
base.RenderEndTag(writer);
|
|
}
|
|
}
|
|
|
|
protected override void RenderContents(HtmlTextWriter writer)
|
|
{
|
|
if (Extender.AdapterEnabled)
|
|
{
|
|
Login login = Control as Login;
|
|
if (login != null)
|
|
{
|
|
if (login.LayoutTemplate != null)
|
|
{
|
|
if (login.Controls.Count == 1)
|
|
{
|
|
Control container = login.Controls[0];
|
|
if (container != null)
|
|
{
|
|
foreach (Control c in container.Controls)
|
|
{
|
|
c.RenderControl(writer);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
WriteTitlePanel(writer, login);
|
|
WriteInstructionPanel(writer, login);
|
|
WriteHelpPanel(writer, login);
|
|
WriteUserPanel(writer, login);
|
|
WritePasswordPanel(writer, login);
|
|
WriteRememberMePanel(writer, login);
|
|
if (_state == State.Failed)
|
|
{
|
|
WriteFailurePanel(writer, login);
|
|
}
|
|
WriteSubmitPanel(writer, login);
|
|
WriteCreateUserPanel(writer, login);
|
|
WritePasswordRecoveryPanel(writer, login);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
base.RenderContents(writer);
|
|
}
|
|
}
|
|
|
|
/// ///////////////////////////////////////////////////////////////////////////////
|
|
/// PRIVATE
|
|
|
|
private void RegisterScripts()
|
|
{
|
|
}
|
|
|
|
private void WriteTitlePanel(HtmlTextWriter writer, Login login)
|
|
{
|
|
if (!String.IsNullOrEmpty(login.TitleText))
|
|
{
|
|
string className = (login.TitleTextStyle != null) && (!String.IsNullOrEmpty(login.TitleTextStyle.CssClass)) ? login.TitleTextStyle.CssClass + " " : "";
|
|
className += "AspNet-Login-TitlePanel";
|
|
WebControlAdapterExtender.WriteBeginDiv(writer, className);
|
|
WebControlAdapterExtender.WriteSpan(writer, "", login.TitleText);
|
|
WebControlAdapterExtender.WriteEndDiv(writer);
|
|
}
|
|
}
|
|
|
|
private void WriteInstructionPanel(HtmlTextWriter writer, Login login)
|
|
{
|
|
if (!String.IsNullOrEmpty(login.InstructionText))
|
|
{
|
|
string className = (login.InstructionTextStyle != null) && (!String.IsNullOrEmpty(login.InstructionTextStyle.CssClass)) ? login.InstructionTextStyle.CssClass + " " : "";
|
|
className += "AspNet-Login-InstructionPanel";
|
|
WebControlAdapterExtender.WriteBeginDiv(writer, className);
|
|
WebControlAdapterExtender.WriteSpan(writer, "", login.InstructionText);
|
|
WebControlAdapterExtender.WriteEndDiv(writer);
|
|
}
|
|
}
|
|
|
|
private void WriteFailurePanel(HtmlTextWriter writer, Login login)
|
|
{
|
|
if (!String.IsNullOrEmpty(login.FailureText))
|
|
{
|
|
string className = (login.FailureTextStyle != null) && (!String.IsNullOrEmpty(login.FailureTextStyle.CssClass)) ? login.FailureTextStyle.CssClass + " " : "";
|
|
className += "AspNet-Login-FailurePanel";
|
|
WebControlAdapterExtender.WriteBeginDiv(writer, className);
|
|
WebControlAdapterExtender.WriteSpan(writer, "", login.FailureText);
|
|
WebControlAdapterExtender.WriteEndDiv(writer);
|
|
}
|
|
}
|
|
|
|
private void WriteHelpPanel(HtmlTextWriter writer, Login login)
|
|
{
|
|
if ((!String.IsNullOrEmpty(login.HelpPageIconUrl)) || (!String.IsNullOrEmpty(login.HelpPageText)))
|
|
{
|
|
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-Login-HelpPanel");
|
|
WebControlAdapterExtender.WriteImage(writer, login.HelpPageIconUrl, "Help");
|
|
WebControlAdapterExtender.WriteLink(writer, login.HyperLinkStyle.CssClass, login.HelpPageUrl, "Help", login.HelpPageText);
|
|
WebControlAdapterExtender.WriteEndDiv(writer);
|
|
}
|
|
}
|
|
|
|
private void WriteUserPanel(HtmlTextWriter writer, Login login)
|
|
{
|
|
Page.ClientScript.RegisterForEventValidation(login.FindControl("UserName").UniqueID);
|
|
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-Login-UserPanel");
|
|
Extender.WriteTextBox(writer, false, login.LabelStyle.CssClass, login.UserNameLabelText, login.TextBoxStyle.CssClass, "UserName", login.UserName);
|
|
WebControlAdapterExtender.WriteRequiredFieldValidator(writer, login.FindControl("UserNameRequired") as RequiredFieldValidator, login.ValidatorTextStyle.CssClass, "UserName", login.UserNameRequiredErrorMessage);
|
|
WebControlAdapterExtender.WriteEndDiv(writer);
|
|
}
|
|
|
|
private void WritePasswordPanel(HtmlTextWriter writer, Login login)
|
|
{
|
|
Page.ClientScript.RegisterForEventValidation(login.FindControl("Password").UniqueID);
|
|
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-Login-PasswordPanel");
|
|
Extender.WriteTextBox(writer, true, login.LabelStyle.CssClass, login.PasswordLabelText, login.TextBoxStyle.CssClass, "Password", "");
|
|
WebControlAdapterExtender.WriteRequiredFieldValidator(writer, login.FindControl("PasswordRequired") as RequiredFieldValidator, login.ValidatorTextStyle.CssClass, "Password", login.PasswordRequiredErrorMessage);
|
|
WebControlAdapterExtender.WriteEndDiv(writer);
|
|
}
|
|
|
|
private void WriteRememberMePanel(HtmlTextWriter writer, Login login)
|
|
{
|
|
if (login.DisplayRememberMe)
|
|
{
|
|
Page.ClientScript.RegisterForEventValidation(login.FindControl("RememberMe").UniqueID);
|
|
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-Login-RememberMePanel");
|
|
Extender.WriteCheckBox(writer, login.LabelStyle.CssClass, login.RememberMeText, login.CheckBoxStyle.CssClass, "RememberMe", login.RememberMeSet);
|
|
WebControlAdapterExtender.WriteEndDiv(writer);
|
|
}
|
|
}
|
|
|
|
private void WriteSubmitPanel(HtmlTextWriter writer, Login login)
|
|
{
|
|
string id = "Login";
|
|
string idWithType = WebControlAdapterExtender.MakeIdWithButtonType(id, login.LoginButtonType);
|
|
Control btn = login.FindControl(idWithType);
|
|
if (btn != null)
|
|
{
|
|
Page.ClientScript.RegisterForEventValidation(btn.UniqueID);
|
|
|
|
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-Login-SubmitPanel");
|
|
|
|
PostBackOptions options = new PostBackOptions(btn, "", "", false, false, false, false, true, login.UniqueID);
|
|
string javascript = "javascript:" + Page.ClientScript.GetPostBackEventReference(options);
|
|
javascript = Page.Server.HtmlEncode(javascript);
|
|
|
|
Extender.WriteSubmit(writer, login.LoginButtonType, login.LoginButtonStyle.CssClass, id, login.LoginButtonImageUrl, javascript, login.LoginButtonText);
|
|
|
|
WebControlAdapterExtender.WriteEndDiv(writer);
|
|
}
|
|
}
|
|
|
|
private void WriteCreateUserPanel(HtmlTextWriter writer, Login login)
|
|
{
|
|
if ((!String.IsNullOrEmpty(login.CreateUserUrl)) || (!String.IsNullOrEmpty(login.CreateUserText)))
|
|
{
|
|
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-Login-CreateUserPanel");
|
|
WebControlAdapterExtender.WriteImage(writer, login.CreateUserIconUrl, "Create user");
|
|
WebControlAdapterExtender.WriteLink(writer, login.HyperLinkStyle.CssClass, login.CreateUserUrl, "Create user", login.CreateUserText);
|
|
WebControlAdapterExtender.WriteEndDiv(writer);
|
|
}
|
|
}
|
|
|
|
private void WritePasswordRecoveryPanel(HtmlTextWriter writer, Login login)
|
|
{
|
|
if ((!String.IsNullOrEmpty(login.PasswordRecoveryUrl)) || (!String.IsNullOrEmpty(login.PasswordRecoveryText)))
|
|
{
|
|
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-Login-PasswordRecoveryPanel");
|
|
WebControlAdapterExtender.WriteImage(writer, login.PasswordRecoveryIconUrl, "Password recovery");
|
|
WebControlAdapterExtender.WriteLink(writer, login.HyperLinkStyle.CssClass, login.PasswordRecoveryUrl, "Password recovery", login.PasswordRecoveryText);
|
|
WebControlAdapterExtender.WriteEndDiv(writer);
|
|
}
|
|
}
|
|
}
|
|
}
|