Applies patch for #U4-497 for getting exceptions for xslt

This commit is contained in:
Shannon Deminick
2013-03-26 22:02:08 +06:00
parent 883277125a
commit 4dc22b6ce4

View File

@@ -469,7 +469,7 @@ namespace umbraco
break;
}
case (int)MacroTypes.XSLT:
macroControl = loadMacroXSLT(this, Model, pageElements);
macroControl = LoadMacroXslt(this, Model, pageElements, true);
break;
case (int)MacroTypes.Script:
@@ -774,21 +774,20 @@ namespace umbraco
return retval;
}
public Control loadMacroXSLT(macro macro, MacroModel model, Hashtable pageElements)
internal Control LoadMacroXslt(macro macro, MacroModel model, Hashtable pageElements, bool throwError)
{
if (XsltFile.Trim() != string.Empty)
{
// Get main XML
XmlDocument umbracoXML = content.Instance.XmlContent;
var umbracoXml = content.Instance.XmlContent;
// Create XML document for Macro
var macroXML = new XmlDocument();
macroXML.LoadXml("<macro/>");
var macroXml = new XmlDocument();
macroXml.LoadXml("<macro/>");
foreach (MacroPropertyModel prop in macro.Model.Properties)
foreach (var prop in macro.Model.Properties)
{
addMacroXmlNode(umbracoXML, macroXML, prop.Key, prop.Type,
prop.Value);
addMacroXmlNode(umbracoXml, macroXml, prop.Key, prop.Type, prop.Value);
}
if (HttpContext.Current.Request.QueryString["umbDebug"] != null && GlobalSettings.DebugMode)
@@ -796,7 +795,7 @@ namespace umbraco
return
new LiteralControl("<div style=\"border: 2px solid green; padding: 5px;\"><b>Debug from " +
macro.Name +
"</b><br/><p>" + HttpContext.Current.Server.HtmlEncode(macroXML.OuterXml) +
"</b><br/><p>" + HttpContext.Current.Server.HtmlEncode(macroXml.OuterXml) +
"</p></div>");
}
@@ -806,7 +805,7 @@ namespace umbraco
try
{
Control result = CreateControlsFromText(GetXsltTransformResult(macroXML, xsltFile));
var result = CreateControlsFromText(GetXsltTransformResult(macroXml, xsltFile));
TraceInfo("umbracoMacro", "After performing transformation");
@@ -824,18 +823,32 @@ namespace umbraco
ie = ie.InnerException;
}
var macroErrorEventArgs = new MacroErrorEventArgs {Name = Model.Name, Alias = Model.Alias, ItemKey = Model.Xslt, Exception = e, Behaviour = UmbracoSettings.MacroErrorBehaviour};
return GetControlForErrorBehavior("Error parsing XSLT file: \\xslt\\" + XsltFile, macroErrorEventArgs);
var macroErrorEventArgs = new MacroErrorEventArgs { Name = Model.Name, Alias = Model.Alias, ItemKey = Model.Xslt, Exception = e, Behaviour = UmbracoSettings.MacroErrorBehaviour };
var macroControl = GetControlForErrorBehavior("Error parsing XSLT file: \\xslt\\" + XsltFile, macroErrorEventArgs);
//if it is null, then we are supposed to throw the (original) exception
// see: http://issues.umbraco.org/issue/U4-497 at the end
if (macroControl == null && throwError)
{
throw;
}
return macroControl;
}
}
catch (Exception e)
{
Exceptions.Add(e);
LogHelper.WarnWithException<macro>("Error loading XSLT " + Model.Xslt, true, e);
// Invoke any error handlers for this macro
var macroErrorEventArgs = new MacroErrorEventArgs {Name = Model.Name, Alias = Model.Alias, ItemKey = Model.Xslt, Exception = e, Behaviour = UmbracoSettings.MacroErrorBehaviour};
return GetControlForErrorBehavior("Error reading XSLT file: \\xslt\\" + XsltFile, macroErrorEventArgs);
var macroErrorEventArgs = new MacroErrorEventArgs { Name = Model.Name, Alias = Model.Alias, ItemKey = Model.Xslt, Exception = e, Behaviour = UmbracoSettings.MacroErrorBehaviour };
var macroControl = GetControlForErrorBehavior("Error reading XSLT file: \\xslt\\" + XsltFile, macroErrorEventArgs);
//if it is null, then we are supposed to throw the (original) exception
// see: http://issues.umbraco.org/issue/U4-497 at the end
if (macroControl == null && throwError)
{
throw;
}
return macroControl;
}
}
@@ -843,6 +856,11 @@ namespace umbraco
return new LiteralControl(string.Empty);
}
public Control loadMacroXSLT(macro macro, MacroModel model, Hashtable pageElements)
{
return LoadMacroXslt(macro, model, pageElements, false);
}
/// <summary>
/// Parses the text for umbraco Item controls that need to be rendered.
/// </summary>