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
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
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"