diff --git a/app/controllers/v1/complaints_controller.rb b/app/controllers/v1/complaints_controller.rb index 5015fb5c70e218362edb397f172b696d07ce52df..c6dc3b3efbd585545c31fe62d1b8eb7b64ee56c7 100644 --- a/app/controllers/v1/complaints_controller.rb +++ b/app/controllers/v1/complaints_controller.rb @@ -33,12 +33,13 @@ class V1::ComplaintsController < ApplicationController # POST v1/complaints # POST v1/complaints.json def create - complaint = Complaint.new(complaint_params) + @complaint = Complaint.new(complaint_params) - if complaint.save - render json: complaint, status: :created + if @complaint.save + ComplaintsMailer.new_complaint_received(@complaint, @current_user).deliver_now + render json: @complaint, status: :created else - render json: complaint.errors, status: :unprocessable_entity + render json: @complaint.errors, status: :unprocessable_entity end end diff --git a/app/controllers/v1/users_controller.rb b/app/controllers/v1/users_controller.rb index 11f0a794cab6151a03e0c72d921408eb6910700d..c234a6556456a4dbe041ad175bf04ece42f72c94 100644 --- a/app/controllers/v1/users_controller.rb +++ b/app/controllers/v1/users_controller.rb @@ -24,11 +24,11 @@ class V1::UsersController < ApplicationController include ::PublisherController include ::SubjectableController - before_action :set_user, only: [:show, :update, :destroy, :following, :own_reviews, :received_reviews, :followers, :approve_request] + before_action :set_user, only: [:show, :update, :destroy, :following, :own_reviews, :received_reviews, :followers, :approve_request, :add_submitter] before_action :set_new_user, only: [:upload_requests] before_action :authenticate_user!, only: [:create, :update, :destroy, :following, - :own_reviews, :received_reviews, :followers, :submitter_request, :upload_requests, :approve_request] - before_action :authorize_user, only: [:own_reviews, :received_reviews, :update, :destroy, :upload_requests, :approve_request] + :own_reviews, :received_reviews, :followers, :submitter_request, :upload_requests, :approve_request, :add_submitter] + before_action :authorize_user, only: [:own_reviews, :received_reviews, :update, :destroy, :upload_requests, :approve_request, :add_submitter] # GET /v1/users # GET /v1/users.json @@ -93,6 +93,27 @@ class V1::UsersController < ApplicationController render json: users end + # POST /v1/users/:id/add_submitter + # POST /v1/users/:id/add_submitter.json + def add_submitter + if @user.is_submitter? + render status: :forbidden + elsif !approve_params.to_s.blank? + if approve_params + @user.submitter_request = User.submitter_requests[:accepted] + @user.roles << Role.where(name: "submitter") + @user.save + render status: :ok + else + @user.update(submitter_request: User.submitter_requests[:rejected]) + render status: :ok + end + else + render status: :forbidden + end + end + + # POST /v1/users/:id/approve_request # POST /v1/users/:id/approve_request.json def approve_request diff --git a/app/mailers/complaints_mailer.rb b/app/mailers/complaints_mailer.rb new file mode 100644 index 0000000000000000000000000000000000000000..f0721ea80d5422ffa05a629196883101ffb908bb --- /dev/null +++ b/app/mailers/complaints_mailer.rb @@ -0,0 +1,29 @@ + +# Copyright (C) 2015 Centro de Computacao Cientifica e Software Livre +# Departamento de Informatica - Universidade Federal do Parana +# +# This file is part of portalmec. +# +# portalmec is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# portalmec is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with portalmec. If not, see <http://www.gnu.org/licenses/>. + +class ComplaintsMailer < ApplicationMailer + default to: 'integrada.contato@mec.gov.br' + default from: Proc.new { @user.email } + + def new_complaint_received(complaint, user) + @complaint = complaint + @user = user + mail(subject: "Denuncia de objeto") + end +end diff --git a/app/policies/user_policy.rb b/app/policies/user_policy.rb index 25eb87c915769e033d655c80888d7abeaab6d194..fbe97e37f0d906a9f3d54d8f1bf8cf56e68c19e3 100644 --- a/app/policies/user_policy.rb +++ b/app/policies/user_policy.rb @@ -55,6 +55,10 @@ class UserPolicy < ApplicationPolicy record if user.is_supervisor? end + def add_submitter? + record if user.is_supervisor? + end + def authorized_user? return false if ( record.is_admin? && !user.is_admin? ) if ( record.is_editor? ) diff --git a/app/views/complaints_mailer/new_complaint_received.html.erb b/app/views/complaints_mailer/new_complaint_received.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..556ed05060caf9cf43dbbd4081e7fb66a6a49ebf --- /dev/null +++ b/app/views/complaints_mailer/new_complaint_received.html.erb @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <style>/* Email styles need to be inline */</style> + </head> + <body> + <h2>Nome do usuário: <%= @user.name %></h1> + <h2>Email do usuário: <%= @user.email %></h1> + <h2>Descrição: <%= @complaint.description %></h1> + <h2>Classe denunciada: <%= @complaint.complainable_type %></h1> + <h2>Id: <%= @complaint.complainable_id %></h1> + <h2>Nome: <%= @complaint.complainable.name %></h1> + <h2>Razão: <%= @complaint.complaint_reason.reason %></h1> + </body> +</html> diff --git a/config/routes.rb b/config/routes.rb index c7e50d570b0f00d1b994c9805acea966eef1b0f3..3a0d2f608a008b35eb4092826bbfcf78534704eb 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -139,6 +139,7 @@ Rails.application.routes.draw do get 'reviews/own', to: 'users#own_reviews' get 'reviews/received', to: 'users#received_reviews' post 'approve_request', to: 'users#approve_request' + post 'add_submitter', to: 'users#add_submitter' end collection do get 'upload_requests' diff --git a/spec/acceptance/users_spec.rb b/spec/acceptance/users_spec.rb index d376f130caba2ce0350fed4a7c55f5d2771654cb..e381d1b1400963e79233ece6798b7cd0483f7f3d 100644 --- a/spec/acceptance/users_spec.rb +++ b/spec/acceptance/users_spec.rb @@ -372,8 +372,8 @@ resource 'Users' do let(:raw_post) {params.to_json} before do - @user = create(:user, ) - @user.update(submitter_request: User.submitter_requests[:requested]) + @user = create(:user) + @user.update(submitter_request: User.submitter_requests[:requested]) end example 'Approve a submitter request' do @@ -381,4 +381,24 @@ resource 'Users' do expect(status).to eq(200) end end + + post '/v1/users/:id/add_submitter' do + include_context "authenticate_user_supervisor" + + parameter :id, 'The id of the user who asked to be a submitter' + parameter :approves, 'If the user can be a submitter or not' + + let(:id) {@user.id} + let(:approves) { true } + let(:raw_post) {params.to_json} + + before do + @user = create(:user) + end + + example 'Add an user submitter' do + do_request + expect(status).to eq(200) + end + end end