DEV: implements register_modifier(:custom_homepage_enabled) (#28657)

This commit will allow plugin developers to enable/disable the custom homepage.

Usage:

```ruby
register_modifier(:custom_homepage_enabled) do |enabled, args|
  true
end 
```

Args might contain request and/or current_user.
This commit is contained in:
Joffrey JAFFEUX
2024-08-30 11:06:07 +02:00
committed by GitHub
parent 361e954c55
commit d81fc1448b
2 changed files with 19 additions and 0 deletions

View File

@ -4,6 +4,16 @@ class HomepageHelper
def self.resolve(request = nil, current_user = nil) def self.resolve(request = nil, current_user = nil)
return "custom" if ThemeModifierHelper.new(request: request).custom_homepage return "custom" if ThemeModifierHelper.new(request: request).custom_homepage
enabled = false
enabled =
DiscoursePluginRegistry.apply_modifier(
:custom_homepage_enabled,
enabled,
request: request,
current_user: current_user,
)
return "custom" if enabled
current_user ? SiteSetting.homepage : SiteSetting.anonymous_homepage current_user ? SiteSetting.homepage : SiteSetting.anonymous_homepage
end end
end end

View File

@ -14,6 +14,15 @@ RSpec.describe HomepageHelper do
expect(HomepageHelper.resolve).to eq("custom") expect(HomepageHelper.resolve).to eq("custom")
end end
it "returns custom when a plugin modifies the custom_homepage_enabled to true" do
DiscoursePluginRegistry
.expects(:apply_modifier)
.with(:custom_homepage_enabled, false, request: nil, current_user: nil)
.returns(true)
expect(HomepageHelper.resolve).to eq("custom")
end
context "when first item in top menu is not valid for anons" do context "when first item in top menu is not valid for anons" do
it "distinguishes between auth homepage and anon homepage" do it "distinguishes between auth homepage and anon homepage" do
SiteSetting.top_menu = "new|top|latest|unread" SiteSetting.top_menu = "new|top|latest|unread"