mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
#19788: Adding null checks to Content tokens
Work Item: 19788 --HG-- branch : 1.x
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user