#19788: Adding null checks to Content tokens

Work Item: 19788

--HG--
branch : 1.x
This commit is contained in:
Zoltán Lehóczky
2013-06-27 18:33:37 +02:00
parent d346f9953f
commit a177367620

View File

@@ -22,6 +22,7 @@ namespace Orchard.Tokens.Providers {
}
public Localizer T { get; set; }
private UrlHelper UrlHelper { get { return new UrlHelper(_workContextAccessor.GetContext().HttpContext.Request.RequestContext); } }
public void Describe(DescribeContext context) {
context.For("Content", T("Content Items"), T("Content Items"))
@@ -70,27 +71,21 @@ namespace Orchard.Tokens.Providers {
public void Evaluate(EvaluateContext context) {
context.For<IContent>("Content")
.Token("Id", content => content.Id)
.Token("Id", content => content != null ? content.Id : 0)
.Token("Author", AuthorName)
.Chain("Author", "User", content => content.As<ICommonPart>().Owner)
.Token("Date", content => content.As<ICommonPart>().CreatedUtc)
.Chain("Date", "Date", content => content.As<ICommonPart>().CreatedUtc)
.Token("Identity", content => _contentManager.GetItemMetadata(content).Identity.ToString())
.Token("ContentType", content => content.ContentItem.TypeDefinition.DisplayName)
.Chain("ContentType", "TypeDefinition", content => content.ContentItem.TypeDefinition)
.Token("DisplayText", content => _contentManager.GetItemMetadata(content).DisplayText)
.Chain("DisplayText", "Text", content => _contentManager.GetItemMetadata(content).DisplayText)
.Token("DisplayUrl", content => new UrlHelper(_workContextAccessor.GetContext().HttpContext.Request.RequestContext).RouteUrl(_contentManager.GetItemMetadata(content).DisplayRouteValues))
.Chain("DisplayUrl", "Url", content => new UrlHelper(_workContextAccessor.GetContext().HttpContext.Request.RequestContext).RouteUrl(_contentManager.GetItemMetadata(content).DisplayRouteValues))
.Token("EditUrl", content => new UrlHelper(_workContextAccessor.GetContext().HttpContext.Request.RequestContext).RouteUrl(_contentManager.GetItemMetadata(content).EditorRouteValues))
.Chain("EditUrl", "Url", content => new UrlHelper(_workContextAccessor.GetContext().HttpContext.Request.RequestContext).RouteUrl(_contentManager.GetItemMetadata(content).EditorRouteValues))
.Token("Container", content => {
var container = Container(content);
if (container == null) {
return String.Empty;
}
return _contentManager.GetItemMetadata(container).DisplayText;
})
.Chain("Author", "User", content => content != null ? content.As<ICommonPart>().Owner : null)
.Token("Date", Date)
.Chain("Date", "Date", Date)
.Token("Identity", content => content != null ? _contentManager.GetItemMetadata(content).Identity.ToString() : String.Empty)
.Token("ContentType", content => content != null ? content.ContentItem.TypeDefinition.DisplayName : String.Empty)
.Chain("ContentType", "TypeDefinition", content => content != null ? content.ContentItem.TypeDefinition : null)
.Token("DisplayText", DisplayText)
.Chain("DisplayText", "Text", DisplayText)
.Token("DisplayUrl", DisplayUrl)
.Chain("DisplayUrl", "Url", DisplayUrl)
.Token("EditUrl", EditUrl)
.Chain("EditUrl", "Url", EditUrl)
.Token("Container", content => DisplayText(Container(content)))
.Chain("Container", "Content", content => Container(content))
;
@@ -133,6 +128,10 @@ namespace Orchard.Tokens.Providers {
}
private IHtmlString AuthorName(IContent content) {
if (content == null) {
return new HtmlString(String.Empty); // Null content isn't "Anonymous"
}
var commonPart = content.As<ICommonPart>();
var author = commonPart != null ? commonPart.Owner : null;
// todo: encoding should be done at a higher level automatically and should be configurable via an options param
@@ -155,5 +154,33 @@ namespace Orchard.Tokens.Providers {
return commonPart.Container;
}
private string DisplayText(IContent content) {
if (content == null) {
return String.Empty;
}
return _contentManager.GetItemMetadata(content).DisplayText;
}
private object Date(IContent content) {
return content != null ? content.As<ICommonPart>().CreatedUtc : null;
}
private string DisplayUrl(IContent content) {
if (content == null) {
return String.Empty;
}
return UrlHelper.RouteUrl(_contentManager.GetItemMetadata(content).DisplayRouteValues);
}
private string EditUrl(IContent content) {
if (content == null) {
return String.Empty;
}
return UrlHelper.RouteUrl(_contentManager.GetItemMetadata(content).EditorRouteValues);
}
}
}