mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
@@ -1,12 +1,16 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Web;
|
||||||
|
using Orchard.ContentManagement;
|
||||||
using Orchard.Localization;
|
using Orchard.Localization;
|
||||||
|
|
||||||
namespace Orchard.Tokens.Providers {
|
namespace Orchard.Tokens.Providers {
|
||||||
public class RequestTokens : ITokenProvider {
|
public class RequestTokens : ITokenProvider {
|
||||||
private readonly IWorkContextAccessor _workContextAccessor;
|
private readonly IWorkContextAccessor _workContextAccessor;
|
||||||
|
private readonly IContentManager _contentManager;
|
||||||
|
|
||||||
public RequestTokens(IWorkContextAccessor workContextAccessor) {
|
public RequestTokens(IWorkContextAccessor workContextAccessor, IContentManager contentManager) {
|
||||||
_workContextAccessor = workContextAccessor;
|
_workContextAccessor = workContextAccessor;
|
||||||
|
_contentManager = contentManager;
|
||||||
T = NullLocalizer.Instance;
|
T = NullLocalizer.Instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -16,6 +20,8 @@ namespace Orchard.Tokens.Providers {
|
|||||||
context.For("Request", T("Http Request"), T("Current Http Request tokens."))
|
context.For("Request", T("Http Request"), T("Current Http Request tokens."))
|
||||||
.Token("QueryString:*", T("QueryString:<element>"), T("The Query String value for the specified element."))
|
.Token("QueryString:*", T("QueryString:<element>"), T("The Query String value for the specified element."))
|
||||||
.Token("Form:*", T("Form:<element>"), T("The Form value for the specified element."))
|
.Token("Form:*", T("Form:<element>"), T("The Form value for the specified element."))
|
||||||
|
.Token("Route:*", T("Route:<key>"), T("The Route value for the specified key."))
|
||||||
|
.Token("Content", T("Content"), T("The request routed Content Item."), "Content")
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -32,7 +38,65 @@ namespace Orchard.Tokens.Providers {
|
|||||||
.Token(
|
.Token(
|
||||||
token => token.StartsWith("Form:", StringComparison.OrdinalIgnoreCase) ? token.Substring("Form:".Length) : null,
|
token => token.StartsWith("Form:", StringComparison.OrdinalIgnoreCase) ? token.Substring("Form:".Length) : null,
|
||||||
(token, request) => request.Form.Get(token)
|
(token, request) => request.Form.Get(token)
|
||||||
|
)
|
||||||
|
.Token(
|
||||||
|
token => token.StartsWith("Route:", StringComparison.OrdinalIgnoreCase) ? token.Substring("Route:".Length) : null,
|
||||||
|
(token, request) => GetRouteValue(token, request)
|
||||||
|
)
|
||||||
|
.Token("Content",
|
||||||
|
(request) => DisplayText(GetRoutedContentItem(request))
|
||||||
|
)
|
||||||
|
.Chain("Content", "Content",
|
||||||
|
(request) => GetRoutedContentItem(request)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static string GetRouteValue(string token, HttpRequestBase request) {
|
||||||
|
object result;
|
||||||
|
if (!request.RequestContext.RouteData.Values.TryGetValue(token, out result)) {
|
||||||
|
return String.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private ContentItem GetRoutedContentItem(HttpRequestBase request) {
|
||||||
|
String area = GetRouteValue("area", request);
|
||||||
|
String action = GetRouteValue("action", request);
|
||||||
|
int contentId;
|
||||||
|
|
||||||
|
if (!String.Equals(area, "Containers", StringComparison.OrdinalIgnoreCase) && !String.Equals(area, "Contents", StringComparison.OrdinalIgnoreCase)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (!String.Equals(GetRouteValue("controller", request), "Item", StringComparison.OrdinalIgnoreCase)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (!int.TryParse(GetRouteValue("id", request), out contentId)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (String.Equals(action, "Display", StringComparison.OrdinalIgnoreCase)) {
|
||||||
|
return _contentManager.Get(contentId, VersionOptions.Published);
|
||||||
|
}
|
||||||
|
else if (String.Equals(action, "Preview", StringComparison.OrdinalIgnoreCase)) {
|
||||||
|
VersionOptions versionOptions = VersionOptions.Latest;
|
||||||
|
int version;
|
||||||
|
if (int.TryParse(request.QueryString["version"], out version)) {
|
||||||
|
versionOptions = VersionOptions.Number(version);
|
||||||
|
}
|
||||||
|
return _contentManager.Get(contentId, versionOptions);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string DisplayText(IContent content) {
|
||||||
|
if (content == null) {
|
||||||
|
return String.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _contentManager.GetItemMetadata(content).DisplayText;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user