Merge branch 'master' into content_blocks_for_headings

This commit is contained in:
Julian Nicolas Herrero
2018-12-11 16:40:25 +01:00
committed by GitHub
181 changed files with 1635 additions and 830 deletions

View File

@@ -1,17 +1,17 @@
References ## References
===================
> Add references to related Issues/Pull Requests/Travis Builds/Rollbar errors/etc...
Objectives > Related Issues/Pull Requests/Travis Builds/Rollbar errors/etc...
===================
> What are the objectives of this changes? (If there is no related Issue with an explanation) ## Objectives
> What are the objectives of these changes?
## Visual Changes
Visual Changes
===================
> Any visual changes? please attach screenshots (or gifs) showing them. > Any visual changes? please attach screenshots (or gifs) showing them.
> If modified views are public (not the admin panel), try them in mobile display (with your browser's developer console) and add screenshots. > If modified views are public (not the admin panel), try them in mobile display (with your browser's developer console) and add screenshots.
Notes ## Notes
===================
> Mention rake tasks or actions to be done when deploying this changes to a server (if any). > Mention rake tasks or actions to be done when deploying this changes to a server (if any).
> Explain any caveats, or important things to notice like deprecations (if any). > Explain any caveats, or important things to notice like deprecations (if any).

View File

@@ -1,6 +1,6 @@
source 'https://rubygems.org' source 'https://rubygems.org'
gem 'rails', '4.2.10' gem 'rails', '4.2.11'
gem 'acts-as-taggable-on', '~> 5.0.0' gem 'acts-as-taggable-on', '~> 5.0.0'
gem 'acts_as_votable', '~> 0.11.1' gem 'acts_as_votable', '~> 0.11.1'
@@ -77,7 +77,7 @@ end
group :test do group :test do
gem 'capybara', '~> 2.17.0' gem 'capybara', '~> 2.17.0'
gem 'coveralls', '~> 0.8.22', require: false gem 'coveralls', '~> 0.8.22', require: false
gem 'database_cleaner', '~> 1.6.1' gem 'database_cleaner', '~> 1.7.0'
gem 'email_spec', '~> 2.1.0' gem 'email_spec', '~> 2.1.0'
gem 'rspec-rails', '~> 3.8' gem 'rspec-rails', '~> 3.8'
gem 'selenium-webdriver', '~> 3.10' gem 'selenium-webdriver', '~> 3.10'

View File

@@ -2,36 +2,36 @@ GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
remote: https://rails-assets.org/ remote: https://rails-assets.org/
specs: specs:
actionmailer (4.2.10) actionmailer (4.2.11)
actionpack (= 4.2.10) actionpack (= 4.2.11)
actionview (= 4.2.10) actionview (= 4.2.11)
activejob (= 4.2.10) activejob (= 4.2.11)
mail (~> 2.5, >= 2.5.4) mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 1.0, >= 1.0.5) rails-dom-testing (~> 1.0, >= 1.0.5)
actionpack (4.2.10) actionpack (4.2.11)
actionview (= 4.2.10) actionview (= 4.2.11)
activesupport (= 4.2.10) activesupport (= 4.2.11)
rack (~> 1.6) rack (~> 1.6)
rack-test (~> 0.6.2) rack-test (~> 0.6.2)
rails-dom-testing (~> 1.0, >= 1.0.5) rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.2) rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionview (4.2.10) actionview (4.2.11)
activesupport (= 4.2.10) activesupport (= 4.2.11)
builder (~> 3.1) builder (~> 3.1)
erubis (~> 2.7.0) erubis (~> 2.7.0)
rails-dom-testing (~> 1.0, >= 1.0.5) rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.3) rails-html-sanitizer (~> 1.0, >= 1.0.3)
activejob (4.2.10) activejob (4.2.11)
activesupport (= 4.2.10) activesupport (= 4.2.11)
globalid (>= 0.3.0) globalid (>= 0.3.0)
activemodel (4.2.10) activemodel (4.2.11)
activesupport (= 4.2.10) activesupport (= 4.2.11)
builder (~> 3.1) builder (~> 3.1)
activerecord (4.2.10) activerecord (4.2.11)
activemodel (= 4.2.10) activemodel (= 4.2.11)
activesupport (= 4.2.10) activesupport (= 4.2.11)
arel (~> 6.0) arel (~> 6.0)
activesupport (4.2.10) activesupport (4.2.11)
i18n (~> 0.7) i18n (~> 0.7)
minitest (~> 5.1) minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4) thread_safe (~> 0.3, >= 0.3.4)
@@ -113,7 +113,7 @@ GEM
coffee-script-source coffee-script-source
execjs execjs
coffee-script-source (1.12.2) coffee-script-source (1.12.2)
concurrent-ruby (1.1.1) concurrent-ruby (1.1.3)
coveralls (0.8.22) coveralls (0.8.22)
json (>= 1.8, < 3) json (>= 1.8, < 3)
simplecov (~> 0.16.1) simplecov (~> 0.16.1)
@@ -123,7 +123,7 @@ GEM
crass (1.0.4) crass (1.0.4)
daemons (1.2.6) daemons (1.2.6)
dalli (2.7.6) dalli (2.7.6)
database_cleaner (1.6.2) database_cleaner (1.7.0)
debug_inspector (0.0.3) debug_inspector (0.0.3)
delayed_job (4.1.5) delayed_job (4.1.5)
activesupport (>= 3.0, < 5.3) activesupport (>= 3.0, < 5.3)
@@ -247,7 +247,7 @@ GEM
loofah (2.2.3) loofah (2.2.3)
crass (~> 1.0.2) crass (~> 1.0.2)
nokogiri (>= 1.5.9) nokogiri (>= 1.5.9)
mail (2.7.0) mail (2.7.1)
mini_mime (>= 0.1.1) mini_mime (>= 0.1.1)
mdl (0.5.0) mdl (0.5.0)
kramdown (~> 1.12, >= 1.12.0) kramdown (~> 1.12, >= 1.12.0)
@@ -327,16 +327,16 @@ GEM
rack rack
rack-test (0.6.3) rack-test (0.6.3)
rack (>= 1.0) rack (>= 1.0)
rails (4.2.10) rails (4.2.11)
actionmailer (= 4.2.10) actionmailer (= 4.2.11)
actionpack (= 4.2.10) actionpack (= 4.2.11)
actionview (= 4.2.10) actionview (= 4.2.11)
activejob (= 4.2.10) activejob (= 4.2.11)
activemodel (= 4.2.10) activemodel (= 4.2.11)
activerecord (= 4.2.10) activerecord (= 4.2.11)
activesupport (= 4.2.10) activesupport (= 4.2.11)
bundler (>= 1.3.0, < 2.0) bundler (>= 1.3.0, < 2.0)
railties (= 4.2.10) railties (= 4.2.11)
sprockets-rails sprockets-rails
rails-assets-leaflet (1.1.0) rails-assets-leaflet (1.1.0)
rails-assets-markdown-it (8.2.2) rails-assets-markdown-it (8.2.2)
@@ -348,9 +348,9 @@ GEM
rails-deprecated_sanitizer (>= 1.0.1) rails-deprecated_sanitizer (>= 1.0.1)
rails-html-sanitizer (1.0.4) rails-html-sanitizer (1.0.4)
loofah (~> 2.2, >= 2.2.2) loofah (~> 2.2, >= 2.2.2)
railties (4.2.10) railties (4.2.11)
actionpack (= 4.2.10) actionpack (= 4.2.11)
activesupport (= 4.2.10) activesupport (= 4.2.11)
rake (>= 0.8.7) rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0) thor (>= 0.18.1, < 2.0)
rainbow (3.0.0) rainbow (3.0.0)
@@ -512,7 +512,7 @@ DEPENDENCIES
coveralls (~> 0.8.22) coveralls (~> 0.8.22)
daemons (~> 1.2.4) daemons (~> 1.2.4)
dalli (~> 2.7.6) dalli (~> 2.7.6)
database_cleaner (~> 1.6.1) database_cleaner (~> 1.7.0)
delayed_job_active_record (~> 4.1.3) delayed_job_active_record (~> 4.1.3)
devise (~> 3.5.7) devise (~> 3.5.7)
devise-async (~> 0.10.2) devise-async (~> 0.10.2)
@@ -548,7 +548,7 @@ DEPENDENCIES
pg (~> 0.21.0) pg (~> 0.21.0)
pg_search (~> 2.0.1) pg_search (~> 2.0.1)
quiet_assets (~> 1.1.0) quiet_assets (~> 1.1.0)
rails (= 4.2.10) rails (= 4.2.11)
rails-assets-leaflet! rails-assets-leaflet!
rails-assets-markdown-it (~> 8.2.1)! rails-assets-markdown-it (~> 8.2.1)!
redcarpet (~> 3.4.0) redcarpet (~> 3.4.0)

View File

@@ -9,6 +9,7 @@ Citizen Participation and Open Government Application
[![Coverage Status](https://coveralls.io/repos/github/consul/consul/badge.svg)](https://coveralls.io/github/consul/consul?branch=master) [![Coverage Status](https://coveralls.io/repos/github/consul/consul/badge.svg)](https://coveralls.io/github/consul/consul?branch=master)
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/consul/localized.svg)](https://crowdin.com/project/consul) [![Crowdin](https://d322cqt584bo4o.cloudfront.net/consul/localized.svg)](https://crowdin.com/project/consul)
[![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](http://www.gnu.org/licenses/agpl-3.0) [![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](http://www.gnu.org/licenses/agpl-3.0)
[![Reviewed by Hound](https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg)](https://houndci.com)
[![Accessibility conformance](https://img.shields.io/badge/accessibility-WAI:AA-green.svg)](https://www.w3.org/WAI/eval/Overview) [![Accessibility conformance](https://img.shields.io/badge/accessibility-WAI:AA-green.svg)](https://www.w3.org/WAI/eval/Overview)
[![A11y issues checked with Rocket Validator](https://rocketvalidator.com/badges/checked_with_rocket_validator.svg?url=https://rocketvalidator.com)](https://rocketvalidator.com/opensource) [![A11y issues checked with Rocket Validator](https://rocketvalidator.com/badges/checked_with_rocket_validator.svg?url=https://rocketvalidator.com)](https://rocketvalidator.com/opensource)

View File

@@ -3,5 +3,5 @@
require File.expand_path('../config/application', __FILE__) require File.expand_path('../config/application', __FILE__)
Rails.application.load_tasks Rails.application.load_tasks if Rake::Task.tasks.empty?
KnapsackPro.load_tasks if defined?(KnapsackPro) KnapsackPro.load_tasks if defined?(KnapsackPro)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -434,6 +434,11 @@ a {
text-transform: uppercase; text-transform: uppercase;
} }
.help-text {
line-height: rem-calc(20);
margin-top: 0;
}
// 02. Header // 02. Header
// ---------- // ----------
@@ -450,6 +455,18 @@ header {
float: left; float: left;
height: $line-height * 1.5; height: $line-height * 1.5;
margin-left: $line-height / 2; margin-left: $line-height / 2;
position: relative;
&::after {
color: #808080;
content: '\61';
font-family: "icons" !important;
font-size: $small-font-size;
pointer-events: none;
position: absolute;
right: 2px;
top: 9px;
}
} }
.external-links { .external-links {
@@ -834,6 +851,7 @@ footer {
.categories a, .categories a,
.geozone a, .geozone a,
.sidebar-links a, .sidebar-links a,
.sidebar-map a,
.tags span { .tags span {
background: #ececec; background: #ececec;
border-radius: rem-calc(6); border-radius: rem-calc(6);
@@ -941,15 +959,11 @@ footer {
label { label {
color: #fff; color: #fff;
font-size: $small-font-size; font-size: $tiny-font-size;
font-weight: normal; font-weight: normal;
} }
select { select {
background-image: image-url('language_select.png');
background-origin: border-box;
background-position: right;
background-size: 24px 24px;
option { option {
background: #fff; background: #fff;
@@ -960,14 +974,16 @@ footer {
} }
.locale-switcher { .locale-switcher {
background-color: transparent; background: #1a1a1a;
border: 0; border: 0;
border-radius: rem-calc(4);
color: #fff; color: #fff;
font-size: $small-font-size; font-size: $small-font-size;
height: $line-height;
margin-bottom: 0; margin-bottom: 0;
margin-top: $line-height / 4;
outline: none; outline: none;
padding-left: rem-calc(3); padding: 0 $line-height / 4;
padding-right: $line-height;
width: auto; width: auto;
&:focus { &:focus {
@@ -2508,7 +2524,7 @@ table {
border-radius: rem-calc(5); border-radius: rem-calc(5);
display: block; display: block;
margin: $line-height / 2 0; margin: $line-height / 2 0;
padding: 0 $line-height / 2; padding: $line-height / 2;
position: relative; position: relative;
.icon-document { .icon-document {

View File

@@ -33,7 +33,7 @@ class Admin::BudgetHeadingsController < Admin::BaseController
private private
def budget_heading_params def budget_heading_params
params.require(:budget_heading).permit(:name, :price, :population, :allow_custom_content) params.require(:budget_heading).permit(:name, :price, :population, :allow_custom_content, :latitude, :longitude)
end end
end end

View File

@@ -1,76 +1,8 @@
class Admin::BudgetInvestmentMilestonesController < Admin::BaseController class Admin::BudgetInvestmentMilestonesController < Admin::MilestonesController
include Translatable
before_action :load_budget_investment, only: [:index, :new, :create, :edit, :update, :destroy]
before_action :load_budget_investment_milestone, only: [:edit, :update, :destroy]
before_action :load_statuses, only: [:index, :new, :create, :edit, :update]
def index
end
def new
@milestone = Budget::Investment::Milestone.new
end
def create
@milestone = Budget::Investment::Milestone.new(milestone_params)
@milestone.investment = @investment
if @milestone.save
redirect_to admin_budget_budget_investment_path(@investment.budget, @investment),
notice: t('admin.milestones.create.notice')
else
render :new
end
end
def edit
end
def update
if @milestone.update(milestone_params)
redirect_to admin_budget_budget_investment_path(@investment.budget, @investment),
notice: t('admin.milestones.update.notice')
else
render :edit
end
end
def destroy
@milestone.destroy
redirect_to admin_budget_budget_investment_path(@investment.budget, @investment),
notice: t('admin.milestones.delete.notice')
end
private private
def milestone_params def milestoneable
image_attributes = [:id, :title, :attachment, :cached_attachment, :user_id, :_destroy] Budget::Investment.find(params[:budget_investment_id])
documents_attributes = [:id, :title, :attachment, :cached_attachment, :user_id, :_destroy]
attributes = [:publication_date, :budget_investment_id, :status_id,
translation_params(Budget::Investment::Milestone),
image_attributes: image_attributes, documents_attributes: documents_attributes]
params.require(:budget_investment_milestone).permit(*attributes)
end end
def load_budget_investment
@investment = Budget::Investment.find(params[:budget_investment_id])
end
def load_budget_investment_milestone
@milestone = get_milestone
end
def get_milestone
Budget::Investment::Milestone.find(params[:id])
end
def resource
get_milestone
end
def load_statuses
@statuses = Budget::Investment::Status.all
end
end end

View File

@@ -1,7 +1,7 @@
class Admin::ProposalsController < Admin::BaseController class Admin::HiddenProposalsController < Admin::BaseController
include FeatureFlags include FeatureFlags
has_filters %w{without_confirmed_hide all with_confirmed_hide}, only: :index has_filters %w[without_confirmed_hide all with_confirmed_hide], only: :index
feature_flag :proposals feature_flag :proposals

View File

@@ -1,20 +1,20 @@
class Admin::BudgetInvestmentStatusesController < Admin::BaseController class Admin::MilestoneStatusesController < Admin::BaseController
before_action :load_status, only: [:edit, :update, :destroy] before_action :load_status, only: [:edit, :update, :destroy]
def index def index
@statuses = Budget::Investment::Status.all @statuses = Milestone::Status.all
end end
def new def new
@status = Budget::Investment::Status.new @status = Milestone::Status.new
end end
def create def create
@status = Budget::Investment::Status.new(status_params) @status = Milestone::Status.new(status_params)
if @status.save if @status.save
redirect_to admin_budget_investment_statuses_path, redirect_to admin_milestone_statuses_path,
notice: t('admin.statuses.create.notice') notice: t('admin.statuses.create.notice')
else else
render :new render :new
@@ -26,7 +26,7 @@ class Admin::BudgetInvestmentStatusesController < Admin::BaseController
def update def update
if @status.update(status_params) if @status.update(status_params)
redirect_to admin_budget_investment_statuses_path, redirect_to admin_milestone_statuses_path,
notice: t('admin.statuses.update.notice') notice: t('admin.statuses.update.notice')
else else
render :edit render :edit
@@ -35,17 +35,17 @@ class Admin::BudgetInvestmentStatusesController < Admin::BaseController
def destroy def destroy
@status.destroy @status.destroy
redirect_to admin_budget_investment_statuses_path, redirect_to admin_milestone_statuses_path,
notice: t('admin.statuses.delete.notice') notice: t('admin.statuses.delete.notice')
end end
private private
def load_status def load_status
@status = Budget::Investment::Status.find(params[:id]) @status = Milestone::Status.find(params[:id])
end end
def status_params def status_params
params.require(:budget_investment_status).permit([:name, :description]) params.require(:milestone_status).permit([:name, :description])
end end
end end

View File

@@ -0,0 +1,72 @@
class Admin::MilestonesController < Admin::BaseController
include Translatable
before_action :load_milestoneable, only: [:index, :new, :create, :edit, :update, :destroy]
before_action :load_milestone, only: [:edit, :update, :destroy]
before_action :load_statuses, only: [:index, :new, :create, :edit, :update]
helper_method :milestoneable_path
def index
end
def new
@milestone = @milestoneable.milestones.new
end
def create
@milestone = @milestoneable.milestones.new(milestone_params)
if @milestone.save
redirect_to milestoneable_path, notice: t('admin.milestones.create.notice')
else
render :new
end
end
def edit
end
def update
if @milestone.update(milestone_params)
redirect_to milestoneable_path, notice: t('admin.milestones.update.notice')
else
render :edit
end
end
def destroy
@milestone.destroy
redirect_to milestoneable_path, notice: t('admin.milestones.delete.notice')
end
private
def milestone_params
image_attributes = [:id, :title, :attachment, :cached_attachment, :user_id, :_destroy]
documents_attributes = [:id, :title, :attachment, :cached_attachment, :user_id, :_destroy]
attributes = [:publication_date, :status_id,
translation_params(Milestone),
image_attributes: image_attributes, documents_attributes: documents_attributes]
params.require(:milestone).permit(*attributes)
end
def load_milestoneable
@milestoneable = milestoneable
end
def milestoneable
raise "Implement in subclass"
end
def load_milestone
@milestone = @milestoneable.milestones.find(params[:id])
end
def load_statuses
@statuses = Milestone::Status.all
end
def milestoneable_path
polymorphic_path([:admin, *resource_hierarchy_for(@milestone.milestoneable)])
end
end

View File

@@ -6,7 +6,7 @@ module Budgets
def show def show
authorize! :read_executions, @budget authorize! :read_executions, @budget
@statuses = ::Budget::Investment::Status.all @statuses = Milestone::Status.all
if params[:status].present? if params[:status].present?
@investments_by_heading = @budget.investments.winners @investments_by_heading = @budget.investments.winners

View File

@@ -1,5 +1,7 @@
module Budgets module Budgets
class InvestmentsController < ApplicationController class InvestmentsController < ApplicationController
OSM_DISTRICT_LEVEL_ZOOM = 12
include FeatureFlags include FeatureFlags
include CommentableActions include CommentableActions
include FlagActions include FlagActions
@@ -33,13 +35,17 @@ module Budgets
respond_to :html, :js respond_to :html, :js
def index def index
if @budget.finished? all_investments = if @budget.finished?
@investments = investments.winners.page(params[:page]).per(10).for_render investments.winners
else else
@investments = investments.page(params[:page]).per(10).for_render investments
end end
@investments = all_investments.page(params[:page]).per(10).for_render
@investment_ids = @investments.pluck(:id) @investment_ids = @investments.pluck(:id)
@investments_map_coordinates = MapLocation.where(investment_id: all_investments).map { |l| l.json_data }
load_investment_votes(@investments) load_investment_votes(@investments)
@tag_cloud = tag_cloud @tag_cloud = tag_cloud
end end
@@ -143,6 +149,7 @@ module Budgets
if params[:heading_id].present? if params[:heading_id].present?
@heading = @budget.headings.find(params[:heading_id]) @heading = @budget.headings.find(params[:heading_id])
@assigned_heading = @ballot.try(:heading_for_group, @heading.try(:group)) @assigned_heading = @ballot.try(:heading_for_group, @heading.try(:group))
load_map
end end
end end
@@ -172,6 +179,13 @@ module Budgets
end end
end end
def load_map
@map_location = MapLocation.new
@map_location.zoom = OSM_DISTRICT_LEVEL_ZOOM
@map_location.latitude = @heading.latitude.to_f
@map_location.longitude = @heading.longitude.to_f
end
end end
end end

View File

@@ -117,13 +117,12 @@ class Legislation::ProcessesController < Legislation::BaseController
end end
def set_random_seed def set_random_seed
seed = begin seed = (params[:random_seed] || session[:random_seed] || rand).to_f
Float(params[:random_seed] || session[:random_seed] || (rand(99) / 100.0))
rescue
0
end
session[:random_seed], params[:random_seed] = seed
seed = (-1..1).cover?(seed) ? seed : 1 seed = (-1..1).cover?(seed) ? seed : 1
session[:random_seed] = seed
params[:random_seed] = seed
::Legislation::Proposal.connection.execute "select setseed(#{seed})" ::Legislation::Proposal.connection.execute "select setseed(#{seed})"
end end
end end

View File

@@ -44,8 +44,7 @@ class ProposalsController < ApplicationController
def index_customization def index_customization
discard_archived discard_archived
load_retired load_retired
load_successful_proposals load_featured
load_featured unless @proposal_successful_exists
end end
def vote def vote
@@ -131,10 +130,13 @@ class ProposalsController < ApplicationController
def load_featured def load_featured
return unless !@advanced_search_terms && @search_terms.blank? && @tag_filter.blank? && params[:retired].blank? && @current_order != "recommendations" return unless !@advanced_search_terms && @search_terms.blank? && @tag_filter.blank? && params[:retired].blank? && @current_order != "recommendations"
@featured_proposals = Proposal.not_archived.sort_by_confidence_score.limit(3) if Setting['feature.featured_proposals']
if @featured_proposals.present? @featured_proposals = Proposal.not_archived.unsuccessful
set_featured_proposal_votes(@featured_proposals) .sort_by_confidence_score.limit(Setting['featured_proposals_number'])
@resources = @resources.where('proposals.id NOT IN (?)', @featured_proposals.map(&:id)) if @featured_proposals.present?
set_featured_proposal_votes(@featured_proposals)
@resources = @resources.where('proposals.id NOT IN (?)', @featured_proposals.map(&:id))
end
end end
end end
@@ -142,10 +144,6 @@ class ProposalsController < ApplicationController
@view = (params[:view] == "minimal") ? "minimal" : "default" @view = (params[:view] == "minimal") ? "minimal" : "default"
end end
def load_successful_proposals
@proposal_successful_exists = Proposal.successful.exists?
end
def destroy_map_location_association def destroy_map_location_association
map_location = params[:proposal][:map_location_attributes] map_location = params[:proposal][:map_location_attributes]
if map_location && (map_location[:longitude] && map_location[:latitude]).blank? && !map_location[:id].blank? if map_location && (map_location[:longitude] && map_location[:latitude]).blank? && !map_location[:id].blank?

View File

@@ -21,7 +21,12 @@ module AdminHelper
end end
def menu_moderated_content? def menu_moderated_content?
["proposals", "debates", "comments", "hidden_users", "activity", "hidden_budget_investments"].include?(controller_name) && controller.class.parent != Admin::Legislation moderated_sections.include?(controller_name) && controller.class.parent != Admin::Legislation
end
def moderated_sections
["hidden_proposals", "debates", "comments", "hidden_users", "activity",
"hidden_budget_investments"]
end end
def menu_budget? def menu_budget?

View File

@@ -26,4 +26,13 @@ module LegislationHelper
method: :patch, method: :patch,
class: html_class class: html_class
end end
def legislation_process_tabs(process)
{
"info" => edit_admin_legislation_process_path(process),
"questions" => admin_legislation_process_questions_path(process),
"proposals" => admin_legislation_process_proposals_path(process),
"draft_versions" => admin_legislation_process_draft_versions_path(process)
}
end
end end

View File

@@ -12,6 +12,10 @@ class Budget
validates :price, presence: true validates :price, presence: true
validates :slug, presence: true, format: /\A[a-z0-9\-_]+\z/ validates :slug, presence: true, format: /\A[a-z0-9\-_]+\z/
validates :population, numericality: { greater_than: 0 }, allow_nil: true validates :population, numericality: { greater_than: 0 }, allow_nil: true
validates :latitude, length: { maximum: 22, minimum: 1 }, presence: true, \
format: /\A(-|\+)?([1-8]?\d(?:\.\d{1,})?|90(?:\.0{1,6})?)\z/
validates :longitude, length: { maximum: 22, minimum: 1}, presence: true, \
format: /\A(-|\+)?((?:1[0-7]|[1-9])?\d(?:\.\d{1,})?|180(?:\.0{1,})?)\z/
delegate :budget, :budget_id, to: :group, allow_nil: true delegate :budget, :budget_id, to: :group, allow_nil: true

View File

@@ -24,6 +24,7 @@ class Budget
include Notifiable include Notifiable
include Filterable include Filterable
include Flaggable include Flaggable
include Milestoneable
belongs_to :author, -> { with_hidden }, class_name: 'User', foreign_key: 'author_id' belongs_to :author, -> { with_hidden }, class_name: 'User', foreign_key: 'author_id'
belongs_to :heading belongs_to :heading
@@ -40,8 +41,6 @@ class Budget
has_many :comments, -> {where(valuation: false)}, as: :commentable, class_name: 'Comment' has_many :comments, -> {where(valuation: false)}, as: :commentable, class_name: 'Comment'
has_many :valuations, -> {where(valuation: true)}, as: :commentable, class_name: 'Comment' has_many :valuations, -> {where(valuation: true)}, as: :commentable, class_name: 'Comment'
has_many :milestones
validates :title, presence: true validates :title, presence: true
validates :author, presence: true validates :author, presence: true
validates :description, presence: true validates :description, presence: true

View File

@@ -1,35 +0,0 @@
class Budget
class Investment
class Milestone < ActiveRecord::Base
include Imageable
include Documentable
documentable max_documents_allowed: 3,
max_file_size: 3.megabytes,
accepted_content_types: [ "application/pdf" ]
translates :title, :description, touch: true
include Globalizable
belongs_to :investment
belongs_to :status, class_name: 'Budget::Investment::Status'
validates :investment, presence: true
validates :publication_date, presence: true
validate :description_or_status_present?
scope :order_by_publication_date, -> { order(publication_date: :asc, created_at: :asc) }
scope :published, -> { where("publication_date <= ?", Date.current) }
scope :with_status, -> { where("status_id IS NOT NULL") }
def self.title_max_length
80
end
def description_or_status_present?
unless description.present? || status_id.present?
errors.add(:description)
end
end
end
end
end

View File

@@ -30,7 +30,7 @@ class Budget
end end
def store_reclassified_votes(reason) def store_reclassified_votes(reason)
ballot_lines_for_investment.each do |line| ballot_lines_for_investment.order(:id).each do |line|
attrs = { user: line.ballot.user, attrs = { user: line.ballot.user,
investment: self, investment: self,
reason: reason } reason: reason }

View File

@@ -0,0 +1,7 @@
module Milestoneable
extend ActiveSupport::Concern
included do
has_many :milestones, as: :milestoneable, dependent: :destroy
end
end

31
app/models/milestone.rb Normal file
View File

@@ -0,0 +1,31 @@
class Milestone < ActiveRecord::Base
include Imageable
include Documentable
documentable max_documents_allowed: 3,
max_file_size: 3.megabytes,
accepted_content_types: [ "application/pdf" ]
translates :title, :description, touch: true
include Globalizable
belongs_to :milestoneable, polymorphic: true
belongs_to :status
validates :milestoneable, presence: true
validates :publication_date, presence: true
validate :description_or_status_present?
scope :order_by_publication_date, -> { order(publication_date: :asc, created_at: :asc) }
scope :published, -> { where("publication_date <= ?", Date.current) }
scope :with_status, -> { where("status_id IS NOT NULL") }
def self.title_max_length
80
end
def description_or_status_present?
unless description.present? || status_id.present?
errors.add(:description)
end
end
end

View File

@@ -1,4 +1,4 @@
class Budget::Investment::Status < ActiveRecord::Base class Milestone::Status < ActiveRecord::Base
acts_as_paranoid column: :hidden_at acts_as_paranoid column: :hidden_at
has_many :milestones has_many :milestones

View File

@@ -90,6 +90,10 @@ class Poll < ActiveRecord::Base
Poll::Voter.where(poll: self, user: user, origin: "web").exists? Poll::Voter.where(poll: self, user: user, origin: "web").exists?
end end
def voted_by?(user)
Poll::Voter.where(poll: self, user: user).exists?
end
def date_range def date_range
unless starts_at.present? && ends_at.present? && starts_at <= ends_at unless starts_at.present? && ends_at.present? && starts_at <= ends_at
errors.add(:starts_at, I18n.t('errors.messages.invalid_date_range')) errors.add(:starts_at, I18n.t('errors.messages.invalid_date_range'))

View File

@@ -24,7 +24,7 @@ class Poll
end end
def create_officer_assignments def create_officer_assignments
booth.booth_assignments.each do |booth_assignment| booth.booth_assignments.order(:id).each do |booth_assignment|
attrs = { attrs = {
officer_id: officer_id, officer_id: officer_id,
date: date, date: date,

View File

@@ -57,7 +57,7 @@
<% if feature?(:budgets) %> <% if feature?(:budgets) %>
<li class="section-title <%= "is-active" if controller_name == "budgets" || <li class="section-title <%= "is-active" if controller_name == "budgets" ||
controller_name == "budget_investment_statuses" %>"> controller_name == "milestone_statuses" %>">
<%= link_to admin_budgets_path do %> <%= link_to admin_budgets_path do %>
<span class="icon-budget"></span> <span class="icon-budget"></span>
<strong><%= t("admin.menu.budgets") %></strong> <strong><%= t("admin.menu.budgets") %></strong>
@@ -144,8 +144,8 @@
</a> </a>
<ul <%= "class=is-active" if menu_moderated_content? %>> <ul <%= "class=is-active" if menu_moderated_content? %>>
<% if feature?(:proposals) %> <% if feature?(:proposals) %>
<li <%= "class=is-active" if controller_name == "proposals" && controller.class.parent != Admin::Legislation %>> <li <%= "class=is-active" if controller_name == "hidden_proposals" %>>
<%= link_to t("admin.menu.hidden_proposals"), admin_proposals_path %> <%= link_to t("admin.menu.hidden_proposals"), admin_hidden_proposals_path %>
</li> </li>
<% end %> <% end %>

View File

@@ -1,7 +0,0 @@
<%= back_link_to admin_budget_budget_investment_path(@investment.budget, @investment) %>
<h2><%= t("admin.milestones.edit.title") %></h2>
<div class="milestone-edit">
<%= render '/admin/budget_investment_milestones/form' %>
</div>

View File

@@ -1,5 +0,0 @@
<%= back_link_to admin_budget_investment_statuses_path %>
<h2><%= t("admin.statuses.edit.title") %></h2>
<%= render '/admin/budget_investment_statuses/form' %>

View File

@@ -1,5 +0,0 @@
<%= back_link_to admin_budget_investment_statuses_path %>
<h2><%= t("admin.statuses.new.title") %></h2>
<%= render '/admin/budget_investment_statuses/form' %>

View File

@@ -18,9 +18,8 @@
<td class="text-center"><%= milestone.id %></td> <td class="text-center"><%= milestone.id %></td>
<td> <td>
<%= link_to milestone.title, <%= link_to milestone.title,
edit_admin_budget_budget_investment_budget_investment_milestone_path(@investment.budget, polymorphic_path([:admin, *resource_hierarchy_for(milestone)],
@investment, action: :edit) %>
milestone) %>
</td> </td>
<td class="small small-5"><%= milestone.description %></td> <td class="small small-5"><%= milestone.description %></td>
<td class="small"> <td class="small">
@@ -46,9 +45,7 @@
</td> </td>
<td class="small-2"> <td class="small-2">
<%= link_to t("admin.milestones.index.delete"), <%= link_to t("admin.milestones.index.delete"),
admin_budget_budget_investment_budget_investment_milestone_path(@investment.budget, polymorphic_path([:admin, *resource_hierarchy_for(milestone)]),
@investment,
milestone),
method: :delete, method: :delete,
class: "button hollow alert expanded" %> class: "button hollow alert expanded" %>
</td> </td>

View File

@@ -63,6 +63,7 @@
<p> <p>
<%= link_to t("admin.budget_investments.show.new_milestone"), <%= link_to t("admin.budget_investments.show.new_milestone"),
new_admin_budget_budget_investment_budget_investment_milestone_path(@budget, @investment), polymorphic_path([:admin, *resource_hierarchy_for(@investment.milestones.new)],
action: :new),
class: "button hollow" %> class: "button hollow" %>
</p> </p>

View File

@@ -1,28 +1,25 @@
<%= form_for [:admin, budget, group, heading], remote: true do |f| %> <%= form_for [:admin, budget, group, heading], remote: true do |f| %>
<%= render 'shared/errors', resource: heading %> <%= render 'shared/errors', resource: heading %>
<label><%= t("admin.budgets.form.heading") %></label>
<%= f.text_field :name, <%= f.text_field :name,
label: false, label: t("admin.budgets.form.heading"),
maxlength: 50, maxlength: 50,
placeholder: t("admin.budgets.form.heading") %> placeholder: t("admin.budgets.form.heading") %>
<div class="row"> <div class="row">
<div class="small-12 medium-6 column"> <div class="small-12 medium-6 column">
<label><%= t("admin.budgets.form.amount") %></label>
<%= f.text_field :price, <%= f.text_field :price,
label: false, label: t("admin.budgets.form.amount"),
maxlength: 8, maxlength: 8,
placeholder: t("admin.budgets.form.amount") %> placeholder: t("admin.budgets.form.amount") %>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="small-12 medium-6 column"> <div class="small-12 medium-6 column">
<label><%= t("admin.budgets.form.population") %></label>
<p class="help-text" id="budgets-population-help-text"> <p class="help-text" id="budgets-population-help-text">
<%= t("admin.budgets.form.population_help_text") %> <%= t("admin.budgets.form.population_help_text") %>
</p> </p>
<%= f.text_field :population, <%= f.text_field :population,
label: false, label: t("admin.budgets.form.population"),
maxlength: 8, maxlength: 8,
placeholder: t("admin.budgets.form.population"), placeholder: t("admin.budgets.form.population"),
data: {toggle_focus: "population-info"}, data: {toggle_focus: "population-info"},
@@ -34,6 +31,22 @@
</div> </div>
</div> </div>
</div> </div>
<div class="row">
<div class="small-12 medium-6 column">
<%= f.text_field :latitude,
label: t("admin.budgets.form.latitude"),
maxlength: 22,
placeholder: "latitude" %>
</div>
</div>
<div class="row">
<div class="small-12 medium-6 column">
<%= f.text_field :longitude,
label: t("admin.budgets.form.longitude"),
maxlength: 22,
placeholder: "longitude" %>
</div>
</div>
<div class="row"> <div class="row">
<div class="small-12 medium-6 column"> <div class="small-12 medium-6 column">

View File

@@ -1,7 +1,7 @@
<h2><%= t("admin.proposals.index.title") %></h2> <h2><%= t("admin.hidden_proposals.index.title") %></h2>
<p><%= t("admin.shared.moderated_content") %></p> <p><%= t("admin.shared.moderated_content") %></p>
<%= render 'shared/filter_subnav', i18n_namespace: "admin.proposals.index" %> <%= render 'shared/filter_subnav', i18n_namespace: "admin.hidden_proposals.index" %>
<% if @proposals.any? %> <% if @proposals.any? %>
<h3 class="margin"><%= page_entries_info @proposals %></h3> <h3 class="margin"><%= page_entries_info @proposals %></h3>
@@ -33,13 +33,13 @@
</td> </td>
<td class="align-top"> <td class="align-top">
<%= link_to t("admin.actions.restore"), <%= link_to t("admin.actions.restore"),
restore_admin_proposal_path(proposal, request.query_parameters), restore_admin_hidden_proposal_path(proposal, request.query_parameters),
method: :put, method: :put,
data: { confirm: t("admin.actions.confirm") }, data: { confirm: t("admin.actions.confirm") },
class: "button hollow warning" %> class: "button hollow warning" %>
<% unless proposal.confirmed_hide? %> <% unless proposal.confirmed_hide? %>
<%= link_to t("admin.actions.confirm_hide"), <%= link_to t("admin.actions.confirm_hide"),
confirm_hide_admin_proposal_path(proposal, request.query_parameters), confirm_hide_admin_hidden_proposal_path(proposal, request.query_parameters),
method: :put, method: :put,
class: "button" %> class: "button" %>
<% end %> <% end %>
@@ -52,6 +52,6 @@
<%= paginate @proposals %> <%= paginate @proposals %>
<% else %> <% else %>
<div class="callout primary margin"> <div class="callout primary margin">
<%= t("admin.proposals.index.no_hidden_proposals") %> <%= t("admin.hidden_proposals.index.no_hidden_proposals") %>
</div> </div>
<% end %> <% end %>

View File

@@ -45,8 +45,6 @@
<div class="small-12 medium-6 large-4 column end"> <div class="small-12 medium-6 large-4 column end">
<div class="callout"> <div class="callout">
<h3 class="inline-block"><%= t("settings.#{@recommendations.key}") %></h3> <h3 class="inline-block"><%= t("settings.#{@recommendations.key}") %></h3>
<div class="float-right"> <%= render "setting", setting: @recommendations %>
<%= render "setting", setting: @recommendations %>
</div>
</div> </div>
</div> </div>

View File

@@ -1,41 +1,13 @@
<ul class="menu simple clear"> <ul class="menu simple clear">
<% if active == 'info' %> <% legislation_process_tabs(process).each do |tab_name, path| %>
<li class="is-active"> <% if active == tab_name %>
<h2><%= t("admin.legislation.processes.subnav.info") %></h2> <li class="is-active">
</li> <h2><%= t("admin.legislation.processes.subnav.#{tab_name}") %></h2>
<% else %> </li>
<li> <% else %>
<%= link_to t("admin.legislation.processes.subnav.info"), edit_admin_legislation_process_path(process) %> <li>
</li> <%= link_to t("admin.legislation.processes.subnav.#{tab_name}"), path %>
<% end %> </li>
<% end %>
<% if active == 'questions' %>
<li class="is-active">
<h2><%= t("admin.legislation.processes.subnav.questions") %></h2>
</li>
<% else %>
<li>
<%= link_to t("admin.legislation.processes.subnav.questions"), admin_legislation_process_questions_path(process) %>
</li>
<% end %>
<% if active == 'proposals' %>
<li class="is-active">
<h2><%= t("admin.legislation.processes.subnav.proposals") %></h2>
</li>
<% else %>
<li>
<%= link_to t("admin.legislation.processes.subnav.proposals"), admin_legislation_process_proposals_path(process) %>
</li>
<% end %>
<% if active == 'draft_versions' %>
<li class="is-active">
<h2><%= t("admin.legislation.processes.subnav.draft_texts") %></h2>
</li>
<% else %>
<li>
<%= link_to t("admin.legislation.processes.subnav.draft_texts"), admin_legislation_process_draft_versions_path(process) %>
</li>
<% end %> <% end %>
</ul> </ul>

View File

@@ -0,0 +1,5 @@
<%= back_link_to admin_milestone_statuses_path %>
<h2><%= t("admin.statuses.edit.title") %></h2>
<%= render '/admin/milestone_statuses/form' %>

View File

@@ -1,7 +1,7 @@
<h2 class="inline-block"><%= t("admin.statuses.index.title") %></h2> <h2 class="inline-block"><%= t("admin.statuses.index.title") %></h2>
<%= link_to t("admin.statuses.index.new_status"), <%= link_to t("admin.statuses.index.new_status"),
new_admin_budget_investment_status_path, new_admin_milestone_status_path,
class: "button float-right margin-right" %> class: "button float-right margin-right" %>
<% if @statuses.any? %> <% if @statuses.any? %>
@@ -15,7 +15,7 @@
</thead> </thead>
<tbody> <tbody>
<% @statuses.each do |status| %> <% @statuses.each do |status| %>
<tr id="<%= dom_id(status) %>" class="budget_investment_status"> <tr id="<%= dom_id(status) %>" class="milestone_status">
<td> <td>
<%= status.name %> <%= status.name %>
</td> </td>
@@ -24,10 +24,10 @@
</td> </td>
<td> <td>
<%= link_to t("admin.statuses.index.edit"), <%= link_to t("admin.statuses.index.edit"),
edit_admin_budget_investment_status_path(status), edit_admin_milestone_status_path(status),
method: :get, class: "button hollow" %> method: :get, class: "button hollow" %>
<%= link_to t("admin.statuses.index.delete"), <%= link_to t("admin.statuses.index.delete"),
admin_budget_investment_status_path(status), admin_milestone_status_path(status),
method: :delete, class: "button hollow alert" %> method: :delete, class: "button hollow alert" %>
</td> </td>
</tr> </tr>

View File

@@ -0,0 +1,5 @@
<%= back_link_to admin_milestone_statuses_path %>
<h2><%= t("admin.statuses.new.title") %></h2>
<%= render '/admin/milestone_statuses/form' %>

View File

@@ -1,6 +1,6 @@
<%= render "admin/shared/globalize_locales", resource: @milestone %> <%= render "admin/shared/globalize_locales", resource: @milestone %>
<%= translatable_form_for [:admin, @investment.budget, @investment, @milestone] do |f| %> <%= translatable_form_for [:admin, *resource_hierarchy_for(@milestone)] do |f| %>
<div class="small-12 medium-6 margin-bottom"> <div class="small-12 medium-6 margin-bottom">
<%= f.select :status_id, <%= f.select :status_id,
@@ -8,12 +8,12 @@
{ include_blank: @statuses.any? ? '' : t('admin.milestones.form.no_statuses_defined') }, { include_blank: @statuses.any? ? '' : t('admin.milestones.form.no_statuses_defined') },
{ disabled: @statuses.blank? } %> { disabled: @statuses.blank? } %>
<%= link_to t('admin.milestones.form.admin_statuses'), <%= link_to t('admin.milestones.form.admin_statuses'),
admin_budget_investment_statuses_path %> admin_milestone_statuses_path %>
</div> </div>
<%= f.translatable_fields do |translations_form| %> <%= f.translatable_fields do |translations_form| %>
<%= translations_form.hidden_field :title, value: l(Time.current, format: :datetime), <%= translations_form.hidden_field :title, value: l(Time.current, format: :datetime),
maxlength: Budget::Investment::Milestone.title_max_length %> maxlength: Milestone.title_max_length %>
<%= translations_form.text_area :description, <%= translations_form.text_area :description,
rows: 5, rows: 5,

View File

@@ -0,0 +1,7 @@
<%= back_link_to milestoneable_path %>
<h2><%= t("admin.milestones.edit.title") %></h2>
<div class="milestone-edit">
<%= render "form" %>
</div>

View File

@@ -1,7 +1,7 @@
<div class="milestone-new row"> <div class="milestone-new row">
<div class="small-12 column"> <div class="small-12 column">
<%= back_link_to admin_budget_budget_investment_path(@investment.budget, @investment) %> <%= back_link_to milestoneable_path %>
<h1><%= t("admin.milestones.new.creating") %></h1> <h1><%= t("admin.milestones.new.creating") %></h1>

View File

@@ -88,7 +88,7 @@
</div> </div>
<% unless current_budget.informing? %> <% unless current_budget.informing? %>
<div id="map"> <div class="map">
<h3><%= t("budgets.index.map") %></h3> <h3><%= t("budgets.index.map") %></h3>
<%= render_map(nil, "budgets", false, nil, @budgets_coordinates) %> <%= render_map(nil, "budgets", false, nil, @budgets_coordinates) %>
</div> </div>

View File

@@ -0,0 +1,8 @@
<div class="sidebar-divider"></div>
<br>
<ul id="sidebar-map" class="no-bullet sidebar-map">
<div class="map">
<%= render_map(@map_location, "budgets", false, nil, @investments_map_coordinates) %>
</div>
</ul>

View File

@@ -24,6 +24,7 @@
<% if @heading && !@heading.content_blocks.where(locale: I18n.locale).empty? %> <% if @heading && !@heading.content_blocks.where(locale: I18n.locale).empty? %>
<%= render 'budgets/investments/content_blocks' %> <%= render 'budgets/investments/content_blocks' %>
<% end %> <% end %>
<%= render 'budgets/investments/map' %>
<%= render "shared/tag_cloud", taggable: 'budget/investment' %> <%= render "shared/tag_cloud", taggable: 'budget/investment' %>
<%= render 'budgets/investments/categories' %> <%= render 'budgets/investments/categories' %>

View File

@@ -29,17 +29,24 @@
</p> </p>
<% if milestone.documents.present? %> <% if milestone.documents.present? %>
<div class="document-link text-center"> <div class="documents">
<p> <div class="document-link text-left small">
<span class="icon-document"></span>&nbsp; <p>
<strong><%= t("shared.documentation") %></strong> <strong><%= t("shared.documentation") %></strong>
</p> </p>
<% milestone.documents.each do |document| %>
<%= link_to document.title, <% milestone.documents.each do |document| %>
document.attachment.url, <%= link_to document.title,
target: "_blank", document.attachment.url,
rel: "nofollow" %><br> target: "_blank",
<% end %> rel: "nofollow" %><br>
<small>
<%= document.humanized_content_type %>&nbsp;|&nbsp;
<%= number_to_human_size(document.attachment_file_size, precision: 2) %>
</small>
<br>
<% end %>
</div>
</div> </div>
<% end %> <% end %>

View File

@@ -1,7 +1,7 @@
<% if documents.any? %> <% if documents.any? %>
<div class="document-divider no-margin-top margin-bottom padding"> <div class="document-divider no-margin-top margin-bottom padding">
<div class="row"> <div class="row">
<div class="small-12 medium-6 column"> <div class="small-12 column">
<div class="additional-document-link"> <div class="additional-document-link">
<p> <p>
<strong><%= t('proposals.show.title_external_url') %></strong> <strong><%= t('proposals.show.title_external_url') %></strong>

View File

@@ -17,8 +17,16 @@
class: "button secondary hollow js-question-answer" %> class: "button secondary hollow js-question-answer" %>
<% end %> <% end %>
<% end %> <% end %>
<% elsif !user_signed_in? %>
<% question.question_answers.order(id: :desc).each do |answer| %>
<%= link_to answer.title, new_user_session_path, class: "button secondary hollow" %>
<% end %>
<% elsif !current_user.level_two_or_three_verified? %>
<% question.question_answers.order(id: :desc).each do |answer| %>
<%= link_to answer.title, verification_path, class: "button secondary hollow" %>
<% end %>
<% else %> <% else %>
<% question.question_answers.each do |answer| %> <% question.question_answers.order(id: :desc).each do |answer| %>
<span class="button secondary hollow disabled"><%= answer.title %></span> <span class="button secondary hollow disabled"><%= answer.title %></span>
<% end %> <% end %>
<% end %> <% end %>

View File

@@ -1,7 +1,7 @@
<h3 class="title"><%= t("welcome.cards.title") %></h3> <h3 class="title"><%= t("welcome.cards.title") %></h3>
<div class="row" data-equalizer data-equalizer-on="medium"> <div class="row" data-equalizer data-equalizer-on="medium">
<% @cards.find_each do |card| %> <% @cards.each do |card| %>
<%= render "card", card: card %> <%= render "card", card: card %>
<% end %> <% end %>
</div> </div>

View File

@@ -20,9 +20,11 @@
<div class="row"> <div class="row">
<div class="small-12 column <%= 'large-8' if feed_processes_enabled? %>"> <% if @cards.any? %>
<%= render "cards" %> <div class="small-12 column <%= 'large-8' if feed_processes_enabled? %>">
</div> <%= render "cards" %>
</div>
<% end %>
<div class="small-12 large-4 column"> <div class="small-12 large-4 column">
<%= render "processes" %> <%= render "processes" %>

View File

@@ -128,7 +128,7 @@ ignore_unused:
- 'admin.comments.index.filter*' - 'admin.comments.index.filter*'
- 'admin.banners.index.filters.*' - 'admin.banners.index.filters.*'
- 'admin.debates.index.filter*' - 'admin.debates.index.filter*'
- 'admin.proposals.index.filter*' - 'admin.hidden_proposals.index.filter*'
- 'admin.proposal_notifications.index.filter*' - 'admin.proposal_notifications.index.filter*'
- 'admin.budgets.index.filter*' - 'admin.budgets.index.filter*'
- 'admin.budget_investments.index.filter*' - 'admin.budget_investments.index.filter*'

View File

@@ -7,8 +7,8 @@ module ActionDispatch::Routing::UrlFor
case resource.class.name case resource.class.name
when "Budget::Investment" when "Budget::Investment"
[resource.budget, resource] [resource.budget, resource]
when "Budget::Investment::Milestone" when "Milestone"
[resource.investment.budget, resource.investment, resource] [*resource_hierarchy_for(resource.milestoneable), resource]
when "Legislation::Annotation" when "Legislation::Annotation"
[resource.draft_version.process, resource.draft_version, resource] [resource.draft_version.process, resource.draft_version, resource]
when "Legislation::Proposal", "Legislation::Question", "Legislation::DraftVersion" when "Legislation::Proposal", "Legislation::Question", "Legislation::DraftVersion"

View File

@@ -86,12 +86,12 @@ ar:
organization_name: "إذا كنت تقترح بإسم جماعي/منظمة, أو نيابة عن أشخاص آخرين, اكتب إسمها" organization_name: "إذا كنت تقترح بإسم جماعي/منظمة, أو نيابة عن أشخاص آخرين, اكتب إسمها"
image: "اقتراح صورة وصفية" image: "اقتراح صورة وصفية"
image_title: "عنوان الصورة" image_title: "عنوان الصورة"
budget/investment/milestone: milestone:
status_id: "حالة الإستثمار الحالية (إختياري)" status_id: "حالة الإستثمار الحالية (إختياري)"
title: "العنوان" title: "العنوان"
description: "الوصف (إختياري ان كان هناك حالة معينة)" description: "الوصف (إختياري ان كان هناك حالة معينة)"
publication_date: "تاريخ النشر" publication_date: "تاريخ النشر"
budget/investment/status: milestone/status:
name: "الاسم" name: "الاسم"
description: "الوصف (إختياري)" description: "الوصف (إختياري)"
budget/heading: budget/heading:

View File

@@ -7,7 +7,7 @@ ast:
budget/investment: budget/investment:
one: "Proyectu de inversión" one: "Proyectu de inversión"
other: "Proyectos d'inversión" other: "Proyectos d'inversión"
budget/investment/milestone: milestone:
one: "finxu" one: "finxu"
other: "finxos" other: "finxos"
comment: comment:

View File

@@ -10,7 +10,7 @@ ca:
budget/investment: budget/investment:
one: "Proposta d'inversió" one: "Proposta d'inversió"
other: "Propostes d'inversió" other: "Propostes d'inversió"
budget/investment/milestone: milestone:
one: "fita" one: "fita"
other: "fites" other: "fites"
comment: comment:

View File

@@ -10,10 +10,10 @@ de:
budget/investment: budget/investment:
one: "Ausgabenvorschlag" one: "Ausgabenvorschlag"
other: "Ausgabenvorschläge" other: "Ausgabenvorschläge"
budget/investment/milestone: milestone:
one: "Meilenstein" one: "Meilenstein"
other: "Meilensteine" other: "Meilensteine"
budget/investment/status: milestone/status:
one: "Status des Ausgabenvorschlags" one: "Status des Ausgabenvorschlags"
other: "Status der Ausgabenvorschläge" other: "Status der Ausgabenvorschläge"
comment: comment:
@@ -131,12 +131,12 @@ de:
organization_name: "Wenn Sie einen Vorschlag im Namen einer Gruppe, Organisation oder mehreren Personen einreichen, nennen Sie bitte dessen/deren Name/n" organization_name: "Wenn Sie einen Vorschlag im Namen einer Gruppe, Organisation oder mehreren Personen einreichen, nennen Sie bitte dessen/deren Name/n"
image: "Beschreibendes Bild zum Ausgabenvorschlag" image: "Beschreibendes Bild zum Ausgabenvorschlag"
image_title: "Bildtitel" image_title: "Bildtitel"
budget/investment/milestone: milestone:
status_id: "Derzeitiger Status des Ausgabenvorschlags (optional)" status_id: "Derzeitiger Status des Ausgabenvorschlags (optional)"
title: "Titel" title: "Titel"
description: "Beschreibung (optional, wenn kein Status zugewiesen ist)" description: "Beschreibung (optional, wenn kein Status zugewiesen ist)"
publication_date: "Datum der Veröffentlichung" publication_date: "Datum der Veröffentlichung"
budget/investment/status: milestone/status:
name: "Name" name: "Name"
description: "Beschreibung (optional)" description: "Beschreibung (optional)"
budget/heading: budget/heading:

View File

@@ -403,7 +403,7 @@ de:
status_planned: Geplant status_planned: Geplant
subnav: subnav:
info: Information info: Information
draft_texts: Ausarbeitung draft_versions: Ausarbeitung
questions: Diskussion questions: Diskussion
proposals: Vorschläge proposals: Vorschläge
proposals: proposals:
@@ -1004,7 +1004,7 @@ de:
search: search:
title: Organisationen suchen title: Organisationen suchen
no_results: Keine Organisationen gefunden. no_results: Keine Organisationen gefunden.
proposals: hidden_proposals:
index: index:
filter: Filter filter: Filter
filters: filters:

View File

@@ -1,10 +1,10 @@
en-US: en-US:
activerecord: activerecord:
models: models:
budget/investment/milestone: milestone:
one: "Meilenstein" one: "Meilenstein"
other: "Meilensteine" other: "Meilensteine"
budget/investment/status: milestone/status:
one: "Investitionsstatus, Anlagenstatus" one: "Investitionsstatus, Anlagenstatus"
other: "Investitionsstatus, Anlagenstatus" other: "Investitionsstatus, Anlagenstatus"
comment: comment:

View File

@@ -10,12 +10,12 @@ en:
budget/investment: budget/investment:
one: "Investment" one: "Investment"
other: "Investments" other: "Investments"
budget/investment/milestone: milestone:
one: "milestone" one: "milestone"
other: "milestones" other: "milestones"
budget/investment/status: milestone/status:
one: "Investment status" one: "Milestone Status"
other: "Investment statuses" other: "Milestone Statuses"
comment: comment:
one: "Comment" one: "Comment"
other: "Comments" other: "Comments"
@@ -82,9 +82,6 @@ en:
legislation/draft_versions: legislation/draft_versions:
one: "Draft version" one: "Draft version"
other: "Draft versions" other: "Draft versions"
legislation/draft_texts:
one: "Draft"
other: "Drafts"
legislation/questions: legislation/questions:
one: "Question" one: "Question"
other: "Questions" other: "Questions"
@@ -131,12 +128,12 @@ en:
organization_name: "If you are proposing in the name of a collective/organization, or on behalf of more people, write its name" organization_name: "If you are proposing in the name of a collective/organization, or on behalf of more people, write its name"
image: "Proposal descriptive image" image: "Proposal descriptive image"
image_title: "Image title" image_title: "Image title"
budget/investment/milestone: milestone:
status_id: "Current investment status (optional)" status_id: "Current investment status (optional)"
title: "Title" title: "Title"
description: "Description (optional if there's an status assigned)" description: "Description (optional if there's an status assigned)"
publication_date: "Publication date" publication_date: "Publication date"
budget/investment/status: milestone/status:
name: "Name" name: "Name"
description: "Description (optional)" description: "Description (optional)"
budget/heading: budget/heading:

View File

@@ -135,6 +135,8 @@ en:
max_votable_headings: "Maximum number of headings in which a user can vote" max_votable_headings: "Maximum number of headings in which a user can vote"
current_of_max_headings: "%{current} of %{max}" current_of_max_headings: "%{current} of %{max}"
allow_content_block: Allow content block allow_content_block: Allow content block
latitude: Latitude
longitude: Longitude
winners: winners:
calculate: Calculate Winner Investments calculate: Calculate Winner Investments
calculated: Winners being calculated, it may take a minute. calculated: Winners being calculated, it may take a minute.
@@ -290,24 +292,24 @@ en:
notice: Milestone successfully deleted notice: Milestone successfully deleted
statuses: statuses:
index: index:
title: Investment statuses title: Milestone statuses
empty_statuses: There are no investment statuses created empty_statuses: There are no milestone statuses created
new_status: Create new investment status new_status: Create new milestone status
table_name: Name table_name: Name
table_description: Description table_description: Description
table_actions: Actions table_actions: Actions
delete: Delete delete: Delete
edit: Edit edit: Edit
edit: edit:
title: Edit investment status title: Edit milestone status
update: update:
notice: Investment status updated successfully notice: Milestone status updated successfully
new: new:
title: Create investment status title: Create milestone status
create: create:
notice: Investment status created successfully notice: Milestone status created successfully
delete: delete:
notice: Investment status deleted successfully notice: Milestone status deleted successfully
comments: comments:
index: index:
filter: Filter filter: Filter
@@ -417,7 +419,7 @@ en:
status_planned: Planned status_planned: Planned
subnav: subnav:
info: Information info: Information
draft_texts: Drafting draft_versions: Drafting
questions: Debate questions: Debate
proposals: Proposals proposals: Proposals
proposals: proposals:
@@ -1038,7 +1040,7 @@ en:
search: search:
title: Search Organisations title: Search Organisations
no_results: No organizations found. no_results: No organizations found.
proposals: hidden_proposals:
index: index:
filter: Filter filter: Filter
filters: filters:

View File

@@ -20,6 +20,8 @@ en:
max_votes_for_debate_edit_description: "From this number of votes the author of a Debate can no longer edit it" max_votes_for_debate_edit_description: "From this number of votes the author of a Debate can no longer edit it"
proposal_code_prefix: "Prefix for Proposal codes" proposal_code_prefix: "Prefix for Proposal codes"
proposal_code_prefix_description: "This prefix will appear in the Proposals before the creation date and its ID" proposal_code_prefix_description: "This prefix will appear in the Proposals before the creation date and its ID"
featured_proposals_number: "Number of featured proposals"
featured_proposals_number_description: "Number of featured proposals that will be displayed if the Featured proposals feature is active"
votes_for_proposal_success: "Number of votes necessary for approval of a Proposal" votes_for_proposal_success: "Number of votes necessary for approval of a Proposal"
votes_for_proposal_success_description: "When a proposal reaches this number of supports it will no longer be able to receive more supports and is considered successful" votes_for_proposal_success_description: "When a proposal reaches this number of supports it will no longer be able to receive more supports and is considered successful"
months_to_archive_proposals: "Months to archive Proposals" months_to_archive_proposals: "Months to archive Proposals"
@@ -85,6 +87,8 @@ en:
google_login_description: "Allow users to sign up with their Google Account" google_login_description: "Allow users to sign up with their Google Account"
proposals: "Proposals" proposals: "Proposals"
proposals_description: "Citizens' proposals are an opportunity for neighbours and collectives to decide directly how they want their city to be, after getting sufficient support and submitting to a citizens' vote" proposals_description: "Citizens' proposals are an opportunity for neighbours and collectives to decide directly how they want their city to be, after getting sufficient support and submitting to a citizens' vote"
featured_proposals: "Featured proposals"
featured_proposals_description: "Shows featured proposals on index proposals page"
debates: "Debates" debates: "Debates"
debates_description: "The citizens' debate space is aimed at anyone who can present issues that concern them and about which they want to share their views with others" debates_description: "The citizens' debate space is aimed at anyone who can present issues that concern them and about which they want to share their views with others"
polls: "Polls" polls: "Polls"

View File

@@ -7,10 +7,10 @@ es-AR:
budget/investment: budget/investment:
one: "Proyecto de inversión" one: "Proyecto de inversión"
other: "Proyectos de inversión" other: "Proyectos de inversión"
budget/investment/milestone: milestone:
one: "hito" one: "hito"
other: "hitos" other: "hitos"
budget/investment/status: milestone/status:
one: "Estado de Inversiones" one: "Estado de Inversiones"
other: "Estado de Inversiones" other: "Estado de Inversiones"
comment: comment:
@@ -113,12 +113,12 @@ es-AR:
organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre" organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre"
image: "Imagen descriptiva de la propuesta de inversión" image: "Imagen descriptiva de la propuesta de inversión"
image_title: "Título de la imagen" image_title: "Título de la imagen"
budget/investment/milestone: milestone:
status_id: "Estado de inversión actual ( opcional)" status_id: "Estado de inversión actual ( opcional)"
title: "Título" title: "Título"
description: "Descripción (opcional si hay estado asignado)" description: "Descripción (opcional si hay estado asignado)"
publication_date: "Fecha de publicación" publication_date: "Fecha de publicación"
budget/investment/status: milestone/status:
name: "Nombre" name: "Nombre"
description: "Descripción (opcional)" description: "Descripción (opcional)"
budget/heading: budget/heading:

View File

@@ -367,7 +367,7 @@ es-AR:
status_planned: Próximamente status_planned: Próximamente
subnav: subnav:
info: Información info: Información
draft_texts: Redacción draft_versions: Redacción
questions: Debate questions: Debate
proposals: Propuestas proposals: Propuestas
proposals: proposals:
@@ -906,7 +906,7 @@ es-AR:
search: search:
title: Buscar Organizaciones title: Buscar Organizaciones
no_results: No se han encontrado organizaciones. no_results: No se han encontrado organizaciones.
proposals: hidden_proposals:
index: index:
filter: Filtro filter: Filtro
filters: filters:

View File

@@ -7,7 +7,7 @@ es-BO:
budget/investment: budget/investment:
one: "Proyecto de inversión" one: "Proyecto de inversión"
other: "Proyectos de inversión" other: "Proyectos de inversión"
budget/investment/milestone: milestone:
one: "hito" one: "hito"
other: "hitos" other: "hitos"
comment: comment:
@@ -104,7 +104,7 @@ es-BO:
organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre" organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre"
image: "Imagen descriptiva de la propuesta de inversión" image: "Imagen descriptiva de la propuesta de inversión"
image_title: "Título de la imagen" image_title: "Título de la imagen"
budget/investment/milestone: milestone:
title: "Título" title: "Título"
publication_date: "Fecha de publicación" publication_date: "Fecha de publicación"
budget/heading: budget/heading:

View File

@@ -711,7 +711,7 @@ es-BO:
search: search:
title: Buscar Organizaciones title: Buscar Organizaciones
no_results: No se han encontrado organizaciones. no_results: No se han encontrado organizaciones.
proposals: hidden_proposals:
index: index:
filter: Filtro filter: Filtro
filters: filters:

View File

@@ -10,10 +10,10 @@ es-CL:
budget/investment: budget/investment:
one: "Proyecto de inversión" one: "Proyecto de inversión"
other: "Proyectos de inversión" other: "Proyectos de inversión"
budget/investment/milestone: milestone:
one: "hito" one: "hito"
other: "hitos" other: "hitos"
budget/investment/status: milestone/status:
one: "Estado de la inversión" one: "Estado de la inversión"
other: "Estados de las inversiones" other: "Estados de las inversiones"
comment: comment:
@@ -128,12 +128,12 @@ es-CL:
organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre" organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre"
image: "Imagen descriptiva de la propuesta de inversión" image: "Imagen descriptiva de la propuesta de inversión"
image_title: "Título de la imagen" image_title: "Título de la imagen"
budget/investment/milestone: milestone:
status_id: "Estado actual de la inversión (opcional)" status_id: "Estado actual de la inversión (opcional)"
title: "Título" title: "Título"
description: "Descripción (opcional si hay una condición asignada)" description: "Descripción (opcional si hay una condición asignada)"
publication_date: "Fecha de publicación" publication_date: "Fecha de publicación"
budget/investment/status: milestone/status:
name: "Nombre" name: "Nombre"
description: "Descripción (opcional)" description: "Descripción (opcional)"
budget/heading: budget/heading:

View File

@@ -361,7 +361,7 @@ es-CL:
status_planned: Próximamente status_planned: Próximamente
subnav: subnav:
info: Información info: Información
draft_texts: Redacción draft_versions: Redacción
questions: Debate questions: Debate
proposals: Propuestas proposals: Propuestas
proposals: proposals:
@@ -841,7 +841,7 @@ es-CL:
search: search:
title: Buscar Organizaciones title: Buscar Organizaciones
no_results: No se han encontrado organizaciones. no_results: No se han encontrado organizaciones.
proposals: hidden_proposals:
index: index:
filter: Filtro filter: Filtro
filters: filters:

View File

@@ -7,7 +7,7 @@ es-CO:
budget/investment: budget/investment:
one: "Proyecto de inversión" one: "Proyecto de inversión"
other: "Proyectos de inversión" other: "Proyectos de inversión"
budget/investment/milestone: milestone:
one: "hito" one: "hito"
other: "hitos" other: "hitos"
comment: comment:
@@ -104,7 +104,7 @@ es-CO:
organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre" organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre"
image: "Imagen descriptiva de la propuesta de inversión" image: "Imagen descriptiva de la propuesta de inversión"
image_title: "Título de la imagen" image_title: "Título de la imagen"
budget/investment/milestone: milestone:
title: "Título" title: "Título"
publication_date: "Fecha de publicación" publication_date: "Fecha de publicación"
budget/heading: budget/heading:

View File

@@ -711,7 +711,7 @@ es-CO:
search: search:
title: Buscar Organizaciones title: Buscar Organizaciones
no_results: No se han encontrado organizaciones. no_results: No se han encontrado organizaciones.
proposals: hidden_proposals:
index: index:
filter: Filtro filter: Filtro
filters: filters:

View File

@@ -7,7 +7,7 @@ es-CR:
budget/investment: budget/investment:
one: "Proyecto de inversión" one: "Proyecto de inversión"
other: "Proyectos de inversión" other: "Proyectos de inversión"
budget/investment/milestone: milestone:
one: "hito" one: "hito"
other: "hitos" other: "hitos"
comment: comment:
@@ -104,7 +104,7 @@ es-CR:
organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre" organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre"
image: "Imagen descriptiva de la propuesta de inversión" image: "Imagen descriptiva de la propuesta de inversión"
image_title: "Título de la imagen" image_title: "Título de la imagen"
budget/investment/milestone: milestone:
title: "Título" title: "Título"
publication_date: "Fecha de publicación" publication_date: "Fecha de publicación"
budget/heading: budget/heading:

View File

@@ -711,7 +711,7 @@ es-CR:
search: search:
title: Buscar Organizaciones title: Buscar Organizaciones
no_results: No se han encontrado organizaciones. no_results: No se han encontrado organizaciones.
proposals: hidden_proposals:
index: index:
filter: Filtro filter: Filtro
filters: filters:

View File

@@ -7,7 +7,7 @@ es-DO:
budget/investment: budget/investment:
one: "Proyecto de inversión" one: "Proyecto de inversión"
other: "Proyectos de inversión" other: "Proyectos de inversión"
budget/investment/milestone: milestone:
one: "hito" one: "hito"
other: "hitos" other: "hitos"
comment: comment:
@@ -104,7 +104,7 @@ es-DO:
organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre" organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre"
image: "Imagen descriptiva de la propuesta de inversión" image: "Imagen descriptiva de la propuesta de inversión"
image_title: "Título de la imagen" image_title: "Título de la imagen"
budget/investment/milestone: milestone:
title: "Título" title: "Título"
publication_date: "Fecha de publicación" publication_date: "Fecha de publicación"
budget/heading: budget/heading:

View File

@@ -711,7 +711,7 @@ es-DO:
search: search:
title: Buscar Organizaciones title: Buscar Organizaciones
no_results: No se han encontrado organizaciones. no_results: No se han encontrado organizaciones.
proposals: hidden_proposals:
index: index:
filter: Filtro filter: Filtro
filters: filters:

View File

@@ -7,7 +7,7 @@ es-EC:
budget/investment: budget/investment:
one: "Proyecto de inversión" one: "Proyecto de inversión"
other: "Proyectos de inversión" other: "Proyectos de inversión"
budget/investment/milestone: milestone:
one: "hito" one: "hito"
other: "hitos" other: "hitos"
comment: comment:
@@ -104,7 +104,7 @@ es-EC:
organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre" organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre"
image: "Imagen descriptiva de la propuesta de inversión" image: "Imagen descriptiva de la propuesta de inversión"
image_title: "Título de la imagen" image_title: "Título de la imagen"
budget/investment/milestone: milestone:
title: "Título" title: "Título"
publication_date: "Fecha de publicación" publication_date: "Fecha de publicación"
budget/heading: budget/heading:

View File

@@ -711,7 +711,7 @@ es-EC:
search: search:
title: Buscar Organizaciones title: Buscar Organizaciones
no_results: No se han encontrado organizaciones. no_results: No se han encontrado organizaciones.
proposals: hidden_proposals:
index: index:
filter: Filtro filter: Filtro
filters: filters:

View File

@@ -7,7 +7,7 @@ es-GT:
budget/investment: budget/investment:
one: "Proyecto de inversión" one: "Proyecto de inversión"
other: "Proyectos de inversión" other: "Proyectos de inversión"
budget/investment/milestone: milestone:
one: "hito" one: "hito"
other: "hitos" other: "hitos"
comment: comment:
@@ -104,7 +104,7 @@ es-GT:
organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre" organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre"
image: "Imagen descriptiva de la propuesta de inversión" image: "Imagen descriptiva de la propuesta de inversión"
image_title: "Título de la imagen" image_title: "Título de la imagen"
budget/investment/milestone: milestone:
title: "Título" title: "Título"
publication_date: "Fecha de publicación" publication_date: "Fecha de publicación"
budget/heading: budget/heading:

View File

@@ -711,7 +711,7 @@ es-GT:
search: search:
title: Buscar Organizaciones title: Buscar Organizaciones
no_results: No se han encontrado organizaciones. no_results: No se han encontrado organizaciones.
proposals: hidden_proposals:
index: index:
filter: Filtro filter: Filtro
filters: filters:

View File

@@ -7,7 +7,7 @@ es-HN:
budget/investment: budget/investment:
one: "Proyecto de inversión" one: "Proyecto de inversión"
other: "Proyectos de inversión" other: "Proyectos de inversión"
budget/investment/milestone: milestone:
one: "hito" one: "hito"
other: "hitos" other: "hitos"
comment: comment:
@@ -104,7 +104,7 @@ es-HN:
organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre" organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre"
image: "Imagen descriptiva de la propuesta de inversión" image: "Imagen descriptiva de la propuesta de inversión"
image_title: "Título de la imagen" image_title: "Título de la imagen"
budget/investment/milestone: milestone:
title: "Título" title: "Título"
publication_date: "Fecha de publicación" publication_date: "Fecha de publicación"
budget/heading: budget/heading:

View File

@@ -711,7 +711,7 @@ es-HN:
search: search:
title: Buscar Organizaciones title: Buscar Organizaciones
no_results: No se han encontrado organizaciones. no_results: No se han encontrado organizaciones.
proposals: hidden_proposals:
index: index:
filter: Filtro filter: Filtro
filters: filters:

View File

@@ -10,10 +10,10 @@ es-MX:
budget/investment: budget/investment:
one: "Proyecto de inversión" one: "Proyecto de inversión"
other: "Proyectos de inversión" other: "Proyectos de inversión"
budget/investment/milestone: milestone:
one: "hito" one: "hito"
other: "hitos" other: "hitos"
budget/investment/status: milestone/status:
one: "Estado de inversión" one: "Estado de inversión"
other: "Estados de inversión" other: "Estados de inversión"
comment: comment:
@@ -128,11 +128,11 @@ es-MX:
organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre" organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre"
image: "Imagen descriptiva de la propuesta de inversión" image: "Imagen descriptiva de la propuesta de inversión"
image_title: "Título de la imagen" image_title: "Título de la imagen"
budget/investment/milestone: milestone:
title: "Título" title: "Título"
description: "Descripción (opcional si cuenta con un estado asignado)" description: "Descripción (opcional si cuenta con un estado asignado)"
publication_date: "Fecha de publicación" publication_date: "Fecha de publicación"
budget/investment/status: milestone/status:
name: "Nombre" name: "Nombre"
description: "Descripción (opcional)" description: "Descripción (opcional)"
budget/heading: budget/heading:

View File

@@ -711,7 +711,7 @@ es-MX:
search: search:
title: Buscar Organizaciones title: Buscar Organizaciones
no_results: No se han encontrado organizaciones. no_results: No se han encontrado organizaciones.
proposals: hidden_proposals:
index: index:
filter: Filtro filter: Filtro
filters: filters:

View File

@@ -7,7 +7,7 @@ es-NI:
budget/investment: budget/investment:
one: "Proyecto de inversión" one: "Proyecto de inversión"
other: "Proyectos de inversión" other: "Proyectos de inversión"
budget/investment/milestone: milestone:
one: "hito" one: "hito"
other: "hitos" other: "hitos"
comment: comment:
@@ -104,7 +104,7 @@ es-NI:
organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre" organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre"
image: "Imagen descriptiva de la propuesta de inversión" image: "Imagen descriptiva de la propuesta de inversión"
image_title: "Título de la imagen" image_title: "Título de la imagen"
budget/investment/milestone: milestone:
title: "Título" title: "Título"
publication_date: "Fecha de publicación" publication_date: "Fecha de publicación"
budget/heading: budget/heading:

View File

@@ -711,7 +711,7 @@ es-NI:
search: search:
title: Buscar Organizaciones title: Buscar Organizaciones
no_results: No se han encontrado organizaciones. no_results: No se han encontrado organizaciones.
proposals: hidden_proposals:
index: index:
filter: Filtro filter: Filtro
filters: filters:

View File

@@ -7,7 +7,7 @@ es-PA:
budget/investment: budget/investment:
one: "Proyecto de inversión" one: "Proyecto de inversión"
other: "Proyectos de inversión" other: "Proyectos de inversión"
budget/investment/milestone: milestone:
one: "hito" one: "hito"
other: "hitos" other: "hitos"
comment: comment:
@@ -104,7 +104,7 @@ es-PA:
organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre" organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre"
image: "Imagen descriptiva de la propuesta de inversión" image: "Imagen descriptiva de la propuesta de inversión"
image_title: "Título de la imagen" image_title: "Título de la imagen"
budget/investment/milestone: milestone:
title: "Título" title: "Título"
publication_date: "Fecha de publicación" publication_date: "Fecha de publicación"
budget/heading: budget/heading:

View File

@@ -711,7 +711,7 @@ es-PA:
search: search:
title: Buscar Organizaciones title: Buscar Organizaciones
no_results: No se han encontrado organizaciones. no_results: No se han encontrado organizaciones.
proposals: hidden_proposals:
index: index:
filter: Filtro filter: Filtro
filters: filters:

View File

@@ -7,7 +7,7 @@ es-PE:
budget/investment: budget/investment:
one: "Proyecto de inversión" one: "Proyecto de inversión"
other: "Proyectos de inversión" other: "Proyectos de inversión"
budget/investment/milestone: milestone:
one: "hito" one: "hito"
other: "hitos" other: "hitos"
comment: comment:
@@ -104,7 +104,7 @@ es-PE:
organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre" organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre"
image: "Imagen descriptiva de la propuesta de inversión" image: "Imagen descriptiva de la propuesta de inversión"
image_title: "Título de la imagen" image_title: "Título de la imagen"
budget/investment/milestone: milestone:
title: "Título" title: "Título"
publication_date: "Fecha de publicación" publication_date: "Fecha de publicación"
budget/heading: budget/heading:

View File

@@ -711,7 +711,7 @@ es-PE:
search: search:
title: Buscar Organizaciones title: Buscar Organizaciones
no_results: No se han encontrado organizaciones. no_results: No se han encontrado organizaciones.
proposals: hidden_proposals:
index: index:
filter: Filtro filter: Filtro
filters: filters:

View File

@@ -7,7 +7,7 @@ es-PR:
budget/investment: budget/investment:
one: "Proyecto de inversión" one: "Proyecto de inversión"
other: "Proyectos de inversión" other: "Proyectos de inversión"
budget/investment/milestone: milestone:
one: "hito" one: "hito"
other: "hitos" other: "hitos"
comment: comment:
@@ -104,7 +104,7 @@ es-PR:
organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre" organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre"
image: "Imagen descriptiva de la propuesta de inversión" image: "Imagen descriptiva de la propuesta de inversión"
image_title: "Título de la imagen" image_title: "Título de la imagen"
budget/investment/milestone: milestone:
title: "Título" title: "Título"
publication_date: "Fecha de publicación" publication_date: "Fecha de publicación"
budget/heading: budget/heading:

View File

@@ -711,7 +711,7 @@ es-PR:
search: search:
title: Buscar Organizaciones title: Buscar Organizaciones
no_results: No se han encontrado organizaciones. no_results: No se han encontrado organizaciones.
proposals: hidden_proposals:
index: index:
filter: Filtro filter: Filtro
filters: filters:

View File

@@ -7,7 +7,7 @@ es-PY:
budget/investment: budget/investment:
one: "Proyecto de inversión" one: "Proyecto de inversión"
other: "Proyectos de inversión" other: "Proyectos de inversión"
budget/investment/milestone: milestone:
one: "hito" one: "hito"
other: "hitos" other: "hitos"
comment: comment:
@@ -104,7 +104,7 @@ es-PY:
organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre" organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre"
image: "Imagen descriptiva de la propuesta de inversión" image: "Imagen descriptiva de la propuesta de inversión"
image_title: "Título de la imagen" image_title: "Título de la imagen"
budget/investment/milestone: milestone:
title: "Título" title: "Título"
publication_date: "Fecha de publicación" publication_date: "Fecha de publicación"
budget/heading: budget/heading:

View File

@@ -711,7 +711,7 @@ es-PY:
search: search:
title: Buscar Organizaciones title: Buscar Organizaciones
no_results: No se han encontrado organizaciones. no_results: No se han encontrado organizaciones.
proposals: hidden_proposals:
index: index:
filter: Filtro filter: Filtro
filters: filters:

View File

@@ -7,7 +7,7 @@ es-SV:
budget/investment: budget/investment:
one: "Proyecto de inversión" one: "Proyecto de inversión"
other: "Proyectos de inversión" other: "Proyectos de inversión"
budget/investment/milestone: milestone:
one: "hito" one: "hito"
other: "hitos" other: "hitos"
comment: comment:
@@ -104,7 +104,7 @@ es-SV:
organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre" organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre"
image: "Imagen descriptiva de la propuesta de inversión" image: "Imagen descriptiva de la propuesta de inversión"
image_title: "Título de la imagen" image_title: "Título de la imagen"
budget/investment/milestone: milestone:
title: "Título" title: "Título"
publication_date: "Fecha de publicación" publication_date: "Fecha de publicación"
budget/heading: budget/heading:

View File

@@ -711,7 +711,7 @@ es-SV:
search: search:
title: Buscar Organizaciones title: Buscar Organizaciones
no_results: No se han encontrado organizaciones. no_results: No se han encontrado organizaciones.
proposals: hidden_proposals:
index: index:
filter: Filtro filter: Filtro
filters: filters:

View File

@@ -7,7 +7,7 @@ es-UY:
budget/investment: budget/investment:
one: "Proyecto de inversión" one: "Proyecto de inversión"
other: "Proyectos de inversión" other: "Proyectos de inversión"
budget/investment/milestone: milestone:
one: "hito" one: "hito"
other: "hitos" other: "hitos"
comment: comment:
@@ -104,7 +104,7 @@ es-UY:
organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre" organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre"
image: "Imagen descriptiva de la propuesta de inversión" image: "Imagen descriptiva de la propuesta de inversión"
image_title: "Título de la imagen" image_title: "Título de la imagen"
budget/investment/milestone: milestone:
title: "Título" title: "Título"
publication_date: "Fecha de publicación" publication_date: "Fecha de publicación"
budget/heading: budget/heading:

View File

@@ -711,7 +711,7 @@ es-UY:
search: search:
title: Buscar Organizaciones title: Buscar Organizaciones
no_results: No se han encontrado organizaciones. no_results: No se han encontrado organizaciones.
proposals: hidden_proposals:
index: index:
filter: Filtro filter: Filtro
filters: filters:

View File

@@ -7,7 +7,7 @@ es-VE:
budget/investment: budget/investment:
one: "Proyecto de inversión" one: "Proyecto de inversión"
other: "Proyectos de inversión" other: "Proyectos de inversión"
budget/investment/milestone: milestone:
one: "hito" one: "hito"
other: "hitos" other: "hitos"
comment: comment:
@@ -104,7 +104,7 @@ es-VE:
organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre" organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre"
image: "Imagen descriptiva de la propuesta de inversión" image: "Imagen descriptiva de la propuesta de inversión"
image_title: "Título de la imagen" image_title: "Título de la imagen"
budget/investment/milestone: milestone:
title: "Título" title: "Título"
publication_date: "Fecha de publicación" publication_date: "Fecha de publicación"
budget/heading: budget/heading:

View File

@@ -773,7 +773,7 @@ es-VE:
search: search:
title: Buscar Organizaciones title: Buscar Organizaciones
no_results: No se han encontrado organizaciones. no_results: No se han encontrado organizaciones.
proposals: hidden_proposals:
index: index:
filter: Filtro filter: Filtro
filters: filters:

View File

@@ -10,12 +10,12 @@ es:
budget/investment: budget/investment:
one: "Proyecto de gasto" one: "Proyecto de gasto"
other: "Proyectos de gasto" other: "Proyectos de gasto"
budget/investment/milestone: milestone:
one: "hito" one: "hito"
other: "hitos" other: "hitos"
budget/investment/status: milestone/status:
one: "Estado del proyecto" one: "Estado de seguimiento"
other: "Estados del proyecto" other: "Estados de seguimiento"
comment: comment:
one: "Comentario" one: "Comentario"
other: "Comentarios" other: "Comentarios"
@@ -82,9 +82,6 @@ es:
legislation/draft_versions: legislation/draft_versions:
one: "Versión borrador" one: "Versión borrador"
other: "Versiones borrador" other: "Versiones borrador"
legislation/draft_texts:
one: "Borrador"
other: "Borradores"
legislation/questions: legislation/questions:
one: "Pregunta" one: "Pregunta"
other: "Preguntas" other: "Preguntas"
@@ -131,12 +128,12 @@ es:
organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre" organization_name: "Si estás proponiendo en nombre de una organización o colectivo, o en nombre de más gente, escribe su nombre"
image: "Imagen descriptiva del proyecto de gasto" image: "Imagen descriptiva del proyecto de gasto"
image_title: "Título de la imagen" image_title: "Título de la imagen"
budget/investment/milestone: milestone:
status_id: "Estado actual del proyecto (opcional)" status_id: "Estado actual del proyecto (opcional)"
title: "Título" title: "Título"
description: "Descripción (opcional si hay un estado asignado)" description: "Descripción (opcional si hay un estado asignado)"
publication_date: "Fecha de publicación" publication_date: "Fecha de publicación"
budget/investment/status: milestone/status:
name: "Nombre" name: "Nombre"
description: "Descripción (opcional)" description: "Descripción (opcional)"
budget/heading: budget/heading:

Some files were not shown because too many files have changed in this diff Show More