/// <summary>
/// Raises the <see cref="E:System.Web.UI.Control.Load"></see> event.
/// </summary>
/// <param name="e">
/// The <see cref="T:System.EventArgs"></see> object that contains the event data.
/// </param>
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
var zone = this.XmlDocument.SelectNodes("//widget");
if (zone == null)
{
return;
}
// This is for compatibility with older themes that do not have a WidgetContainer control.
var widgetContainerExists = WidgetContainer.DoesThemeWidgetContainerExist(true);
var widgetContainerVirtualPath = WidgetContainer.GetThemeWidgetContainerVirtualPath(false);
foreach (XmlNode widget in zone)
{
var fileName = string.Format("{0}widgets/{1}/widget.ascx", Utils.ApplicationRelativeWebRoot, widget.InnerText);
try
{
//Mod RonC Added this conditional so that the admin widget isn't loaded for non authenticated
// visitors. This shaves 1 sec off of a cold server first page fetch
// for a non admin visitor.
bool isAdminWidget = (fileName.ToLower().IndexOf("/administration/widget.ascx") >= 0);
if (!isAdminWidget || (isAdminWidget && Security.IsAuthenticated))
{
var control = (WidgetBase)this.Page.LoadControl(fileName);
if (widget.Attributes != null)
{
control.WidgetId = new Guid(widget.Attributes["id"].InnerText);
control.Title = widget.Attributes["title"].InnerText;
control.ShowTitle = control.IsEditable
? bool.Parse(widget.Attributes["showTitle"].InnerText)
: control.DisplayHeader;
}
control.ID = control.WidgetId.ToString().Replace("-", string.Empty);
control.Zone = this.zoneName;
control.LoadWidget();
// This will return the WidgetContainer with the control in it.
var widgetContainer = WidgetContainer.GetWidgetContainer(control, widgetContainerExists, widgetContainerVirtualPath);
this.Controls.Add(widgetContainer);
}
}
catch (Exception ex)
{
var lit = new Literal
{
Text = string.Format("<p style=\"color:red\">Widget {0} not found.<p>", widget.InnerText)
};
lit.Text += ex.Message;
if (widget.Attributes != null)
{
lit.Text +=
string.Format(
"<a class=\"delete\" href=\"#\" onclick=\"BlogEngine.widgetAdmin.removeWidget('{0}');return false\" title=\"{1} widget\">X</a>",
widget.Attributes["id"].InnerText,
labels.delete);
}
this.Controls.Add(lit);
}
}
}