diff --git a/Gemfile b/Gemfile index 5efa7d67b..675e738b1 100644 --- a/Gemfile +++ b/Gemfile @@ -25,7 +25,7 @@ gem 'devise', '~> 3.5.6' gem 'omniauth' gem 'omniauth-twitter' gem 'omniauth-facebook', '~> 3.0.0' -gem 'omniauth-google-oauth2', '~> 0.3.0' +gem 'omniauth-google-oauth2', '~> 0.4.0' gem 'kaminari' gem 'ancestry' diff --git a/Gemfile.lock b/Gemfile.lock index 6ffbb5c1d..18fa95bd9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -201,14 +201,14 @@ GEM terminal-table (>= 1.5.1) initialjs-rails (0.2.0.1) railties (>= 3.1, < 5.0) - jquery-rails (4.1.0) - rails-dom-testing (~> 1.0) + jquery-rails (4.1.1) + rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) thor (>= 0.14, < 2.0) jquery-ui-rails (5.0.5) railties (>= 3.2.16) json (1.8.3) - jwt (1.5.1) + jwt (1.5.3) kaminari (0.16.3) actionpack (>= 3.0.0) activesupport (>= 3.0.0) @@ -239,19 +239,19 @@ GEM mini_portile2 (~> 2.0.0.rc2) nori (2.6.0) oauth (0.5.0) - oauth2 (1.1.0) + oauth2 (1.0.0) faraday (>= 0.8, < 0.10) - jwt (~> 1.0, < 1.5.2) + jwt (~> 1.0) multi_json (~> 1.3) multi_xml (~> 0.5) - rack (>= 1.2, < 3) + rack (~> 1.2) omniauth (1.3.1) hashie (>= 1.2, < 4) rack (>= 1.0, < 3) omniauth-facebook (3.0.0) omniauth-oauth2 (~> 1.2) - omniauth-google-oauth2 (0.3.1) - jwt (~> 1.0) + omniauth-google-oauth2 (0.4.1) + jwt (~> 1.5.2) multi_json (~> 1.3) omniauth (>= 1.1.1) omniauth-oauth2 (>= 1.3.1) @@ -311,7 +311,7 @@ GEM rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) raindrops (0.15.0) - rake (11.0.1) + rake (11.1.1) redcarpet (3.3.4) referer-parser (0.3.0) request_store (1.3.0) @@ -471,7 +471,7 @@ DEPENDENCIES newrelic_rpm (~> 3.14) omniauth omniauth-facebook (~> 3.0.0) - omniauth-google-oauth2 (~> 0.3.0) + omniauth-google-oauth2 (~> 0.4.0) omniauth-twitter paranoia pg diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 7bc4b5274..68d9c636c 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -42,6 +42,7 @@ //= require suggest //= require forms //= require tracks +//= require valuation_spending_proposal_form var initialize_modules = function() { App.Comments.initialize(); @@ -58,7 +59,8 @@ var initialize_modules = function() { App.RegistrationForm.initialize(); App.Suggest.initialize(); App.Forms.initialize(); - App.Tracks.initialize(); + App.Tracks.initialize(); + App.ValuationSpendingProposalForm.initialize(); }; $(function(){ diff --git a/app/assets/javascripts/valuation_spending_proposal_form.js.coffee b/app/assets/javascripts/valuation_spending_proposal_form.js.coffee new file mode 100644 index 000000000..fa0bc2106 --- /dev/null +++ b/app/assets/javascripts/valuation_spending_proposal_form.js.coffee @@ -0,0 +1,32 @@ +App.ValuationSpendingProposalForm = + + showFeasibleFields: -> + $('#valuation_spending_proposal_edit_form #not_feasible_fields').hide('down') + $('#valuation_spending_proposal_edit_form #feasible_fields').show() + + showNotFeasibleFields: -> + $('#valuation_spending_proposal_edit_form #feasible_fields').hide('down') + $('#valuation_spending_proposal_edit_form #not_feasible_fields').show() + + showAllFields: -> + $('#valuation_spending_proposal_edit_form #feasible_fields').show('down') + $('#valuation_spending_proposal_edit_form #not_feasible_fields').show('down') + + showFeasibilityFields: -> + feasible = $("#valuation_spending_proposal_edit_form input[type=radio][name='spending_proposal[feasible]']:checked").val() + if feasible == 'true' + App.ValuationSpendingProposalForm.showFeasibleFields() + else if feasible == 'false' + App.ValuationSpendingProposalForm.showNotFeasibleFields() + + + showFeasibilityFieldsOnChange: -> + $("#valuation_spending_proposal_edit_form input[type=radio][name='spending_proposal[feasible]']").change -> + App.ValuationSpendingProposalForm.showAllFields() + App.ValuationSpendingProposalForm.showFeasibilityFields() + + + initialize: -> + App.ValuationSpendingProposalForm.showFeasibilityFields() + App.ValuationSpendingProposalForm.showFeasibilityFieldsOnChange() + false \ No newline at end of file diff --git a/app/assets/stylesheets/layout.scss b/app/assets/stylesheets/layout.scss index 55f8e5456..75f8cf741 100644 --- a/app/assets/stylesheets/layout.scss +++ b/app/assets/stylesheets/layout.scss @@ -421,10 +421,6 @@ header { } } - span { - color: $border; - } - .input-group { padding-top: $line-height/4; @@ -739,7 +735,7 @@ form { min-height: $line-height*13; } - .checkbox { + .checkbox, .radio { display: inline-block; font-weight: normal; line-height: $line-height; @@ -879,7 +875,7 @@ img.avatar, img.admin-avatar, img.moderator-avatar, img.initialjs-avatar { } .user-deleted { - top: -9px; + top: -4px; } .user-permissions { @@ -1388,7 +1384,7 @@ table { } } - .date { + .date-of-birth { select { float: left; @@ -1550,6 +1546,7 @@ table { .comment { margin: $line-height/4 0; + position: relative; p { margin-bottom: 0; @@ -1727,6 +1724,7 @@ table { td { padding-left: $line-height*1.5; position: relative; + word-break: break-all; &:before { color: $brand; diff --git a/app/assets/stylesheets/participation.scss b/app/assets/stylesheets/participation.scss index 182c52863..bc6aa3694 100644 --- a/app/assets/stylesheets/participation.scss +++ b/app/assets/stylesheets/participation.scss @@ -70,7 +70,7 @@ line-height: rem-calc(48); vertical-align: super; - span { + span.percentage { color: white; display: inline-block; font-size: rem-calc(16); @@ -730,7 +730,7 @@ @media (min-width: $small-breakpoint) { .like, .unlike { - span { + span.percentage { display: block; line-height: $line-height/2; } diff --git a/app/controllers/admin/spending_proposals_controller.rb b/app/controllers/admin/spending_proposals_controller.rb index 3ae4872db..25707e66e 100644 --- a/app/controllers/admin/spending_proposals_controller.rb +++ b/app/controllers/admin/spending_proposals_controller.rb @@ -15,13 +15,16 @@ class Admin::SpendingProposalsController < Admin::BaseController def edit @admins = Administrator.includes(:user).all - @valuators = Valuator.includes(:user).all.order("users.username ASC") + @valuators = Valuator.includes(:user).all.order("description ASC").order("users.email ASC") @tags = ActsAsTaggableOn::Tag.spending_proposal_tags end def update if @spending_proposal.update(spending_proposal_params) - redirect_to admin_spending_proposal_path(@spending_proposal, anchor: 'classification'), notice: t("flash.actions.update.spending_proposal") + path = admin_spending_proposal_path( @spending_proposal, + { anchor: 'classification' }.merge(SpendingProposal.filter_params(params))) + + redirect_to path, notice: t("flash.actions.update.spending_proposal") else render :edit end diff --git a/app/controllers/admin/valuators_controller.rb b/app/controllers/admin/valuators_controller.rb index 35c449299..4561e7579 100644 --- a/app/controllers/admin/valuators_controller.rb +++ b/app/controllers/admin/valuators_controller.rb @@ -19,9 +19,15 @@ class Admin::ValuatorsController < Admin::BaseController end def create - @valuator.user_id = params[:user_id] + @valuator = Valuator.new(create_params) @valuator.save redirect_to admin_valuators_path end + + private + def create_params + params[:valuator][:description] = nil if params[:valuator][:description].blank? + params.require(:valuator).permit(:user_id, :description) + end end diff --git a/app/controllers/spending_proposals_controller.rb b/app/controllers/spending_proposals_controller.rb index 7e32b0a93..9b64c462d 100644 --- a/app/controllers/spending_proposals_controller.rb +++ b/app/controllers/spending_proposals_controller.rb @@ -28,6 +28,12 @@ class SpendingProposalsController < ApplicationController end end + def destroy + spending_proposal = current_user.spending_proposals.find(params[:id]) + spending_proposal.destroy + redirect_to user_path(current_user, filter: 'spending_proposals'), notice: t('flash.actions.destroy.spending_proposal') + end + private def spending_proposal_params diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb index 068c17b71..10da73712 100644 --- a/app/helpers/users_helper.rb +++ b/app/helpers/users_helper.rb @@ -20,7 +20,7 @@ module UsersHelper commentable.title + "".html_safe else - link_to(commentable.title, commentable) + link_to(commentable.title, comment) end end diff --git a/app/helpers/valuators_helper.rb b/app/helpers/valuators_helper.rb new file mode 100644 index 000000000..752713ed3 --- /dev/null +++ b/app/helpers/valuators_helper.rb @@ -0,0 +1,7 @@ +module ValuatorsHelper + + def valuator_label(valuator) + truncate([valuator.name, valuator.email, valuator.description].compact.join(' - '), length: 100) + end + +end \ No newline at end of file diff --git a/app/models/abilities/administrator.rb b/app/models/abilities/administrator.rb index 49184c447..78cb60806 100644 --- a/app/models/abilities/administrator.rb +++ b/app/models/abilities/administrator.rb @@ -37,7 +37,7 @@ module Abilities can :manage, Annotation - can :manage, SpendingProposal + can [:read, :update], SpendingProposal end end end diff --git a/app/models/abilities/common.rb b/app/models/abilities/common.rb index 002518dac..92eacea52 100644 --- a/app/models/abilities/common.rb +++ b/app/models/abilities/common.rb @@ -25,7 +25,7 @@ module Abilities can :suggest, Debate can :suggest, Proposal - + can [:flag, :unflag], Comment cannot [:flag, :unflag], Comment, user_id: user.id @@ -44,6 +44,7 @@ module Abilities can :vote, Proposal can :vote_featured, Proposal can :create, SpendingProposal + can :destroy, SpendingProposal, author_id: user.id end can :create, Annotation diff --git a/app/models/abilities/valuator.rb b/app/models/abilities/valuator.rb index edb542e4b..15add866a 100644 --- a/app/models/abilities/valuator.rb +++ b/app/models/abilities/valuator.rb @@ -3,7 +3,7 @@ module Abilities include CanCan::Ability def initialize(user) - can :manage, SpendingProposal + can [:read, :update, :valuate], SpendingProposal end end end \ No newline at end of file diff --git a/app/models/concerns/verification.rb b/app/models/concerns/verification.rb index c876ef5ed..4eb933204 100644 --- a/app/models/concerns/verification.rb +++ b/app/models/concerns/verification.rb @@ -53,7 +53,7 @@ module Verification def no_phone_available? !verification_sms_sent? end - + def user_type case when level_three_verified? @@ -62,9 +62,9 @@ module Verification :level_2_user else :level_1_user - end + end end - + def sms_code_not_confirmed? !sms_verified? end diff --git a/app/models/spending_proposal.rb b/app/models/spending_proposal.rb index 27842fa91..237da73f7 100644 --- a/app/models/spending_proposal.rb +++ b/app/models/spending_proposal.rb @@ -35,6 +35,10 @@ class SpendingProposal < ActiveRecord::Base super.try :html_safe end + def self.filter_params(params) + params.select{|x,_| %w{geozone_id administrator_id tag_name valuator_id}.include? x.to_s } + end + def self.search(params, current_filter) results = self results = results.by_geozone(params[:geozone_id]) if params[:geozone_id].present? diff --git a/app/models/user.rb b/app/models/user.rb index 3bf54b3ca..3b58fb607 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -20,6 +20,7 @@ class User < ActiveRecord::Base has_many :debates, -> { with_hidden }, foreign_key: :author_id has_many :proposals, -> { with_hidden }, foreign_key: :author_id has_many :comments, -> { with_hidden } + has_many :spending_proposals, foreign_key: :author_id has_many :failed_census_calls has_many :notifications belongs_to :geozone diff --git a/app/models/valuator.rb b/app/models/valuator.rb index ab0ea6ece..c7cb6e4a8 100644 --- a/app/models/valuator.rb +++ b/app/models/valuator.rb @@ -6,4 +6,8 @@ class Valuator < ActiveRecord::Base has_many :spending_proposals, through: :valuation_assignments validates :user_id, presence: true, uniqueness: true + + def description_or_email + description.present? ? description : email + end end diff --git a/app/views/account/show.html.erb b/app/views/account/show.html.erb index 99931e4ac..f0d2b6abc 100644 --- a/app/views/account/show.html.erb +++ b/app/views/account/show.html.erb @@ -33,7 +33,7 @@
<%= t("account.show.user_permission_info") %>
- + <%= t("account.show.verified_account") %>
<% elsif current_user.level_two_verified? %> diff --git a/app/views/admin/_menu.html.erb b/app/views/admin/_menu.html.erb index 49bd6957d..f435c5511 100644 --- a/app/views/admin/_menu.html.erb +++ b/app/views/admin/_menu.html.erb @@ -6,14 +6,14 @@<%= text_with_links @spending_proposal.external_url %>
+<%= text_with_links @spending_proposal.external_url %>
<% end %> <%= safe_html_with_links @spending_proposal.description %> diff --git a/app/views/admin/spending_proposals/edit.html.erb b/app/views/admin/spending_proposals/edit.html.erb index 22510765a..59180eb16 100644 --- a/app/views/admin/spending_proposals/edit.html.erb +++ b/app/views/admin/spending_proposals/edit.html.erb @@ -1,12 +1,17 @@ -<%= link_to admin_spending_proposals_path(@spending_proposal), class: 'back' do %> - <%= t("admin.spending_proposals.show.back") %> +<%= link_to admin_spending_proposal_path(@spending_proposal, SpendingProposal.filter_params(params)), class: 'back' do %> + <%= t("admin.spending_proposals.show.back") %> <% end %> <%= render 'written_by_author' %><%= f.submit(class: "button", value: t("admin.spending_proposals.edit.submit_button")) %> @@ -41,4 +42,4 @@ <% end %>
<%= link_to t("admin.spending_proposals.show.edit_classification"), - edit_admin_spending_proposal_path(@spending_proposal, anchor: "form") %> + edit_admin_spending_proposal_path(@spending_proposal, + {anchor: 'form'}.merge(SpendingProposal.filter_params(params))) %>
<%= t("admin.spending_proposals.show.assigned_admin") %>: diff --git a/app/views/admin/tags/index.html.erb b/app/views/admin/tags/index.html.erb index 707235265..5e5ca5c99 100644 --- a/app/views/admin/tags/index.html.erb +++ b/app/views/admin/tags/index.html.erb @@ -10,7 +10,7 @@