discourse-adplugin/plugin.rb
Osama Sayegh c2057a5056
FEATURE: Add per-ad visibility settings for anons and logged-in users (#168)
This commit adds 2 new settings to house ads to control whether an ad is shown to anonymous users and logged in users. Existing ads that were created before this feature will default to true for both settings; i.e., they will remain to be visible to both anonymous and logged-in users, but it will be possible to change the settings. Turning off both settings will effectively disable the ad completely.
2023-04-07 17:56:22 +03:00

77 lines
2.3 KiB
Ruby
Executable File

# frozen_string_literal: true
# name: discourse-adplugin
# about: Ad Plugin for Discourse
# version: 1.2.5
# authors: Vi and Sarah (@ladydanger and @cyberkoi)
# url: https://github.com/discourse/discourse-adplugin
# transpile_js: true
register_asset "stylesheets/adplugin.scss"
add_admin_route "admin.adplugin.house_ads.title", "houseAds"
enabled_site_setting :discourse_adplugin_enabled
module ::AdPlugin
def self.plugin_name
"discourse-adplugin".freeze
end
def self.pstore_get(key)
PluginStore.get(AdPlugin.plugin_name, key)
end
def self.pstore_set(key, value)
PluginStore.set(AdPlugin.plugin_name, key, value)
end
def self.pstore_delete(key)
PluginStore.remove(AdPlugin.plugin_name, key)
end
end
after_initialize do
require_dependency File.expand_path("../app/models/house_ad", __FILE__)
require_dependency File.expand_path("../app/models/house_ad_setting", __FILE__)
require_dependency File.expand_path("../app/controllers/house_ads_controller", __FILE__)
require_dependency File.expand_path("../app/controllers/house_ad_settings_controller", __FILE__)
require_dependency "application_controller"
add_to_serializer :site, :house_creatives do
AdPlugin::HouseAdSetting.settings_and_ads(for_anons: scope.anonymous?)
end
add_to_serializer :topic_view, :tags_disable_ads do
return false if !SiteSetting.tagging_enabled || !SiteSetting.no_ads_for_tags.present?
return false if object.topic.tags.empty?
!(SiteSetting.no_ads_for_tags.split("|") & object.topic.tags.map(&:name)).empty?
end
class ::AdstxtController < ::ApplicationController
skip_before_action :preload_json, :check_xhr, :redirect_to_login_if_required
def index
raise Discourse::NotFound unless SiteSetting.ads_txt.present?
render plain: SiteSetting.ads_txt
end
end
class AdPlugin::Engine < ::Rails::Engine
engine_name "adplugin"
isolate_namespace AdPlugin
end
AdPlugin::Engine.routes.draw do
root to: "house_ads#index"
resources :house_creatives, only: %i[index show create update destroy], controller: "house_ads"
resources :house_settings, only: [:update], controller: "house_ad_settings"
end
Discourse::Application.routes.append do
get "/ads.txt" => "adstxt#index"
mount ::AdPlugin::Engine, at: "/admin/plugins/pluginad", constraints: AdminConstraint.new
end
end