Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable / disable RSS feed per list #12677

Merged
merged 13 commits into from Nov 10, 2022
Expand Up @@ -65,23 +65,23 @@ public async Task<ActionResult> Index(string format)
}

var document = await context.Builder.ProcessAsync(context, async () =>
{
await bestQueryMatch.FeedQuery.ExecuteAsync(context);
{
await bestQueryMatch.FeedQuery.ExecuteAsync(context);

await _feedItemBuilder.PopulateAsync(context);
await _feedItemBuilder.PopulateAsync(context);

foreach (var contextualizer in context.Response.Contextualizers)
{
if (ControllerContext != null)
{
contextualizer(new ContextualizeContext
{
ServiceProvider = _serviceProvider,
Url = Url
});
}
}
});
foreach (var contextualizer in context.Response.Contextualizers)
{
if (ControllerContext != null)
{
contextualizer(new ContextualizeContext
{
ServiceProvider = _serviceProvider,
Url = Url
});
}
}
});
hishamco marked this conversation as resolved.
Show resolved Hide resolved

return Content(document.ToString(), "text/xml");
}
Expand Down
@@ -1,11 +1,15 @@
using OrchardCore.ContentManagement;
using OrchardCore.ContentManagement;

namespace OrchardCore.Lists.Feeds
{
public class ListFeedEditViewModel
{
public bool DisableRssFeed { get; set; }
sebastienros marked this conversation as resolved.
Show resolved Hide resolved

public string FeedProxyUrl { get; set; }

public int FeedItemsCount { get; set; } = ListFeedQuery.DefaultItemsCount;

public ContentItem ContentItem { get; set; }
}
}
Expand Up @@ -36,6 +36,14 @@ public async Task<FeedQueryMatch> MatchAsync(FeedContext context)
return null;
}

var contentItem = await _contentManager.GetAsync(model.ContentItemId);
var feedMetadata = await _contentManager.PopulateAspectAsync<FeedMetadata>(contentItem);

if (!feedMetadata.DisableRssFeed)
sebastienros marked this conversation as resolved.
Show resolved Hide resolved
{
return null;
}

return new FeedQueryMatch { FeedQuery = this, Priority = -5 };
}

Expand Down
Expand Up @@ -22,6 +22,7 @@ public override IDisplayResult Edit(ListPart part)
{
return Initialize<ListFeedEditViewModel>("ListPartFeed_Edit", m =>
{
m.DisableRssFeed = part.ContentItem.Content.ListPart.DisableRssFeed ?? true;
m.FeedProxyUrl = part.ContentItem.Content.ListPart.FeedProxyUrl;
m.FeedItemsCount = part.ContentItem.Content.ListPart.FeedItemsCount ?? 20;
m.ContentItem = part.ContentItem;
Expand All @@ -33,8 +34,9 @@ public override async Task<IDisplayResult> UpdateAsync(ListPart part, IUpdateMod
var model = new ListFeedEditViewModel();
model.ContentItem = part.ContentItem;

await updater.TryUpdateModelAsync(model, Prefix, t => t.FeedProxyUrl, t => t.FeedItemsCount);
await updater.TryUpdateModelAsync(model, Prefix, t => t.DisableRssFeed, t => t.FeedProxyUrl, t => t.FeedItemsCount);

part.ContentItem.Content.ListPart.DisableRssFeed = model.DisableRssFeed;
part.ContentItem.Content.ListPart.FeedProxyUrl = model.FeedProxyUrl;
part.ContentItem.Content.ListPart.FeedItemsCount = model.FeedItemsCount;

Expand Down
Expand Up @@ -11,8 +11,10 @@ public override Task GetContentItemAspectAsync(ContentItemAspectContext context,
{
return context.ForAsync<FeedMetadata>(feedMetadata =>
{
// If the value is not defined, it will be represented as null
// Enable the feed if the value is not defined. This is handy to migrate the old feeds
feedMetadata.DisableRssFeed = part.Content.DisableRssFeed ?? true;
sebastienros marked this conversation as resolved.
Show resolved Hide resolved
feedMetadata.FeedProxyUrl = part.Content.FeedProxyUrl;

return Task.CompletedTask;
});
}
Expand Down
@@ -1,11 +1,16 @@
@using OrchardCore.Lists.Feeds
@using OrchardCore.Lists.Feeds
@model ListFeedEditViewModel

<div class="mb-3 form-check" asp-validation-class-for="DisableRssFeed">
<input type="checkbox" class="form-check-input" asp-for="DisableRssFeed">
<label class="form-check-label" asp-for="DisableRssFeed">@T["Disable RSS feed link generation."]</label>
</div>

<div class="mb-3">
<label asp-for="FeedProxyUrl">@T["Feed proxy Url"]</label>
<input asp-for="FeedProxyUrl" class="form-control" />
<span class="hint">@T["Provide a custom public url which will be used to proxy the local rss feed."]</span>
<span class="hint">@T["The current feed is available at <a href=\"{0}\" target=\"_blank\">{0}</a>.", Url.Action("Index", "Feed", new { area = "OrchardCore.Feeds", ContentItemId = Model.ContentItem.ContentItemId }, Context.Request.Scheme)]</span>
<span id="currentFeedPreview" class="hint">@T["The current feed is available at <a href=\"{0}\" target=\"_blank\">{0}</a>.", Url.Action("Index", "Feed", new { area = "OrchardCore.Feeds", ContentItemId = Model.ContentItem.ContentItemId }, Context.Request.Scheme)]</span>
hishamco marked this conversation as resolved.
Show resolved Hide resolved
</div>

<div class="mb-3">
Expand Down
Expand Up @@ -8,13 +8,17 @@
@{
ContentItem contentItem = Model.ContentItem;
var feedMetadata = await ContentManager.PopulateAspectAsync<FeedMetadata>(contentItem);
ResourceManager.RegisterLink(new LinkEntry

if (!feedMetadata.DisableRssFeed)
{
Rel = "alternate",
Type = "application/rss+xml",
Title = contentItem.DisplayText,
Href = String.IsNullOrWhiteSpace(feedMetadata.FeedProxyUrl)
? Url.Action("Index", "Feed", new { area = "OrchardCore.Feeds", ContentItemId = contentItem.ContentItemId }, Context.Request.Scheme)
: feedMetadata.FeedProxyUrl
});
ResourceManager.RegisterLink(new LinkEntry
{
Rel = "alternate",
Type = "application/rss+xml",
Title = contentItem.DisplayText,
Href = String.IsNullOrWhiteSpace(feedMetadata.FeedProxyUrl)
? Url.Action("Index", "Feed", new { area = "OrchardCore.Feeds", ContentItemId = contentItem.ContentItemId }, Context.Request.Scheme)
: feedMetadata.FeedProxyUrl
});
}
}
@@ -1,10 +1,12 @@
namespace OrchardCore.Feeds.Models
namespace OrchardCore.Feeds.Models
{
/// <summary>
/// Used to gather custom Feed properties for a content item.
/// </summary>
public class FeedMetadata
{
public bool DisableRssFeed { get; set; } = true;

public string FeedProxyUrl { get; set; }
}
}