From 7d1d4cea4a24595db6c6168d480d094472450c55 Mon Sep 17 00:00:00 2001 From: Perisso Date: Tue, 19 Jan 2016 14:47:23 +0100 Subject: [PATCH] filter by districts and categories --- app/assets/images/Distritos_Madrid.jpg | Bin 0 -> 48842 bytes app/assets/javascripts/new_debate_map.js | 5 ++ app/assets/javascripts/new_proposal_map.js | 5 ++ .../concerns/commentable_actions.rb | 52 +++++++++-- app/controllers/debates_controller.rb | 2 +- app/controllers/proposals_controller.rb | 2 +- app/models/abilities/everyone.rb | 2 + app/views/debates/index.html.erb | 7 ++ app/views/debates/map_district.html.erb | 74 ++++++++++++++++ app/views/proposals/index.html.erb | 7 ++ app/views/proposals/map_district.html.erb | 81 ++++++++++++++++++ app/views/shared/_tag_cloud.html.erb | 18 ++++ config/initializers/assets.rb | 2 + config/locales/en.yml | 7 ++ config/locales/es.yml | 7 ++ config/routes.rb | 5 ++ db/dev_seeds.rb | 77 +++++++++++++++++ db/migrate/20160119132601_add_kind_to_tags.rb | 5 ++ db/schema.rb | 1 + spec/features/debates_spec.rb | 24 ++++++ spec/features/proposals_spec.rb | 23 +++++ 21 files changed, 396 insertions(+), 10 deletions(-) create mode 100644 app/assets/images/Distritos_Madrid.jpg create mode 100644 app/assets/javascripts/new_debate_map.js create mode 100644 app/assets/javascripts/new_proposal_map.js create mode 100644 app/views/debates/map_district.html.erb create mode 100644 app/views/proposals/map_district.html.erb create mode 100644 db/migrate/20160119132601_add_kind_to_tags.rb diff --git a/app/assets/images/Distritos_Madrid.jpg b/app/assets/images/Distritos_Madrid.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f5fdc34f83f2260a253e37f8a9302eab9d27148 GIT binary patch literal 48842 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

CteBb7;V&&?*&j})+64FMm742!ywmMF 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"). + order(proposals_count: :desc) + else + ActsAsTaggableOn::Tag.select("tags.*"). + where("kind = 'category' and debates_count>0"). + order(debates_count: :desc) + end + end + def load_district_tags + + if resource_model.to_s =="Proposal" + + ActsAsTaggableOn::Tag.select("tags.*"). + where("kind = 'district' and proposals_count>0"). + order(name: :asc) + else + ActsAsTaggableOn::Tag.select("tags.*"). + where("kind = 'district' and debates_count>0"). + order(name: :asc) + end + end + def load_featured_tags @featured_tags = ActsAsTaggableOn::Tag.where(featured: true) end def load_category_tags @category_tags = ActsAsTaggableOn::Tag.select("tags.*"). where("kind = 'category' and tags.featured = true"). - order(kind: :asc, id: :asc) + order(kind: :asc, id: :asc) end def load_district_select @district_select = Geozone.select("geozones.name, geozones.id"). order(id: :asc) - end + end def parse_tag_filter if params[:tag].present? @tag_filter = params[:tag] if ActsAsTaggableOn::Tag.named(params[:tag]).exists? end + + if params[:district].present? + @tag_filter = params[:district] if ActsAsTaggableOn::Disctrict.named(params[:district]).exists? + end end def parse_search_terms diff --git a/app/controllers/debates_controller.rb b/app/controllers/debates_controller.rb index a3e6e4a7f..00c67a368 100644 --- a/app/controllers/debates_controller.rb +++ b/app/controllers/debates_controller.rb @@ -7,7 +7,7 @@ class DebatesController < ApplicationController before_action :parse_advanced_search_terms, only: :index before_action :parse_tag_filter, only: :index before_action :set_search_order, only: :index - before_action :authenticate_user!, except: [:index, :show] + before_action :authenticate_user!, except: [:index, :show, :map_district] feature_flag :debates diff --git a/app/controllers/proposals_controller.rb b/app/controllers/proposals_controller.rb index 15d0edefa..d001570de 100644 --- a/app/controllers/proposals_controller.rb +++ b/app/controllers/proposals_controller.rb @@ -6,7 +6,7 @@ class ProposalsController < ApplicationController before_action :parse_advanced_search_terms, only: :index before_action :parse_tag_filter, only: :index before_action :set_search_order, only: :index - before_action :authenticate_user!, except: [:index, :show] + before_action :authenticate_user!, except: [:index, :show, :map_district] has_orders %w{hot_score confidence_score created_at relevance}, only: :index has_orders %w{most_voted newest oldest}, only: :show diff --git a/app/models/abilities/everyone.rb b/app/models/abilities/everyone.rb index 377ef7440..1be052163 100644 --- a/app/models/abilities/everyone.rb +++ b/app/models/abilities/everyone.rb @@ -10,6 +10,8 @@ module Abilities can :read, Legislation can :read, User can [:search, :read], Annotation + can :map_district, Proposal + can :map_district, Debate end end end diff --git a/app/views/debates/index.html.erb b/app/views/debates/index.html.erb index f1c12e1b7..c7aadef08 100644 --- a/app/views/debates/index.html.erb +++ b/app/views/debates/index.html.erb @@ -47,5 +47,12 @@ <%= render "shared/tag_cloud", taggable: 'debate' %> + +

+ +
+ diff --git a/app/views/debates/map_district.html.erb b/app/views/debates/map_district.html.erb new file mode 100644 index 000000000..98d720fbd --- /dev/null +++ b/app/views/debates/map_district.html.erb @@ -0,0 +1,74 @@ +<%= javascript_include_tag "new_debate_map" %> + +
+ +

<%= t("proposals.index.map_district") %>

+
+ <%= image_tag("Distritos_Madrid.jpg", :usemap => "#MadridMap") %> + + + Fuencarral - El Pardo + Moncloa - Aravaca + Tetuán + Chamberí + Centro + Latina + Carabanchel + Arganzuela + Usera + Villaverde + Chamartin + Salamanca + Retiro + Puente de Vallecas + Villa de Vallecas + Hortaleza + Barajas + Ciudad Lineal + Moratalaz + San Blas - Canillejas + Vicálvaro + + + +
+
+ <% tag_cloud @district_cloud, %w[s m l] do |tag, css_class| %> + <%= link_to tag.name, debates_path(tag: tag.name) %> +
+ <% end %> +
+ + +

<%= t("debates.new.start_new_district") %>

+
+ + + + + + + +
+ +
+ <%= link_to t("debates.index.start_debate"), "javascript:", :onclick => "call_function();" , class: 'button radius' %> +
+ +
+ + +
+ +
diff --git a/app/views/proposals/index.html.erb b/app/views/proposals/index.html.erb index 3469ecdb9..6e3a7c2dd 100644 --- a/app/views/proposals/index.html.erb +++ b/app/views/proposals/index.html.erb @@ -56,5 +56,12 @@ <%= render "shared/tag_cloud", taggable: 'proposal' %> + +
+ +
+ diff --git a/app/views/proposals/map_district.html.erb b/app/views/proposals/map_district.html.erb new file mode 100644 index 000000000..311045661 --- /dev/null +++ b/app/views/proposals/map_district.html.erb @@ -0,0 +1,81 @@ +<%= javascript_include_tag "new_proposal_map" %> + +
+ +

<%= t("proposals.index.map_district") %>

+
+ <%= image_tag("Distritos_Madrid.jpg", :usemap => "#MadridMap") %> + + + Fuencarral - El Pardo + Moncloa - Aravaca + Tetuán + Chamberí + Centro + Latina + Carabanchel + Arganzuela + Usera + Villaverde + Chamartin + Salamanca + Retiro + Puente de Vallecas + Villa de Vallecas + Hortaleza + Barajas + Ciudad Lineal + Moratalaz + San Blas - Canillejas + Vicálvaro + + + +
+ +
+ <% tag_cloud @district_cloud, %w[s m l] do |tag, css_class| %> + <%= link_to tag.name, proposals_path(tag: tag.name) %> +
+ <% end %> +
+ + +

<%= t("proposals.new.start_new_district") %>

+
+ + + + + + + +
+ +
+<%= link_to t("proposals.index.start_proposal"), "javascript:", :onclick => "call_function();" , class: 'button radius' %> +
+ +
+ + + + + +
+ +
+ + + diff --git a/app/views/shared/_tag_cloud.html.erb b/app/views/shared/_tag_cloud.html.erb index fe46b6263..62de5a758 100644 --- a/app/views/shared/_tag_cloud.html.erb +++ b/app/views/shared/_tag_cloud.html.erb @@ -8,4 +8,22 @@ (<%= tag.send(taggable_counter_field(taggable)) %>) <% end %> <% end %> + + +

<%= t("shared.tags_cloud.categorys") %>

+
+ <% tag_cloud @category_cloud, %w[s m l] do |tag, css_class| %> + <%= link_to taggable_path(taggable, tag.name), class: css_class do %> + <%= tag.name %> + <%= tag.send(taggable_counter_field(taggable)) %> + <% end %> + <% end %> + + + +

<%= t("shared.tags_cloud.districts") %>

+
+ + <%= image_tag("Distritos_Madrid.jpg") %> + diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb index a13ed5320..650bfc786 100644 --- a/config/initializers/assets.rb +++ b/config/initializers/assets.rb @@ -13,3 +13,5 @@ Rails.application.config.assets.precompile += %w( ckeditor/* ) Rails.application.config.assets.precompile += %w( ie_lt9.js ) Rails.application.config.assets.precompile += %w( stat_graphs.js ) Rails.application.config.assets.precompile += %w( print.css ) +Rails.application.config.assets.precompile += %w( new_proposal_map.js ) +Rails.application.config.assets.precompile += %w( new_debate_map.js ) diff --git a/config/locales/en.yml b/config/locales/en.yml index c3f035fc8..efe49020d 100755 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -105,6 +105,8 @@ en: search_results: one: " containing the term '%{search_term}'" other: " containing the term '%{search_term}'" + map_district: "Districts of Madrid" + select_district: "Select your district" select_order: Order by start_debate: Start a debate title: Debates @@ -121,6 +123,7 @@ en: recommendation_two: Any debate or comment suggesting illegal action will be deleted, as well as those intending to sabotage the debate spaces. Anything else is allowed. recommendations_title: Recommendations for creating a debate start_new: Start a debate + start_new_district: "Start a debate for your district" show: author_deleted: User deleted back_link: Go back @@ -294,6 +297,7 @@ en: recommendation_two: Any proposal or comment suggesting illegal action will be deleted, as well as those intending to sabotage the debate spaces. Anything else is allowed. recommendations_title: Recommendations for creating a proposal start_new: Create new proposal + start_new_district: "Start a proposal for your district" proposal: already_supported: You have already supported this proposal. Share it! comments: @@ -360,6 +364,9 @@ en: print_button: Print this info tags_cloud: tags: Trending + districts: "Districs" + categorys: "Categories" + map: "View map of districts" unflag: Unflag simple_captcha: label: Enter the text from the image in the box below diff --git a/config/locales/es.yml b/config/locales/es.yml index 87cabe85d..8fa10b1d8 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -105,6 +105,8 @@ es: search_results: one: " que contiene '%{search_term}'" other: " que contienen '%{search_term}'" + map_district: "Distritos de Madrid" + select_district: "Selecciona tu distrito" select_order: Ordenar por start_debate: Empieza un debate title: Debates @@ -121,6 +123,7 @@ es: recommendation_two: Cualquier debate o comentario que implique una acción ilegal será eliminado, también los que tengan la intención de sabotear los espacios de debate, todo lo demás está permitido. recommendations_title: Recomendaciones para crear un debate start_new: Empezar un debate + start_new_district: "Empieza un debate para tu distrito" show: author_deleted: Usuario eliminado back_link: Volver @@ -294,6 +297,7 @@ es: recommendation_two: Cualquier propuesta o comentario que implique una acción ilegal será eliminada, también las que tengan la intención de sabotear los espacios de propuesta, todo lo demás está permitido. recommendations_title: Recomendaciones para crear una propuesta start_new: Crear una propuesta + start_new_district: "Crea una propuesta para tu distrito" proposal: already_supported: "¡Ya has apoyado esta propuesta, compártela!" comments: @@ -360,6 +364,9 @@ es: print_button: Imprimir esta información tags_cloud: tags: Tendencias + districts: "Distritos" + categorys: "Categorias" + map: "Ver mapa de distritos" unflag: Deshacer denuncia simple_captcha: label: Introduce el texto de la imagen en la siguiente caja diff --git a/config/routes.rb b/config/routes.rb index 9c7146dcf..1982895ae 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -286,6 +286,11 @@ Rails.application.routes.draw do # static pages + get '/map', to: 'proposals#map_district' + get '/new_proposal_map/:district', to: 'proposals#new', as: 'new_proposal_map' + get '/mad', to: 'debates#map_district' + get '/new_debate_map/:district', to: 'debates#new', as: 'new_debate_map' get '/blog' => redirect("http://diario.madrid.es/participa/") resources :pages, path: '/', only: [:show] + end diff --git a/db/dev_seeds.rb b/db/dev_seeds.rb index b9ccc977c..6687ef526 100644 --- a/db/dev_seeds.rb +++ b/db/dev_seeds.rb @@ -71,10 +71,68 @@ end org_user_ids = User.organizations.pluck(:id) not_org_users = User.where(['users.id NOT IN(?)', org_user_ids]) +puts "Creating Tags Categories" +ActsAsTaggableOn::Tag.create!(name: "Asociaciones", featured: true, kind: "category") +ActsAsTaggableOn::Tag.create!(name: "Cultura", featured: true, kind: "category") + ActsAsTaggableOn::Tag.create!(name: "Deportes", featured: true, kind: "category") + ActsAsTaggableOn::Tag.create!(name: "Derechos Sociales", featured: true, kind: "category") + ActsAsTaggableOn::Tag.create!(name: "Economía", featured: true, kind: "category") + ActsAsTaggableOn::Tag.create!(name: "Empleo", featured: true, kind: "category") + ActsAsTaggableOn::Tag.create!(name: "Equidad", featured: true, kind: "category") + ActsAsTaggableOn::Tag.create!(name: "Sostenibilidad", featured: true, kind: "category") + ActsAsTaggableOn::Tag.create!(name: "Participación", featured: true, kind: "category") + ActsAsTaggableOn::Tag.create!(name: "Movilidad", featured: true, kind: "category") + ActsAsTaggableOn::Tag.create!(name: "Medios", featured: true, kind: "category") + ActsAsTaggableOn::Tag.create!(name: "Salud", featured: true , kind: "category") + ActsAsTaggableOn::Tag.create!(name: "Transparencia", featured: true, kind: "category") + ActsAsTaggableOn::Tag.create!(name: "Seguridad y Emergencias", featured: true, kind: "category") + ActsAsTaggableOn::Tag.create!(name: "Medio Ambiente", featured: true, kind: "category") + + + puts "Creating Tags Districts" + + ActsAsTaggableOn::Tag.create!(name: "Centro", featured: true, kind: "district") + ActsAsTaggableOn::Tag.create!(name: "Arganzuela", featured: true, kind: "district") + ActsAsTaggableOn::Tag.create!(name: "Retiro" , featured: true, kind: "district") + ActsAsTaggableOn::Tag.create!(name: "Salamanca" , featured: true, kind: "district") + ActsAsTaggableOn::Tag.create!(name: "Chamartín" , featured: true, kind: "district") + ActsAsTaggableOn::Tag.create!(name: "Tetuán" , featured: true, kind: "district") + ActsAsTaggableOn::Tag.create!(name: "Chamberí" , featured: true, kind: "district") + ActsAsTaggableOn::Tag.create!(name: "Moncloa-Aravaca", featured: true, kind: "district") + ActsAsTaggableOn::Tag.create!(name: "Latina", featured: true, kind: "district") + ActsAsTaggableOn::Tag.create!(name: "Carabanchel", featured: true, kind: "district") + ActsAsTaggableOn::Tag.create!(name: "Usera", featured: true, kind: "district") + ActsAsTaggableOn::Tag.create!(name: "Puente de Vallecas", featured: true, kind: "district") + ActsAsTaggableOn::Tag.create!(name: "Moratalaz", featured: true, kind: "district") + ActsAsTaggableOn::Tag.create!(name: "Ciudad Lineal", featured: true, kind: "district") + ActsAsTaggableOn::Tag.create!(name: "Hortaleza", featured: true, kind: "district") + ActsAsTaggableOn::Tag.create!(name: "Villaverde", featured: true, kind: "district") + ActsAsTaggableOn::Tag.create!(name: "Villa de Vallecas", featured: true, kind: "district") + ActsAsTaggableOn::Tag.create!(name: "Vicalvaro", featured: true, kind: "district") + ActsAsTaggableOn::Tag.create!(name: "San Blas-Canillejas", featured: true, kind: "district") + ActsAsTaggableOn::Tag.create!(name: "Barajas", featured: true, kind: "district") + ActsAsTaggableOn::Tag.create!(name: "Fuencarral-El Pardo", featured: true, kind: "district") + + puts "Creating Debates" tags = Faker::Lorem.words(25) +tags = ['Centro', 'Arganzuela', 'Retiro','Salamanca', 'Chamartín', 'Tetuán', 'Chamberí', 'Fuencarral-El Pardo', 'Moncloa-Aravaca', 'Latina', 'Carabanchel', 'Usera', 'Puente de Vallecas', 'Moratalaz', 'Ciudad Lineal', 'Hortaleza', 'Villaverde', 'Villa de Vallecas', 'Vicálvaro', 'San Blas', 'Barajas'] +(1..30).each do |i| + author = User.reorder("RANDOM()").first + description = "

#{Faker::Lorem.paragraphs.join('

')}

" + debate = Debate.create!(author: author, + title: Faker::Lorem.sentence(3).truncate(60), + created_at: rand((Time.now - 1.week) .. Time.now), + description: description, + tag_list: tags.sample(3).join(','), + terms_of_service: "1") + puts " #{debate.title}" +end + + +tags = ['Consumo y comercio', 'Cultura y ocio', 'Deportes', 'Economía', 'Educación', 'Emergencias y seguridad', 'Hacienda', 'Medio ambiente', 'Movilidad y transportes', 'Oposiciones y empleo', 'Salud', 'Servicios sociales', 'Urbanismo y vivienda'] (1..30).each do |i| author = User.reorder("RANDOM()").first @@ -88,10 +146,29 @@ tags = Faker::Lorem.words(25) puts " #{debate.title}" end + puts "Creating Proposals" tags = Faker::Lorem.words(25) +tags = ['Centro', 'Arganzuela', 'Retiro','Salamanca', 'Chamartín', 'Tetuán', 'Chamberí', 'Fuencarral-El Pardo', 'Moncloa-Aravaca', 'Latina', 'Carabanchel', 'Usera', 'Puente de Vallecas', 'Moratalaz', 'Ciudad Lineal', 'Hortaleza', 'Villaverde', 'Villa de Vallecas', 'Vicálvaro', 'San Blas', 'Barajas'] +(1..30).each do |i| + author = User.reorder("RANDOM()").first + description = "

#{Faker::Lorem.paragraphs.join('

')}

" + proposal = Proposal.create!(author: author, + title: Faker::Lorem.sentence(3).truncate(60), + question: Faker::Lorem.sentence(3), + summary: Faker::Lorem.sentence(3), + responsible_name: Faker::Name.name, + external_url: Faker::Internet.url, + description: description, + created_at: rand((Time.now - 1.week) .. Time.now), + tag_list: tags.sample(3).join(','), + terms_of_service: "1") + puts " #{proposal.title}" +end + +tags = ['Consumo y comercio', 'Cultura y ocio', 'Deportes', 'Economía', 'Educación', 'Emergencias y seguridad', 'Hacienda', 'Medio ambiente', 'Movilidad y transportes', 'Oposiciones y empleo', 'Salud', 'Servicios sociales', 'Urbanismo y vivienda'] (1..30).each do |i| author = User.reorder("RANDOM()").first description = "

#{Faker::Lorem.paragraphs.join('

')}

" diff --git a/db/migrate/20160119132601_add_kind_to_tags.rb b/db/migrate/20160119132601_add_kind_to_tags.rb new file mode 100644 index 000000000..a4d196517 --- /dev/null +++ b/db/migrate/20160119132601_add_kind_to_tags.rb @@ -0,0 +1,5 @@ +class AddKindToTags < ActiveRecord::Migration + def change + add_column :tags, :kind, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index a58c9c06c..2ac9a8018 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -317,6 +317,7 @@ ActiveRecord::Schema.define(version: 20160122153329) do t.integer "proposals_count", default: 0 t.string "kind", limit: 40 t.integer "spending_proposals_count", default: 0 + t.string "kind" end add_index "tags", ["debates_count"], name: "index_tags_on_debates_count", using: :btree diff --git a/spec/features/debates_spec.rb b/spec/features/debates_spec.rb index 44fac3821..d89387832 100644 --- a/spec/features/debates_spec.rb +++ b/spec/features/debates_spec.rb @@ -901,4 +901,28 @@ feature 'Debates' do visit debate_path(debate) expect(page).to have_content('User deleted') end + + + scenario "Filtered by district" do + tag1= ActsAsTaggableOn::Tag.create!(name: "Centro", featured: true, kind: "district") + tag2= ActsAsTaggableOn::Tag.create!(name: "Puente de Vallecas", featured: true, kind: "district") + tag3= ActsAsTaggableOn::Tag.create!(name: "Retiro", featured: true, kind: "district") + tag4= ActsAsTaggableOn::Tag.create!(name: "Salamanca", featured: true, kind: "district") + + debate1 = create(:debate, tag_list: tag1) + debate2 = create(:debate, tag_list: tag2) + debate3 = create(:debate, tag_list: tag3) + debate4 = create(:debate, tag_list: tag4) + visit debates_path + + click_link "View map of districts" + within("#districtslist") do + click_link "Puente de Vallecas" + end + within("#debates") do + expect(page).to have_css('.debate', count: 1) + expect(page).to have_content(debate2.title) + end + end + end diff --git a/spec/features/proposals_spec.rb b/spec/features/proposals_spec.rb index 1e5ba8f70..91e81f263 100644 --- a/spec/features/proposals_spec.rb +++ b/spec/features/proposals_spec.rb @@ -1000,4 +1000,27 @@ feature 'Proposals' do visit proposals_path expect(page).to have_content('User deleted') end + + + scenario "Filtered by district" do + tag1= ActsAsTaggableOn::Tag.create!(name: "Centro", featured: true, kind: "district") + tag2= ActsAsTaggableOn::Tag.create!(name: "Puente de Vallecas", featured: true, kind: "district") + tag3= ActsAsTaggableOn::Tag.create!(name: "Retiro", featured: true, kind: "district") + tag4= ActsAsTaggableOn::Tag.create!(name: "Salamanca", featured: true, kind: "district") + + proposal1 = create(:proposal, tag_list: tag1) + proposal2 = create(:proposal, tag_list: tag2) + proposal3 = create(:proposal, tag_list: tag3) + proposal4 = create(:proposal, tag_list: tag4) + visit proposals_path + + click_link "View map of districts" + within("#districtslist") do + click_link "Puente de Vallecas" + end + within("#proposals") do + expect(page).to have_css('.proposal', count: 1) + expect(page).to have_content(proposal2.title) + end + end end