diff --git a/app/controllers/admin/homepage_controller.rb b/app/controllers/admin/homepage_controller.rb index ff0c51043..93c5e070b 100644 --- a/app/controllers/admin/homepage_controller.rb +++ b/app/controllers/admin/homepage_controller.rb @@ -2,7 +2,8 @@ class Admin::HomepageController < Admin::BaseController def show load_header - load_settings + load_feeds + load_recommendations load_cards end @@ -12,14 +13,16 @@ class Admin::HomepageController < Admin::BaseController @header = ::Widget::Card.header end - def load_settings - settings = /feature.homepage.widgets/ - @settings = Setting.select {|setting| setting.key =~ /#{settings}/ } - @settings << Setting.where(key: 'feature.user.recommendations').first + def load_recommendations + @recommendations = Setting.where(key: 'feature.user.recommendations').first end def load_cards @cards = ::Widget::Card.body end + def load_feeds + @feeds = Widget::Feed.order("created_at") + end + end \ No newline at end of file diff --git a/app/controllers/admin/widget/feeds_controller.rb b/app/controllers/admin/widget/feeds_controller.rb new file mode 100644 index 000000000..ab4a5a474 --- /dev/null +++ b/app/controllers/admin/widget/feeds_controller.rb @@ -0,0 +1,16 @@ +class Admin::Widget::FeedsController < Admin::BaseController + + def update + @feed = ::Widget::Feed.find(params[:id]) + @feed.update(feed_params) + + render nothing: true + end + + private + + def feed_params + params.require(:widget_feed).permit(:limit) + end + +end \ No newline at end of file diff --git a/app/helpers/settings.rb b/app/helpers/settings.rb new file mode 100644 index 000000000..d308535ab --- /dev/null +++ b/app/helpers/settings.rb @@ -0,0 +1,7 @@ +module SettingsHelper + + def setting_for_widget(widget) + Setting.where(key: 'feature.user.recommendations').first + end + +end \ No newline at end of file diff --git a/app/models/widget/feed.rb b/app/models/widget/feed.rb index 00b2a54e0..870bde1de 100644 --- a/app/models/widget/feed.rb +++ b/app/models/widget/feed.rb @@ -3,14 +3,18 @@ class Widget::Feed < ActiveRecord::Base KINDS = %w(proposals debates processes) - def active?(kind) - Setting["feature.homepage.widgets.feeds.#{kind}"].present? + def active? + setting.value.present? + end + + def setting + Setting.where(key: "feature.homepage.widgets.feeds.#{kind}").first end def self.active KINDS.collect do |kind| - feed = new(kind: kind) - feed if feed.active?(kind) + feed = find_or_create_by(kind: kind) + feed if feed.active? end.compact end @@ -30,8 +34,4 @@ class Widget::Feed < ActiveRecord::Base Legislation::Process.open.limit(limit) end - def limit - 3 - end - end \ No newline at end of file diff --git a/app/views/admin/homepage/_feed.html.erb b/app/views/admin/homepage/_feed.html.erb new file mode 100644 index 000000000..3f39cfcc5 --- /dev/null +++ b/app/views/admin/homepage/_feed.html.erb @@ -0,0 +1,9 @@ +
+ <%= t("admin.homepage.feeds.#{feed.kind}") %>
+ + <%= render "setting", setting: feed.setting %> + + <%= form_for [:admin, feed], remote: true do |f| %> + <%= f.select :limit, (1..10), {}, class: "js-submit-on-change" %> + <% end %> +
\ No newline at end of file diff --git a/app/views/admin/homepage/show.html.erb b/app/views/admin/homepage/show.html.erb index b209a0ec6..91f490085 100644 --- a/app/views/admin/homepage/show.html.erb +++ b/app/views/admin/homepage/show.html.erb @@ -37,12 +37,13 @@
- -<% @settings.each do |setting| %> -
-

<%= t("settings.#{setting.key}") %>

-
- <%= render "setting", setting: setting %> -
-
+<% @feeds.each do |feed| %> + <%= render "feed", feed: feed %> <% end %> + +
+

<%= t("settings.#{@recommendations.key}") %>

+
+ <%= render "setting", setting: @recommendations %> +
+
diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml index 809fddec6..abded2037 100644 --- a/config/locales/en/admin.yml +++ b/config/locales/en/admin.yml @@ -1229,6 +1229,10 @@ en: description: Description link_text: Link text link_url: Link URL + feeds: + proposals: Proposals + debates: Debates + processes: Processes new: header_title: New header submit_header: Create header diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml index 9487996ef..45a2825aa 100644 --- a/config/locales/es/admin.yml +++ b/config/locales/es/admin.yml @@ -1229,6 +1229,10 @@ es: description: Descripción link_text: Texto del enlace link_url: URL del enlace + feeds: + proposals: Propuestas + debates: Debates + processes: Procesos new: header_title: Nuevo encabezado submit_header: Crear encabezado diff --git a/config/routes/admin.rb b/config/routes/admin.rb index 61825aff4..2125b6ee9 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -180,9 +180,10 @@ namespace :admin do resources :content_blocks, except: [:show] end - resource :homepage, controller: :homepage + resource :homepage, controller: :homepage, only: [:show] namespace :widget do resources :cards + resources :feeds, only: [:update] end end diff --git a/db/migrate/20180519132610_create_widget_feeds.rb b/db/migrate/20180519132610_create_widget_feeds.rb index 4b7682a59..e01d1f3ad 100644 --- a/db/migrate/20180519132610_create_widget_feeds.rb +++ b/db/migrate/20180519132610_create_widget_feeds.rb @@ -2,6 +2,7 @@ class CreateWidgetFeeds < ActiveRecord::Migration def change create_table :widget_feeds do |t| t.string :kind + t.integer :limit, default: 3 t.timestamps null: false end end diff --git a/db/schema.rb b/db/schema.rb index f32a174eb..da47db5ac 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -1236,8 +1236,9 @@ ActiveRecord::Schema.define(version: 20180519132610) do create_table "widget_feeds", force: :cascade do |t| t.string "kind" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.integer "limit", default: 3 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end add_foreign_key "administrators", "users" diff --git a/spec/features/admin/homepage/homepage_spec.rb b/spec/features/admin/homepage/homepage_spec.rb index efb5f4a4f..aed30db10 100644 --- a/spec/features/admin/homepage/homepage_spec.rb +++ b/spec/features/admin/homepage/homepage_spec.rb @@ -12,9 +12,10 @@ feature 'Homepage' do Setting['feature.user.recommendations'] = false end - let(:proposals_setting) { Setting.where(key: 'feature.homepage.widgets.feeds.proposals').first } - let(:debates_setting) { Setting.where(key: 'feature.homepage.widgets.feeds.debates').first } - let(:processes_setting) { Setting.where(key: 'feature.homepage.widgets.feeds.processes').first } + let!(:proposals_feed) { create(:widget_feed, kind: "proposals") } + let!(:debates_feed) { create(:widget_feed, kind: "debates") } + let!(:processes_feed) { create(:widget_feed, kind: "processes") } + let(:user_recommendations) { Setting.where(key: 'feature.user.recommendations').first } let(:user) { create(:user) } @@ -23,48 +24,46 @@ feature 'Homepage' do context "Feeds" do - scenario "Proposals" do + scenario "Proposals", :js do 5.times { create(:proposal) } visit admin_homepage_path - within("#setting_#{proposals_setting.id}") do - click_button "Enable" - end - expect(page).to have_content "Value updated" + within("#widget_feed_#{proposals_feed.id}") do + select '1', from: 'widget_feed_limit' + accept_confirm { click_button "Enable" } + end visit root_path expect(page).to have_content "Most active proposals" - expect(page).to have_css(".proposal", count: 3) + expect(page).to have_css(".proposal", count: 1) end - scenario "Debates" do + scenario "Debates", :js do 5.times { create(:debate) } visit admin_homepage_path - within("#setting_#{debates_setting.id}") do - click_button "Enable" + within("#widget_feed_#{debates_feed.id}") do + select '2', from: 'widget_feed_limit' + accept_confirm { click_button "Enable" } end - expect(page).to have_content "Value updated" - visit root_path expect(page).to have_content "Most active debates" - expect(page).to have_css(".debate", count: 3) + expect(page).to have_css(".debate", count: 2) end - scenario "Processes" do + scenario "Processes", :js do 5.times { create(:legislation_process) } visit admin_homepage_path - within("#setting_#{processes_setting.id}") do - click_button "Enable" + within("#widget_feed_#{processes_feed.id}") do + select '3', from: 'widget_feed_limit' + accept_confirm { click_button "Enable" } end - expect(page).to have_content "Value updated" - visit root_path expect(page).to have_content "Open processes"