diff --git a/Capfile b/Capfile
index 1a33b63f0..ea11eb9b6 100644
--- a/Capfile
+++ b/Capfile
@@ -12,6 +12,10 @@ require 'capistrano/delayed_job'
require 'whenever/capistrano'
require 'rvm1/capistrano3'
+#SCM: Git
+require "capistrano/scm/git"
+install_plugin Capistrano::SCM::Git
+
# Load custom tasks from `lib/capistrano/tasks` if you have any defined
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }
diff --git a/Gemfile b/Gemfile
index 13a0b3567..f9c2f54e5 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,20 +1,20 @@
source 'https://rubygems.org'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
-gem 'rails', '4.2.7.1'
+gem 'rails', '4.2.8'
# Use PostgreSQL
-gem 'pg', '~> 0.19.0'
+gem 'pg', '~> 0.20.0'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0', '>= 5.0.4'
# Use Uglifier as compressor for JavaScript assets
-gem 'uglifier', '>= 3.0.4'
+gem 'uglifier', '~> 3.1.9'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2.1'
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby
# Use jquery as the JavaScript library
-gem 'jquery-rails', '~> 4.2.2'
+gem 'jquery-rails', '~> 4.3.1'
gem 'jquery-ui-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
@@ -28,10 +28,10 @@ gem 'devise_security_extension'
# gem 'bcrypt', '~> 3.1.7'
gem 'omniauth'
gem 'omniauth-twitter'
-gem 'omniauth-facebook', '~> 3.0.0'
+gem 'omniauth-facebook', '~> 4.0.0'
gem 'omniauth-google-oauth2', '~> 0.4.0'
-gem 'kaminari'
+gem 'kaminari', '~> 1.0.1'
gem 'ancestry', '~> 2.2.2'
gem 'acts-as-taggable-on'
gem 'responders', '~> 2.3.0'
@@ -40,30 +40,30 @@ gem 'foundation_rails_helper', '~> 2.0.0'
gem 'acts_as_votable'
gem 'ckeditor', '~> 4.2.2'
gem 'invisible_captcha', '~> 0.9.2'
-gem 'cancancan'
-gem 'social-share-button'
+gem 'cancancan', '~> 1.16.0'
+gem 'social-share-button', '~> 0.10'
gem 'initialjs-rails', '0.2.0.4'
gem 'unicorn', '~> 5.2.0'
-gem 'paranoia', '~> 2.2.0'
+gem 'paranoia', '~> 2.2.1'
gem 'rinku', '~> 2.0.2', require: 'rails_rinku'
gem 'savon'
gem 'dalli'
-gem 'rollbar', '~> 2.14.0'
+gem 'rollbar', '~> 2.14.1'
gem 'delayed_job_active_record', '~> 4.1.0'
gem 'daemons'
gem 'devise-async'
-gem 'newrelic_rpm', '~> 3.17.2.327'
+gem 'newrelic_rpm', '~> 4.0.0.332'
gem 'whenever', require: false
gem 'pg_search'
-gem 'sitemap_generator'
+gem 'sitemap_generator', '~> 5.3.1'
-gem 'ahoy_matey', '~> 1.5.3'
-gem 'groupdate', '~> 3.1.0' # group temporary data
+gem 'ahoy_matey', '~> 1.5.5'
+gem 'groupdate', '~> 3.2.0' # group temporary data
gem 'tolk', '~> 2.0.0' # Web interface for translations
gem 'browser'
gem 'turnout', '~> 2.4.0'
-gem 'redcarpet'
+gem 'redcarpet', '~> 3.4.0'
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
@@ -72,28 +72,28 @@ group :development, :test do
gem 'spring'
gem 'spring-commands-rspec'
gem 'rspec-rails', '~> 3.5'
- gem 'capybara'
- gem 'factory_girl_rails'
+ gem 'capybara', '~> 2.13.0'
+ gem 'factory_girl_rails', '~> 4.8.0'
gem 'fuubar'
gem 'launchy'
gem 'quiet_assets'
- gem 'letter_opener_web', '~> 1.3.0'
- gem 'i18n-tasks'
- gem 'capistrano', '3.5.0', require: false
+ gem 'letter_opener_web', '~> 1.3.1'
+ gem 'i18n-tasks', '~> 0.9.12'
+ gem 'capistrano', '~> 3.8.0', require: false
gem 'capistrano-bundler', '~> 1.2', require: false
- gem "capistrano-rails", '1.1.8', require: false
+ gem "capistrano-rails", '~> 1.2.3', require: false
gem 'rvm1-capistrano3', require: false
- gem 'capistrano3-delayed-job', '~> 1.0'
- gem "bullet"
- gem "faker"
- gem 'rubocop', '~> 0.45.0', require: false
+ gem 'capistrano3-delayed-job', '~> 1.7.3'
+ gem "bullet", '~> 5.5.1'
+ gem "faker", '~> 1.7.3'
+ gem 'rubocop', '~> 0.47.1', require: false
gem 'knapsack'
end
group :test do
gem 'database_cleaner'
- gem 'poltergeist'
- gem 'coveralls', require: false
+ gem 'poltergeist', '~> 1.14.0'
+ gem 'coveralls', '~> 0.8.19', require: false
gem 'email_spec'
end
diff --git a/Gemfile.lock b/Gemfile.lock
index e2c21605c..6c117ea77 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,46 +1,46 @@
GEM
remote: https://rubygems.org/
specs:
- actionmailer (4.2.7.1)
- actionpack (= 4.2.7.1)
- actionview (= 4.2.7.1)
- activejob (= 4.2.7.1)
+ actionmailer (4.2.8)
+ actionpack (= 4.2.8)
+ actionview (= 4.2.8)
+ activejob (= 4.2.8)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 1.0, >= 1.0.5)
- actionpack (4.2.7.1)
- actionview (= 4.2.7.1)
- activesupport (= 4.2.7.1)
+ actionpack (4.2.8)
+ actionview (= 4.2.8)
+ activesupport (= 4.2.8)
rack (~> 1.6)
rack-test (~> 0.6.2)
rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
- actionview (4.2.7.1)
- activesupport (= 4.2.7.1)
+ actionview (4.2.8)
+ activesupport (= 4.2.8)
builder (~> 3.1)
erubis (~> 2.7.0)
rails-dom-testing (~> 1.0, >= 1.0.5)
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
- activejob (4.2.7.1)
- activesupport (= 4.2.7.1)
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
+ activejob (4.2.8)
+ activesupport (= 4.2.8)
globalid (>= 0.3.0)
- activemodel (4.2.7.1)
- activesupport (= 4.2.7.1)
+ activemodel (4.2.8)
+ activesupport (= 4.2.8)
builder (~> 3.1)
- activerecord (4.2.7.1)
- activemodel (= 4.2.7.1)
- activesupport (= 4.2.7.1)
+ activerecord (4.2.8)
+ activemodel (= 4.2.8)
+ activesupport (= 4.2.8)
arel (~> 6.0)
- activesupport (4.2.7.1)
+ activesupport (4.2.8)
i18n (~> 0.7)
- json (~> 1.7, >= 1.7.7)
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
- acts-as-taggable-on (3.5.0)
- activerecord (>= 3.2, < 5)
+ acts-as-taggable-on (4.0.0)
+ activerecord (>= 4.0)
acts_as_votable (0.10.0)
- addressable (2.4.0)
- ahoy_matey (1.5.3)
+ addressable (2.5.0)
+ public_suffix (~> 2.0, >= 2.0.2)
+ ahoy_matey (1.5.5)
addressable
browser (~> 2.0)
geocoder
@@ -51,14 +51,14 @@ GEM
safely_block (>= 0.1.1)
user_agent_parser
uuidtools
- airbrussh (1.1.1)
+ airbrussh (1.1.2)
sshkit (>= 1.6.1, != 1.7.0)
akami (1.3.1)
gyoku (>= 0.4.0)
nokogiri
ancestry (2.2.2)
activerecord (>= 3.0.0)
- arel (6.0.3)
+ arel (6.0.4)
ast (2.3.0)
babel-source (5.8.35)
babel-transpiler (0.7.0)
@@ -66,28 +66,27 @@ GEM
execjs (~> 2.0)
bcrypt (3.1.11)
browser (2.3.0)
- builder (3.2.2)
- bullet (5.4.2)
+ builder (3.2.3)
+ bullet (5.5.1)
activesupport (>= 3.0.0)
uniform_notifier (~> 1.10.0)
byebug (9.0.6)
- cancancan (1.15.0)
- capistrano (3.5.0)
+ cancancan (1.16.0)
+ capistrano (3.8.0)
airbrussh (>= 1.0.0)
- capistrano-harrow
i18n
rake (>= 10.0.0)
sshkit (>= 1.9.0)
capistrano-bundler (1.2.0)
capistrano (~> 3.1)
sshkit (~> 1.2)
- capistrano-harrow (0.5.3)
- capistrano-rails (1.1.8)
+ capistrano-rails (1.2.3)
capistrano (~> 3.1)
capistrano-bundler (~> 1.1)
- capistrano3-delayed-job (1.7.2)
+ capistrano3-delayed-job (1.7.3)
capistrano (~> 3.0, >= 3.0.0)
- capybara (2.7.1)
+ daemons (~> 1.2.4)
+ capybara (2.13.0)
addressable
mime-types (>= 1.16)
nokogiri (>= 1.3.3)
@@ -109,9 +108,9 @@ GEM
coffee-script (2.4.1)
coffee-script-source
execjs
- coffee-script-source (1.10.0)
- concurrent-ruby (1.0.4)
- coveralls (0.8.17)
+ coffee-script-source (1.12.2)
+ concurrent-ruby (1.0.5)
+ coveralls (0.8.19)
json (>= 1.8, < 3)
simplecov (~> 0.12.0)
term-ansicolor (~> 1.3)
@@ -151,14 +150,14 @@ GEM
errbase (0.0.3)
erubis (2.7.0)
execjs (2.7.0)
- factory_girl (4.7.0)
+ factory_girl (4.8.0)
activesupport (>= 3.0.0)
- factory_girl_rails (4.7.0)
- factory_girl (~> 4.7.0)
+ factory_girl_rails (4.8.0)
+ factory_girl (~> 4.8.0)
railties (>= 3.0.0)
- faker (1.6.6)
+ faker (1.7.3)
i18n (~> 0.5)
- faraday (0.9.2)
+ faraday (0.11.0)
multipart-post (>= 1.2, < 3)
foundation-rails (6.2.4.0)
railties (>= 3.1.0)
@@ -173,20 +172,20 @@ GEM
fuubar (2.2.0)
rspec-core (~> 3.0)
ruby-progressbar (~> 1.4)
- geocoder (1.4.1)
+ geocoder (1.4.3)
globalid (0.3.7)
activesupport (>= 4.1.0)
- groupdate (3.1.1)
+ groupdate (3.2.0)
activesupport (>= 3)
gyoku (1.3.1)
builder (>= 2.1.2)
- hashie (3.4.6)
+ hashie (3.5.5)
highline (1.7.8)
htmlentities (4.3.4)
httpi (2.4.1)
rack
- i18n (0.7.0)
- i18n-tasks (0.9.6)
+ i18n (0.8.1)
+ i18n-tasks (0.9.12)
activesupport (>= 4.0.2)
ast (>= 2.1.0)
easy_translate (>= 0.5.0)
@@ -200,26 +199,35 @@ GEM
railties (>= 3.1, < 6.0)
invisible_captcha (0.9.2)
rails (>= 3.2.0)
- jquery-rails (4.2.2)
+ jquery-rails (4.3.1)
rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
- jquery-ui-rails (5.0.5)
+ jquery-ui-rails (6.0.1)
railties (>= 3.2.16)
- json (1.8.3)
- jwt (1.5.4)
- kaminari (0.17.0)
- actionpack (>= 3.0.0)
- activesupport (>= 3.0.0)
+ json (2.0.3)
+ jwt (1.5.6)
+ kaminari (1.0.1)
+ activesupport (>= 4.1.0)
+ kaminari-actionview (= 1.0.1)
+ kaminari-activerecord (= 1.0.1)
+ kaminari-core (= 1.0.1)
+ kaminari-actionview (1.0.1)
+ actionview
+ kaminari-core (= 1.0.1)
+ kaminari-activerecord (1.0.1)
+ activerecord
+ kaminari-core (= 1.0.1)
+ kaminari-core (1.0.1)
kgio (2.11.0)
- knapsack (1.13.1)
+ knapsack (1.13.2)
rake
timecop (>= 0.1.0)
launchy (2.4.3)
addressable (~> 2.3)
letter_opener (1.4.1)
launchy (~> 2.2)
- letter_opener_web (1.3.0)
+ letter_opener_web (1.3.1)
actionmailer (>= 3.2)
letter_opener (~> 1.0)
railties (>= 3.2)
@@ -233,26 +241,26 @@ GEM
mini_portile2 (2.1.0)
minitest (5.10.1)
multi_json (1.12.1)
- multi_xml (0.5.5)
+ multi_xml (0.6.0)
multipart-post (2.0.0)
net-scp (1.2.1)
net-ssh (>= 2.6.5)
- net-ssh (3.2.0)
- newrelic_rpm (3.17.2.327)
- nokogiri (1.6.8.1)
+ net-ssh (4.1.0)
+ newrelic_rpm (4.0.0.332)
+ nokogiri (1.7.1)
mini_portile2 (~> 2.1.0)
nori (2.6.0)
- oauth (0.5.0)
- oauth2 (1.0.0)
- faraday (>= 0.8, < 0.10)
+ oauth (0.5.1)
+ oauth2 (1.3.1)
+ faraday (>= 0.8, < 0.12)
jwt (~> 1.0)
multi_json (~> 1.3)
multi_xml (~> 0.5)
- rack (~> 1.2)
- omniauth (1.3.1)
- hashie (>= 1.2, < 4)
- rack (>= 1.0, < 3)
- omniauth-facebook (3.0.0)
+ rack (>= 1.2, < 3)
+ omniauth (1.6.1)
+ hashie (>= 3.4.6, < 3.6.0)
+ rack (>= 1.6.2, < 3)
+ omniauth-facebook (4.0.0)
omniauth-oauth2 (~> 1.2)
omniauth-google-oauth2 (0.4.1)
jwt (~> 1.5.2)
@@ -265,24 +273,25 @@ GEM
omniauth-oauth2 (1.4.0)
oauth2 (~> 1.0)
omniauth (~> 1.2)
- omniauth-twitter (1.2.1)
- json (~> 1.3)
+ omniauth-twitter (1.4.0)
omniauth-oauth (~> 1.1)
+ rack
orm_adapter (0.5.0)
- paranoia (2.2.0)
+ paranoia (2.2.1)
activerecord (>= 4.0, < 5.1)
- parser (2.3.3.1)
+ parser (2.4.0.0)
ast (~> 2.2)
- pg (0.19.0)
- pg_search (1.0.6)
- activerecord (>= 3.1)
- activesupport (>= 3.1)
- arel
- poltergeist (1.10.0)
+ pg (0.20.0)
+ pg_search (2.0.1)
+ activerecord (>= 4.2)
+ activesupport (>= 4.2)
+ arel (>= 6)
+ poltergeist (1.14.0)
capybara (~> 2.1)
cliver (~> 0.3.1)
websocket-driver (>= 0.2.0)
powerpack (0.1.1)
+ public_suffix (2.0.5)
quiet_assets (1.1.0)
railties (>= 3.1, < 5.0)
rack (1.6.5)
@@ -292,40 +301,40 @@ GEM
rack
rack-test (0.6.3)
rack (>= 1.0)
- rails (4.2.7.1)
- actionmailer (= 4.2.7.1)
- actionpack (= 4.2.7.1)
- actionview (= 4.2.7.1)
- activejob (= 4.2.7.1)
- activemodel (= 4.2.7.1)
- activerecord (= 4.2.7.1)
- activesupport (= 4.2.7.1)
+ rails (4.2.8)
+ actionmailer (= 4.2.8)
+ actionpack (= 4.2.8)
+ actionview (= 4.2.8)
+ activejob (= 4.2.8)
+ activemodel (= 4.2.8)
+ activerecord (= 4.2.8)
+ activesupport (= 4.2.8)
bundler (>= 1.3.0, < 2.0)
- railties (= 4.2.7.1)
+ railties (= 4.2.8)
sprockets-rails
rails-deprecated_sanitizer (1.0.3)
activesupport (>= 4.2.0.alpha)
- rails-dom-testing (1.0.7)
+ rails-dom-testing (1.0.8)
activesupport (>= 4.2.0.beta, < 5.0)
- nokogiri (~> 1.6.0)
+ nokogiri (~> 1.6)
rails-deprecated_sanitizer (>= 1.0.1)
rails-html-sanitizer (1.0.3)
loofah (~> 2.0)
- railties (4.2.7.1)
- actionpack (= 4.2.7.1)
- activesupport (= 4.2.7.1)
+ railties (4.2.8)
+ actionpack (= 4.2.8)
+ activesupport (= 4.2.8)
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
- rainbow (2.1.0)
+ rainbow (2.2.1)
raindrops (0.17.0)
rake (12.0.0)
- redcarpet (3.3.4)
+ redcarpet (3.4.0)
referer-parser (0.3.0)
- request_store (1.3.1)
+ request_store (1.3.2)
responders (2.3.0)
railties (>= 4.2.0, < 5.1)
rinku (2.0.2)
- rollbar (2.14.0)
+ rollbar (2.14.1)
multi_json
rspec-core (3.5.4)
rspec-support (~> 3.5.0)
@@ -344,8 +353,8 @@ GEM
rspec-mocks (~> 3.5.0)
rspec-support (~> 3.5.0)
rspec-support (3.5.0)
- rubocop (0.45.0)
- parser (>= 2.3.1.1, < 3.0)
+ rubocop (0.47.1)
+ parser (>= 2.3.3.1, < 3.0)
powerpack (~> 0.1)
rainbow (>= 1.99.1, < 3.0)
ruby-progressbar (~> 1.7)
@@ -355,9 +364,9 @@ GEM
capistrano (~> 3.0)
sshkit (>= 1.2)
safe_yaml (1.0.4)
- safely_block (0.1.1)
+ safely_block (0.2.0)
errbase
- sass (3.4.22)
+ sass (3.4.23)
sass-rails (5.0.6)
railties (>= 4.0.0, < 6)
sass (~> 3.1)
@@ -377,12 +386,12 @@ GEM
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
simplecov-html (0.10.0)
- sitemap_generator (5.2.0)
+ sitemap_generator (5.3.1)
builder (~> 3.0)
- social-share-button (0.3.1)
+ social-share-button (0.10.0)
coffee-rails
- sass-rails
- spring (1.7.2)
+ spring (2.0.1)
+ activesupport (>= 4.2)
spring-commands-rspec (1.0.4)
spring (>= 0.9.1)
sprockets (3.7.1)
@@ -396,7 +405,7 @@ GEM
actionpack (>= 4.0)
activesupport (>= 4.0)
sprockets (>= 3.0.0)
- sshkit (1.11.4)
+ sshkit (1.12.0)
net-scp (>= 1.1.2)
net-ssh (>= 2.8.0)
term-ansicolor (1.4.0)
@@ -405,10 +414,10 @@ GEM
unicode-display_width (~> 1.1.1)
thor (0.19.4)
thread (0.2.2)
- thread_safe (0.3.5)
- tilt (2.0.5)
+ thread_safe (0.3.6)
+ tilt (2.0.7)
timecop (0.8.1)
- tins (1.13.0)
+ tins (1.13.2)
tolk (2.0.0)
rails (>= 4.0)
safe_yaml (>= 0.8.6)
@@ -421,9 +430,9 @@ GEM
tilt (>= 1.4, < 3)
tzinfo (1.2.2)
thread_safe (~> 0.1)
- uglifier (3.0.4)
+ uglifier (3.1.9)
execjs (>= 0.3.0, < 3)
- unicode-display_width (1.1.1)
+ unicode-display_width (1.1.3)
unicorn (5.2.0)
kgio (~> 2.6)
raindrops (~> 0.7)
@@ -439,7 +448,7 @@ GEM
activemodel (>= 4.2)
debug_inspector
railties (>= 4.2)
- websocket-driver (0.6.4)
+ websocket-driver (0.6.5)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.2)
whenever (0.9.7)
@@ -453,20 +462,20 @@ PLATFORMS
DEPENDENCIES
acts-as-taggable-on
acts_as_votable
- ahoy_matey (~> 1.5.3)
+ ahoy_matey (~> 1.5.5)
ancestry (~> 2.2.2)
browser
- bullet
+ bullet (~> 5.5.1)
byebug
- cancancan
- capistrano (= 3.5.0)
+ cancancan (~> 1.16.0)
+ capistrano (~> 3.8.0)
capistrano-bundler (~> 1.2)
- capistrano-rails (= 1.1.8)
- capistrano3-delayed-job (~> 1.0)
- capybara
+ capistrano-rails (~> 1.2.3)
+ capistrano3-delayed-job (~> 1.7.3)
+ capybara (~> 2.13.0)
ckeditor (~> 4.2.2)
coffee-rails (~> 4.2.1)
- coveralls
+ coveralls (~> 0.8.19)
daemons
dalli
database_cleaner
@@ -475,50 +484,53 @@ DEPENDENCIES
devise-async
devise_security_extension
email_spec
- factory_girl_rails
- faker
+ factory_girl_rails (~> 4.8.0)
+ faker (~> 1.7.3)
foundation-rails (~> 6.2.4.0)
foundation_rails_helper (~> 2.0.0)
fuubar
- groupdate (~> 3.1.0)
- i18n-tasks
+ groupdate (~> 3.2.0)
+ i18n-tasks (~> 0.9.12)
initialjs-rails (= 0.2.0.4)
invisible_captcha (~> 0.9.2)
- jquery-rails (~> 4.2.2)
+ jquery-rails (~> 4.3.1)
jquery-ui-rails
- kaminari
+ kaminari (~> 1.0.1)
knapsack
launchy
- letter_opener_web (~> 1.3.0)
- newrelic_rpm (~> 3.17.2.327)
+ letter_opener_web (~> 1.3.1)
+ newrelic_rpm (~> 4.0.0.332)
omniauth
- omniauth-facebook (~> 3.0.0)
+ omniauth-facebook (~> 4.0.0)
omniauth-google-oauth2 (~> 0.4.0)
omniauth-twitter
- paranoia (~> 2.2.0)
- pg (~> 0.19.0)
+ paranoia (~> 2.2.1)
+ pg (~> 0.20.0)
pg_search
- poltergeist
+ poltergeist (~> 1.14.0)
quiet_assets
- rails (= 4.2.7.1)
- redcarpet
+ rails (= 4.2.8)
+ redcarpet (~> 3.4.0)
responders (~> 2.3.0)
rinku (~> 2.0.2)
- rollbar (~> 2.14.0)
+ rollbar (~> 2.14.1)
rspec-rails (~> 3.5)
- rubocop (~> 0.45.0)
+ rubocop (~> 0.47.1)
rvm1-capistrano3
sass-rails (~> 5.0, >= 5.0.4)
savon
- sitemap_generator
- social-share-button
+ sitemap_generator (~> 5.3.1)
+ social-share-button (~> 0.10)
spring
spring-commands-rspec
sprockets (~> 3.7.1)
tolk (~> 2.0.0)
turbolinks
turnout (~> 2.4.0)
- uglifier (>= 3.0.4)
+ uglifier (~> 3.1.9)
unicorn (~> 5.2.0)
web-console (= 3.3.0)
whenever
+
+BUNDLED WITH
+ 1.13.7
diff --git a/README.md b/README.md
index c62fcfeec..20ed21003 100644
--- a/README.md
+++ b/README.md
@@ -1,15 +1,19 @@
-![Logo of Consul]
-(https://raw.githubusercontent.com/consul/consul/master/public/consul_logo.png)
+
# Consul
Citizen Participation and Open Government Application
-[](https://gitter.im/consul/consul?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[](https://travis-ci.org/consul/consul)
[](https://codeclimate.com/github/consul/consul)
[](https://gemnasium.com/consul/consul)
[](https://coveralls.io/github/consul/consul?branch=master)
+[](http://www.gnu.org/licenses/agpl-3.0)
+
+[](https://www.w3.org/WAI/eval/Overview)
+[](https://rocketvalidator.com/opensource)
+
+[](https://gitter.im/consul/consul?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
This is the opensource code repository of the eParticipation website originally developed for the Madrid City government eParticipation website
diff --git a/README_ES.md b/README_ES.md
index 1b197e983..2c1e362c3 100644
--- a/README_ES.md
+++ b/README_ES.md
@@ -1,15 +1,20 @@
-![Logotipo de Consul]
-(https://raw.githubusercontent.com/consul/consul/master/public/consul_logo.png)
+
# Consul
Aplicación de Participación Ciudadana y Gobierno Abierto
-[](https://gitter.im/consul/consul?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[](https://travis-ci.org/consul/consul)
[](https://codeclimate.com/github/consul/consul)
[](https://gemnasium.com/consul/consul)
[](https://coveralls.io/github/consul/consul?branch=master)
+[](http://www.gnu.org/licenses/agpl-3.0)
+
+[](https://www.w3.org/WAI/eval/Overview)
+[](https://rocketvalidator.com/opensource)
+
+[](https://gitter.im/consul/consul?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+
Este es el repositorio de código abierto de la Aplicación de Participación Ciudadana Consul, creada originariamente por el Ayuntamiento de Madrid.
diff --git a/app/assets/fonts/icons.eot b/app/assets/fonts/icons.eot
index c3c5d6289..60cfbaddb 100644
Binary files a/app/assets/fonts/icons.eot and b/app/assets/fonts/icons.eot differ
diff --git a/app/assets/fonts/icons.svg b/app/assets/fonts/icons.svg
index a548d9575..f45adea5a 100644
--- a/app/assets/fonts/icons.svg
+++ b/app/assets/fonts/icons.svg
@@ -56,6 +56,9 @@
-
+
+
+
+
diff --git a/app/assets/fonts/icons.ttf b/app/assets/fonts/icons.ttf
index 6f938f863..8f791759e 100644
Binary files a/app/assets/fonts/icons.ttf and b/app/assets/fonts/icons.ttf differ
diff --git a/app/assets/fonts/icons.woff b/app/assets/fonts/icons.woff
index f3c31e804..0eef00837 100644
Binary files a/app/assets/fonts/icons.woff and b/app/assets/fonts/icons.woff differ
diff --git a/app/assets/images/more_info/budgets_en.png b/app/assets/images/more_info/budgets_en.png
new file mode 100644
index 000000000..1c1002145
Binary files /dev/null and b/app/assets/images/more_info/budgets_en.png differ
diff --git a/app/assets/images/more_info/budgets_es.png b/app/assets/images/more_info/budgets_es.png
new file mode 100644
index 000000000..89d93947b
Binary files /dev/null and b/app/assets/images/more_info/budgets_es.png differ
diff --git a/app/assets/images/more_info/budgets_fr.png b/app/assets/images/more_info/budgets_fr.png
new file mode 100644
index 000000000..1c1002145
Binary files /dev/null and b/app/assets/images/more_info/budgets_fr.png differ
diff --git a/app/assets/images/more_info/budgets_pt-BR.png b/app/assets/images/more_info/budgets_pt-BR.png
new file mode 100644
index 000000000..1c1002145
Binary files /dev/null and b/app/assets/images/more_info/budgets_pt-BR.png differ
diff --git a/app/assets/images/more_info/debates.png b/app/assets/images/more_info/debates.png
new file mode 100644
index 000000000..30b195668
Binary files /dev/null and b/app/assets/images/more_info/debates.png differ
diff --git a/app/assets/images/more_info/proposals_en.png b/app/assets/images/more_info/proposals_en.png
new file mode 100644
index 000000000..60357f222
Binary files /dev/null and b/app/assets/images/more_info/proposals_en.png differ
diff --git a/app/assets/images/more_info/proposals_es.png b/app/assets/images/more_info/proposals_es.png
new file mode 100644
index 000000000..3466949bb
Binary files /dev/null and b/app/assets/images/more_info/proposals_es.png differ
diff --git a/app/assets/images/more_info/proposals_fr.png b/app/assets/images/more_info/proposals_fr.png
new file mode 100644
index 000000000..60357f222
Binary files /dev/null and b/app/assets/images/more_info/proposals_fr.png differ
diff --git a/app/assets/images/more_info/proposals_pt-BR.png b/app/assets/images/more_info/proposals_pt-BR.png
new file mode 100644
index 000000000..60357f222
Binary files /dev/null and b/app/assets/images/more_info/proposals_pt-BR.png differ
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
index 8b2e2674b..928f06edd 100644
--- a/app/assets/javascripts/application.js
+++ b/app/assets/javascripts/application.js
@@ -12,8 +12,8 @@
//
//= require jquery
//= require jquery_ujs
-//= require jquery-ui/datepicker
-//= require jquery-ui/datepicker-es
+//= require jquery-ui/widgets/datepicker
+//= require jquery-ui/i18n/datepicker-es
//= require foundation
//= require turbolinks
//= require ckeditor/loader
diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss
index 36e055a4e..0720c103f 100644
--- a/app/assets/stylesheets/application.scss
+++ b/app/assets/stylesheets/application.scss
@@ -6,6 +6,7 @@
@import "admin";
@import "layout";
@import "participation";
+@import "pages";
@import "custom";
@import "c3";
@import "annotator.min";
diff --git a/app/assets/stylesheets/icons.scss b/app/assets/stylesheets/icons.scss
index 33673486d..afbcc8bdd 100644
--- a/app/assets/stylesheets/icons.scss
+++ b/app/assets/stylesheets/icons.scss
@@ -190,3 +190,6 @@
.icon-checkmark-circle:before {
content: "\59";
}
+.icon-telegram:before {
+ content: "\31";
+}
diff --git a/app/assets/stylesheets/layout.scss b/app/assets/stylesheets/layout.scss
index 10401c131..94d403528 100644
--- a/app/assets/stylesheets/layout.scss
+++ b/app/assets/stylesheets/layout.scss
@@ -70,6 +70,11 @@ a {
}
}
+.button.hollow {
+ border: 1px solid $link;
+ color: $link;
+}
+
.postfix.button {
padding: 0;
}
@@ -1128,11 +1133,12 @@ img.avatar, img.admin-avatar, img.moderator-avatar, img.initialjs-avatar {
// --------------------
[class^="level-"] {
- color: white;
+ color: black;
}
.is-author {
- background: #008CCF;
+ background: #00A5F1;
+ color: black;
}
.is-association {
@@ -1190,7 +1196,11 @@ table {
.button.button-twitter,
.button.button-facebook,
-.button.button-google {
+.button.button-google,
+.button.button-telegram {
+ background: white;
+ color: $text;
+ font-weight: bold;
height: $line-height*2;
line-height: $line-height*2;
padding: 0;
@@ -1198,9 +1208,11 @@ table {
}
.button.button-twitter {
- background: #45B0E3;
+ background: #ECF7FC;
+ border-left: 3px solid #45B0E3;
&:before {
+ color: #45B0E3;
content: "f";
font-family: "icons" !important;
font-size: rem-calc(24);
@@ -1238,9 +1250,11 @@ table {
}
.button.button-facebook {
- background: #3B5998;
+ background: #EBEEF4;
+ border-left: 3px solid #3B5998;
&:before {
+ color: #3B5998;
content: "A";
font-family: "icons" !important;
font-size: rem-calc(24);
@@ -1278,9 +1292,11 @@ table {
}
.button.button-google {
- background: #DE4C34;
+ background: #FCEDEA;
+ border-left: 3px solid #DE4C34;
&:before {
+ color: #DE4C34;
content: "B";
font-family: "icons" !important;
font-size: rem-calc(24);
@@ -1317,6 +1333,48 @@ table {
}
}
+.button.button-telegram {
+ background: #ECF7FC;
+ border-left: 3px solid #0088cc;
+
+ &:before {
+ color: #0088cc;
+ content: "1";
+ font-family: "icons" !important;
+ font-size: rem-calc(24);
+ left: 0;
+ line-height: $line-height*2;
+ padding: 0 rem-calc(20);
+ position: absolute;
+ top: 0;
+ }
+}
+
+.ssb-telegram {
+ background: #0088cc;
+ background-image: none !important;
+ color: white;
+ height: $line-height*2 !important;
+ position: relative;
+ width: $line-height*2 !important;
+
+ &:before {
+ content: "1";
+ font-family: "icons" !important;
+ font-size: rem-calc(24);
+ left: 50%;
+ line-height: $line-height*2;
+ margin-left: rem-calc(-11);
+ position: absolute;
+ top: 0;
+ }
+
+ &:hover, &:focus {
+ background: white;
+ color: #40A2D1;
+ }
+}
+
.social {
a {
@@ -1408,6 +1466,30 @@ table {
color: #CE3E26;
}
}
+
+ .ssb-telegram {
+ background: #0088cc;
+ color: white;
+ height: $line-height;
+ position: relative;
+ width: $line-height*2;
+
+ &:before {
+ content: "A";
+ font-family: "icons" !important;
+ font-size: rem-calc(24);
+ left: 50%;
+ line-height: $line-height*2;
+ margin-left: rem-calc(-11);
+ position: absolute;
+ top: 0;
+ }
+
+ &:hover, &:focus {
+ background: white;
+ color: #40A2D1;
+ }
+ }
}
// 13. Pages
diff --git a/app/assets/stylesheets/pages.scss b/app/assets/stylesheets/pages.scss
new file mode 100644
index 000000000..f8bf6c7cd
--- /dev/null
+++ b/app/assets/stylesheets/pages.scss
@@ -0,0 +1,111 @@
+// Table of Contents
+//
+// 01. Header
+// 02. Navigation
+// 03. Content
+// 04. Sidebar
+//
+
+// 01. Header
+// ----------------------
+
+.jumbo {
+ margin-bottom: $line-height;
+ margin-top: rem-calc(-24);
+ padding-bottom: $line-height;
+ padding-top: $line-height;
+
+ &.light {
+ background: #ECF0F1;
+ }
+}
+
+.lead {
+ font-size: rem-calc(24);
+}
+
+// 03. Navigation
+// ----------------------
+
+.menu-pages {
+ list-style-type: none;
+ margin: 0;
+
+ li {
+ display: block;
+
+ @include breakpoint(medium) {
+ display: inline-block;
+ margin-right: $line-height/2;
+ }
+ }
+}
+
+// 03. Content
+// ----------------------
+
+.more-info-content {
+
+ h3 {
+ color: $brand;
+ }
+
+ .additional-info {
+ margin-bottom: $line-height;
+ }
+
+ a:not(.button) {
+ text-decoration: underline;
+ }
+
+ figure {
+ margin: 0;
+ text-align: center;
+
+ figcaption {
+ font-size: $small-font-size;
+ font-style: italic;
+ }
+ }
+
+ ul.features {
+ list-style-type: circle;
+ margin-left: $line-height;
+
+ @include breakpoint(medium) {
+ margin: $line-height 0 $line-height $line-height*2.5;
+ }
+
+ li {
+ margin-bottom: $line-height
+ }
+ }
+
+ .section-content {
+ border-top: 1px solid $medium-gray;
+ padding-bottom: $line-height*2;
+ padding-top: $line-height*2;
+
+ &:first-child {
+ border-top: 0;
+ padding-top: 0;
+ }
+ }
+}
+
+// 04. Sidebar
+// ----------------------
+
+.more-info-sidebar {
+
+ .sidebar-card {
+ border: 1px solid $border;
+ margin-bottom: $line-height;
+ padding: $line-height/2;
+
+ &.light {
+ background: #ECF0F1;
+ border: 0;
+ }
+ }
+}
diff --git a/app/assets/stylesheets/participation.scss b/app/assets/stylesheets/participation.scss
index 66b4aca3d..ad413925b 100644
--- a/app/assets/stylesheets/participation.scss
+++ b/app/assets/stylesheets/participation.scss
@@ -457,7 +457,7 @@
}
.bullet {
- color: $border;
+ color: $text;
}
.investment-project-show p, .budget-investment-show p {
@@ -976,6 +976,10 @@
&.social-share-button-google_plus:hover {
color: #CE3E26;
}
+
+ &.social-share-button-telegram:hover {
+ color: #CE3E26;
+ }
}
}
diff --git a/app/controllers/budgets/investments_controller.rb b/app/controllers/budgets/investments_controller.rb
index 0a5e78eef..7f9c6e7ee 100644
--- a/app/controllers/budgets/investments_controller.rb
+++ b/app/controllers/budgets/investments_controller.rb
@@ -55,7 +55,7 @@ module Budgets
end
def destroy
- investment.destroy
+ @investment.destroy
redirect_to user_path(current_user, filter: 'budget_investments'), notice: t('flash.actions.destroy.budget_investment')
end
diff --git a/app/controllers/concerns/commentable_actions.rb b/app/controllers/concerns/commentable_actions.rb
index ef5e60dcb..ee69ac809 100644
--- a/app/controllers/concerns/commentable_actions.rb
+++ b/app/controllers/concerns/commentable_actions.rb
@@ -129,16 +129,16 @@ module CommentableActions
when '4'
1.year.ago
else
- Date.parse(params[:advanced_search][:date_min]) rescue nil
+ Date.parse(params[:advanced_search][:date_min]) rescue 100.years.ago
end
end
def search_finish_date
- params[:advanced_search][:date_max].try(:to_date) || Date.today
+ (params[:advanced_search][:date_max].to_date rescue Date.today) || Date.today
end
def search_date_range
- search_start_date.beginning_of_day..search_finish_date.end_of_day
+ [100.years.ago, search_start_date].max.beginning_of_day..[search_finish_date, Date.today].min.end_of_day
end
def set_search_order
diff --git a/app/controllers/management/budgets_controller.rb b/app/controllers/management/budgets_controller.rb
index c5cfdee76..dd7259c99 100644
--- a/app/controllers/management/budgets_controller.rb
+++ b/app/controllers/management/budgets_controller.rb
@@ -7,6 +7,11 @@ class Management::BudgetsController < Management::BaseController
def create_investments
@budgets = Budget.accepting.order(created_at: :desc).page(params[:page])
+
+ if current_manager_administrator?
+ @budgets += Budget.reviewing.order(created_at: :desc) +
+ Budget.selecting.order(created_at: :desc)
+ end
end
def support_investments
@@ -23,4 +28,8 @@ class Management::BudgetsController < Management::BaseController
check_verified_user t("management.budget_investments.alert.unverified_user")
end
+ def current_manager_administrator?
+ session[:manager]["login"].match("admin")
+ end
+
end
diff --git a/app/controllers/management/users_controller.rb b/app/controllers/management/users_controller.rb
index 53004a838..8d3d148fa 100644
--- a/app/controllers/management/users_controller.rb
+++ b/app/controllers/management/users_controller.rb
@@ -32,7 +32,7 @@ class Management::UsersController < Management::BaseController
private
def user_params
- params.require(:user).permit(:document_type, :document_number, :username, :email)
+ params.require(:user).permit(:document_type, :document_number, :username, :email, :date_of_birth)
end
def destroy_session
diff --git a/app/helpers/budgets_helper.rb b/app/helpers/budgets_helper.rb
index 6b37d4e4e..3a07f0393 100644
--- a/app/helpers/budgets_helper.rb
+++ b/app/helpers/budgets_helper.rb
@@ -38,4 +38,8 @@ module BudgetsHelper
def current_ballot
Budget::Ballot.where(user: current_user, budget: @budget).first
end
+
+ def investment_tags_select_options
+ Budget::Investment.tags_on(:valuation).order(:name).select(:name).distinct
+ end
end
diff --git a/app/helpers/embed_videos_helper.rb b/app/helpers/embed_videos_helper.rb
index 8633549f4..22b1d878f 100644
--- a/app/helpers/embed_videos_helper.rb
+++ b/app/helpers/embed_videos_helper.rb
@@ -2,6 +2,7 @@ module EmbedVideosHelper
def embedded_video_code
link = @proposal.video_url
+ title = t('proposals.show.embed_video_title', proposal: @proposal.title)
if link.match(/vimeo.*/)
server = "Vimeo"
elsif link.match(/youtu*.*/)
@@ -21,7 +22,7 @@ module EmbedVideosHelper
end
if match and match[2]
- ''
+ ''
else
''
end
diff --git a/app/helpers/signature_sheets_helper.rb b/app/helpers/signature_sheets_helper.rb
index acd75a5ab..8e75dccfd 100644
--- a/app/helpers/signature_sheets_helper.rb
+++ b/app/helpers/signature_sheets_helper.rb
@@ -2,7 +2,7 @@ module SignatureSheetsHelper
def signable_options
[[t("activerecord.models.proposal", count: 1), Proposal],
- [t("activerecord.models.spending_proposal", count: 1), SpendingProposal]]
+ [t("activerecord.models.budget/investment", count: 1), Budget::Investment]]
end
end
\ No newline at end of file
diff --git a/app/models/abilities/common.rb b/app/models/abilities/common.rb
index b5d142c94..6a8ef594c 100644
--- a/app/models/abilities/common.rb
+++ b/app/models/abilities/common.rb
@@ -46,6 +46,7 @@ module Abilities
can :create, SpendingProposal
can :create, Budget::Investment, budget: { phase: "accepting" }
+ can :destroy, Budget::Investment, budget: { phase: ["accepting", "reviewing"] }, author_id: user.id
can :vote, Budget::Investment, budget: { phase: "selecting" }
can [:show, :create], Budget::Ballot, budget: { phase: "balloting" }
can [:create, :destroy], Budget::Ballot::Line, budget: { phase: "balloting" }
diff --git a/app/models/budget/investment.rb b/app/models/budget/investment.rb
index 100433707..4bfd038c3 100644
--- a/app/models/budget/investment.rb
+++ b/app/models/budget/investment.rb
@@ -25,6 +25,7 @@ class Budget
validates :description, presence: true
validates :heading_id, presence: true
validates_presence_of :unfeasibility_explanation, if: :unfeasibility_explanation_required?
+ validates_presence_of :price, if: :price_required?
validates :title, length: { in: 4..Budget::Investment.title_max_length }
validates :description, length: { maximum: Budget::Investment.description_max_length }
@@ -136,6 +137,10 @@ class Budget
unfeasible? && valuation_finished?
end
+ def price_required?
+ feasible? && valuation_finished?
+ end
+
def unfeasible_email_pending?
unfeasible_email_sent_at.blank? && unfeasible? && valuation_finished?
end
@@ -225,7 +230,7 @@ class Budget
def should_show_aside?
(budget.selecting? && !unfeasible?) ||
(budget.balloting? && feasible?) ||
- (budget.valuating? && feasible?)
+ (budget.valuating? && !unfeasible?)
end
def should_show_votes?
@@ -259,7 +264,7 @@ class Budget
private
def set_denormalized_ids
- self.group_id ||= self.heading.try(:group_id)
+ self.group_id = self.heading.try(:group_id) if self.heading_id_changed?
self.budget_id ||= self.heading.try(:group).try(:budget_id)
end
end
diff --git a/app/models/signature.rb b/app/models/signature.rb
index e75039355..543965aed 100644
--- a/app/models/signature.rb
+++ b/app/models/signature.rb
@@ -12,35 +12,30 @@ class Signature < ActiveRecord::Base
before_validation :clean_document_number
- def verified?
- user_exists? || in_census?
- end
-
def verify
- if verified?
- assign_vote
- mark_as_verified
- end
- end
-
- def assign_vote
if user_exists?
assign_vote_to_user
- else
+ mark_as_verified
+ elsif in_census?
create_user
assign_vote_to_user
+ mark_as_verified
end
end
def assign_vote_to_user
set_user
- signable.register_vote(user, "yes")
+ if signable.is_a? Budget::Investment
+ signable.vote_by(voter: user, vote: 'yes') if [nil, :no_selecting_allowed].include?(signable.reason_for_not_being_selectable_by(user))
+ else
+ signable.register_vote(user, "yes")
+ end
assign_signature_to_vote
end
def assign_signature_to_vote
vote = Vote.where(votable: signable, voter: user).first
- vote.update(signature: self)
+ vote.update(signature: self) if vote
end
def user_exists?
@@ -55,7 +50,10 @@ class Signature < ActiveRecord::Base
erased_at: Time.current,
password: random_password,
terms_of_service: '1',
- email: nil
+ email: nil,
+ date_of_birth: @census_api_response.date_of_birth,
+ gender: @census_api_response.gender,
+ geozone: Geozone.where(census_code: @census_api_response.district_code).first
}
User.create!(user_params)
end
@@ -70,10 +68,17 @@ class Signature < ActiveRecord::Base
end
def in_census?
- response = document_types.detect do |document_type|
- CensusApi.new.call(document_type, document_number).valid?
+ document_types.detect do |document_type|
+ response = CensusApi.new.call(document_type, document_number)
+ if response.valid?
+ @census_api_response = response
+ true
+ else
+ false
+ end
end
- response.present?
+
+ @census_api_response.present?
end
def set_user
diff --git a/app/models/signature_sheet.rb b/app/models/signature_sheet.rb
index 9720c891f..1434143ac 100644
--- a/app/models/signature_sheet.rb
+++ b/app/models/signature_sheet.rb
@@ -2,7 +2,7 @@ class SignatureSheet < ActiveRecord::Base
belongs_to :signable, polymorphic: true
belongs_to :author, class_name: 'User', foreign_key: 'author_id'
- VALID_SIGNABLES = %w( Proposal SpendingProposal )
+ VALID_SIGNABLES = %w( Proposal Budget::Investment SpendingProposal )
has_many :signatures
diff --git a/app/views/admin/budget_investments/index.html.erb b/app/views/admin/budget_investments/index.html.erb
index 126a933b7..beb5eb856 100644
--- a/app/views/admin/budget_investments/index.html.erb
+++ b/app/views/admin/budget_investments/index.html.erb
@@ -28,7 +28,7 @@
<%= select_tag :tag_name,
- options_for_select(spending_proposal_tags_select_options, params[:tag_name]),
+ options_for_select(investment_tags_select_options, params[:tag_name]),
{ prompt: t("admin.budget_investments.index.tags_filter_all"),
label: false,
class: "js-submit-on-change" } %>
diff --git a/app/views/admin/budgets/_group.html.erb b/app/views/admin/budgets/_group.html.erb
index 422834f61..e90bd4905 100644
--- a/app/views/admin/budgets/_group.html.erb
+++ b/app/views/admin/budgets/_group.html.erb
@@ -7,23 +7,24 @@
- <% if headings.blank? %>
-
-
- |
-
- <%= t("admin.budgets.form.no_heading") %>
-
- |
-
- <% else %>
-
- | <%= t("admin.budgets.form.table_heading") %> |
- <%= t("admin.budgets.form.table_amount") %> |
-
-
-
- <% end %>
+ <% if headings.blank? %>
+
+
+
+ |
+
+ <%= t("admin.budgets.form.no_heading") %>
+
+ |
+
+ <% else %>
+
+ | <%= t("admin.budgets.form.table_heading") %> |
+ <%= t("admin.budgets.form.table_amount") %> |
+
+
+
+ <% end %>
@@ -52,16 +53,15 @@
<% headings.each do |heading| %>
-
- |
- <%= heading.name %>
- |
-
- <%= heading.price %>
- |
-
+
+ |
+ <%= heading.name %>
+ |
+
+ <%= heading.price %>
+ |
+
<% end %>
-
-
-
+
+
diff --git a/app/views/budgets/index.html.erb b/app/views/budgets/index.html.erb
index 73fc3a697..f3e386d27 100644
--- a/app/views/budgets/index.html.erb
+++ b/app/views/budgets/index.html.erb
@@ -10,8 +10,10 @@
- | <%= Budget.human_attribute_name(:name) %> |
- <%= Budget.human_attribute_name(:phase) %> |
+
+ | <%= Budget.human_attribute_name(:name) %> |
+ <%= Budget.human_attribute_name(:phase) %> |
+
<% @budgets.each do |budget| %>
diff --git a/app/views/budgets/investments/_investment_show.html.erb b/app/views/budgets/investments/_investment_show.html.erb
index 17abf4faf..d97a1fbfb 100644
--- a/app/views/budgets/investments/_investment_show.html.erb
+++ b/app/views/budgets/investments/_investment_show.html.erb
@@ -103,8 +103,9 @@
<%= social_share_button_tag("#{investment.title} #{setting['twitter_hashtag']}") %>
<% if browser.device.mobile? %>
-
+
+ <%= t("social.whatsapp") %>
<% end %>
diff --git a/app/views/debates/new.html.erb b/app/views/debates/new.html.erb
index cd4a92cc6..ccd11bec2 100644
--- a/app/views/debates/new.html.erb
+++ b/app/views/debates/new.html.erb
@@ -7,7 +7,7 @@
<%= t("debates.new.info",
info_link: link_to(t("debates.new.info_link"), new_proposal_path )).html_safe %>
- <%= link_to "/more_information", title: t('shared.target_blank_html'), target: "_blank" do %>
+ <%= link_to more_info_path, title: t('shared.target_blank_html'), target: "_blank" do %>
<%= t("debates.new.more_info") %>
<% end %>
diff --git a/app/views/debates/show.html.erb b/app/views/debates/show.html.erb
index 363a3bab3..64eafc0ae 100644
--- a/app/views/debates/show.html.erb
+++ b/app/views/debates/show.html.erb
@@ -53,8 +53,9 @@
<%= social_share_button_tag("#{@debate.title} #{setting['twitter_hashtag']}") %>
<% if browser.device.mobile? %>
-
+
+ <%= t("social.whatsapp") %>
<% end %>
diff --git a/app/views/devise/confirmations/new.html.erb b/app/views/devise/confirmations/new.html.erb
index fe2cf0dc5..51f6cf1eb 100644
--- a/app/views/devise/confirmations/new.html.erb
+++ b/app/views/devise/confirmations/new.html.erb
@@ -19,6 +19,7 @@
<%= f.submit(t("devise_views.confirmations.new.submit"), class: "button expanded") %>
+
<% end %>
<%= render "devise/shared/links" %>
diff --git a/app/views/devise/menu/_login_items.html.erb b/app/views/devise/menu/_login_items.html.erb
index 0ab28e2ee..b7db4a22c 100644
--- a/app/views/devise/menu/_login_items.html.erb
+++ b/app/views/devise/menu/_login_items.html.erb
@@ -1,6 +1,6 @@
<% if user_signed_in? %>
- <%= link_to notifications_path, class: "notifications", accesskey: "n" do %>
+ <%= link_to notifications_path, class: "notifications" do %>
<%= t("layouts.header.notifications") %>
<% if current_user.notifications_count > 0 %>
@@ -12,19 +12,19 @@
<% end %>
- <%= link_to(t("layouts.header.my_activity_link"), user_path(current_user), accesskey: "a") %>
+ <%= link_to t("layouts.header.my_activity_link"), user_path(current_user) %>
- <%= link_to(t("layouts.header.my_account_link"), account_path, accesskey: "m") %>
+ <%= link_to t("layouts.header.my_account_link"), account_path %>
- <%= link_to(t("devise_views.menu.login_items.logout"), destroy_user_session_path, method: :delete) %>
+ <%= link_to t("devise_views.menu.login_items.logout"), destroy_user_session_path, method: :delete %>
<% else %>
- <%= link_to(t("devise_views.menu.login_items.login"), new_user_session_path) %>
+ <%= link_to t("devise_views.menu.login_items.login"), new_user_session_path %>
- <%= link_to(t("devise_views.menu.login_items.signup"), new_user_registration_path, class: "button") %>
+ <%= link_to t("devise_views.menu.login_items.signup"), new_user_registration_path, class: "button" %>
<% end %>
diff --git a/app/views/devise/passwords/new.html.erb b/app/views/devise/passwords/new.html.erb
index 72dd70fb9..b06c9ff25 100644
--- a/app/views/devise/passwords/new.html.erb
+++ b/app/views/devise/passwords/new.html.erb
@@ -11,6 +11,7 @@
<%= f.submit t("devise_views.passwords.new.send_submit"), class: "button expanded" %>
+
<% end %>
<%= render "devise/shared/links" %>
diff --git a/app/views/devise/sessions/new.html.erb b/app/views/devise/sessions/new.html.erb
index ad375e772..910135853 100644
--- a/app/views/devise/sessions/new.html.erb
+++ b/app/views/devise/sessions/new.html.erb
@@ -11,18 +11,18 @@
<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
- <%= f.email_field :email, autofocus: true, placeholder: t("devise_views.sessions.new.email_label"), tabindex: "1" %>
+ <%= f.email_field :email, autofocus: true, placeholder: t("devise_views.sessions.new.email_label") %>
- <%= link_to t("devise_views.shared.links.new_password"), new_password_path(resource_name), class: "float-right", tabindex: "3" %>
- <%= f.password_field :password, autocomplete: "off", placeholder: t("devise_views.sessions.new.password_label"), tabindex: "2" %>
+ <%= f.password_field :password, autocomplete: "off", placeholder: t("devise_views.sessions.new.password_label") %>
+ <%= link_to t("devise_views.shared.links.new_password"), new_password_path(resource_name), class: "float-right" %>
<% if devise_mapping.rememberable? -%>
<%= f.label :remember_me do %>
- <%= f.check_box :remember_me, title: t('devise_views.sessions.new.remember_me'), label: false, tabindex: "4" %>
+ <%= f.check_box :remember_me, title: t('devise_views.sessions.new.remember_me'), label: false %>
<%= t("devise_views.sessions.new.remember_me") %>
<% end %>
@@ -35,5 +35,3 @@
<% end %>
<%= render "devise/shared/links" %>
-
-
diff --git a/app/views/layouts/_footer.html.erb b/app/views/layouts/_footer.html.erb
index 4f8545fb5..4b5e90523 100644
--- a/app/views/layouts/_footer.html.erb
+++ b/app/views/layouts/_footer.html.erb
@@ -43,7 +43,6 @@
<%= t("layouts.footer.copyright", year: Time.current.year) %> |
- - <%= link_to t("layouts.footer.more_info"), page_path('more_information') %> |
- <%= link_to t("layouts.footer.privacy"), page_path('privacy') %> |
- <%= link_to t("layouts.footer.conditions"), page_path('conditions') %> |
- <%= link_to t("layouts.footer.accessibility"), page_path('accessibility') %>
@@ -85,6 +84,14 @@
<% end %>
<% end %>
+ <% if setting['telegram_handle'] %>
+ -
+ <%= link_to "https://www.telegram.me/#{setting['telegram_handle']}", target: "_blank", title: t("social.telegram") + t('shared.target_blank_html') do %>
+ <%= t("social.telegram") %>
+
+ <% end %>
+
+ <% end %>
diff --git a/app/views/layouts/_header.html.erb b/app/views/layouts/_header.html.erb
index 223f173b2..9a33662c6 100644
--- a/app/views/layouts/_header.html.erb
+++ b/app/views/layouts/_header.html.erb
@@ -21,7 +21,7 @@