diff --git a/app/controllers/management/user_invites_controller.rb b/app/controllers/management/user_invites_controller.rb new file mode 100644 index 000000000..b022e6a86 --- /dev/null +++ b/app/controllers/management/user_invites_controller.rb @@ -0,0 +1,13 @@ +class Management::UserInvitesController < Management::BaseController + + def new + end + + def create + @emails = params[:emails].split + @emails.each do |email| + Mailer.user_invite(email).deliver_later + end + end + +end diff --git a/app/mailers/mailer.rb b/app/mailers/mailer.rb index d987e34cc..ad87359af 100644 --- a/app/mailers/mailer.rb +++ b/app/mailers/mailer.rb @@ -68,6 +68,12 @@ class Mailer < ApplicationMailer end end + def user_invite(email) + I18n.with_locale(I18n.default_locale) do + mail(to: email, subject: t('mailers.user_invite.subject', org_name: Setting["org_name"])) + end + end + private def with_user(user, &block) diff --git a/app/views/mailer/user_invite.html.erb b/app/views/mailer/user_invite.html.erb new file mode 100644 index 000000000..43b95626c --- /dev/null +++ b/app/views/mailer/user_invite.html.erb @@ -0,0 +1,23 @@ + +

+ <%= t('mailers.user_invite.title', + org: Setting['org_name']) %> +

+ +

+ <%= t('mailers.user_invite.text', + org: Setting['org_name']) %> +

+ +

+ <%= link_to t('mailers.user_invite.button'), new_user_registration_url, style: "font-family: 'Open Sans','Helvetica Neue',arial,sans-serif; background: #004A83; border-radius: 6px; color: #fff !important; font-weight: bold; margin: 0px; padding: 10px 15px; text-align: center; text-decoration: none; min-width: 160px; display: inline-block; margin-left: 12px;" %> +

+ +

+ <%= t('mailers.user_invite.ignore') %> +

+ +

+ <%= t('mailers.user_invite.thanks') %> +

+ diff --git a/app/views/management/_menu.html.erb b/app/views/management/_menu.html.erb index 00e3b0516..aa154212e 100644 --- a/app/views/management/_menu.html.erb +++ b/app/views/management/_menu.html.erb @@ -1,9 +1,5 @@
diff --git a/app/views/management/user_invites/create.html.erb b/app/views/management/user_invites/create.html.erb new file mode 100644 index 000000000..3d573532f --- /dev/null +++ b/app/views/management/user_invites/create.html.erb @@ -0,0 +1,9 @@ +
+ <%= render 'shared/back_link' %> + +

<%= t('management.user_invites.create.title') %>

+ +
+ <%= t('management.user_invites.create.success_html', count: @emails.count) %> +
+
diff --git a/app/views/management/user_invites/new.html.erb b/app/views/management/user_invites/new.html.erb new file mode 100644 index 000000000..a49a84538 --- /dev/null +++ b/app/views/management/user_invites/new.html.erb @@ -0,0 +1,12 @@ +
+

<%= t('management.user_invites.new.title') %>

+ + <%= form_tag management_user_invites_path do %> + +

<%= t('management.user_invites.new.info') %>

+ <%= text_area_tag "emails", nil, rows: 5, placeholder: t('management.user_invites.new.info') %> +
+ +
+ <% end %> +
diff --git a/config/locales/mailers.en.yml b/config/locales/mailers.en.yml index 17e3f6cf8..9362b3202 100755 --- a/config/locales/mailers.en.yml +++ b/config/locales/mailers.en.yml @@ -45,4 +45,11 @@ en: unsubscribe_account: My account direct_message_for_sender: subject: "You have send a new private message" - title_html: "You have send a new private message to %{receiver} with the content:" \ No newline at end of file + title_html: "You have send a new private message to %{receiver} with the content:" + user_invite: + ignore: "If you have not requested this invitation don't worry, you can ignore this email." + text: "Thank you for applying to join %{org}! In seconds you can start to decide the city you want, just fill the form below:" + thanks: "Thank you very much." + title: "Welcome to %{org}" + button: Complete registration + subject: "Invitation to %{org_name}" \ No newline at end of file diff --git a/config/locales/mailers.es.yml b/config/locales/mailers.es.yml index 2a7a85013..75523cf6c 100644 --- a/config/locales/mailers.es.yml +++ b/config/locales/mailers.es.yml @@ -45,4 +45,11 @@ es: unsubscribe_account: Mi cuenta direct_message_for_sender: subject: "Has enviado un nuevo mensaje privado" - title_html: "Has enviado un nuevo mensaje privado a %{receiver} con el siguiente contenido:" \ No newline at end of file + title_html: "Has enviado un nuevo mensaje privado a %{receiver} con el siguiente contenido:" + user_invite: + ignore: "Si no has solicitado esta invitación no te preocupes, puedes ignorar este correo." + text: "¡Gracias por solicitar unirte a %{org}! En unos segundos podrás empezar a decidir la ciudad que quieres, sólo tienes que rellenar el siguiente formulario:" + thanks: "Muchas gracias." + title: "Bienvenido a %{org}" + button: Completar registro + subject: "Invitación a %{org_name}" \ No newline at end of file diff --git a/config/locales/management.en.yml b/config/locales/management.en.yml index 74a58ac26..a0fffbde4 100644 --- a/config/locales/management.en.yml +++ b/config/locales/management.en.yml @@ -49,9 +49,9 @@ en: create_spending_proposal: Create spending proposal print_spending_proposals: Print spending proposals support_spending_proposals: Support spending proposals - title: Management users: Users edit_user_accounts: Edit user account + user_invites: User's invites permissions: create_proposals: Create proposals debates: Engage in debates @@ -97,3 +97,12 @@ en: erase_account_confirm: Are you sure you want to erase the account? This action can not be undone erase_warning: This action can not be undone. Please make sure you want to erase this account. erase_submit: Delete account + user_invites: + new: + label: Emails + info: "Enter the emails separated by commas (',')" + submit: Send invites + title: User's invites + create: + success_html: %{count} invitations have been sent. + title: User's invites \ No newline at end of file diff --git a/config/locales/management.es.yml b/config/locales/management.es.yml index c4545e675..e5ee1c074 100644 --- a/config/locales/management.es.yml +++ b/config/locales/management.es.yml @@ -49,9 +49,9 @@ es: create_spending_proposal: Crear propuesta de inversión print_spending_proposals: Imprimir propts. de inversión support_spending_proposals: Apoyar propts. de inversión - title: Gestión users: Usuarios edit_user_accounts: Editar cuenta de usuario + user_invites: Invitaciones para usuarios permissions: create_proposals: Crear nuevas propuestas debates: Participar en debates @@ -97,3 +97,12 @@ es: erase_account_confirm: ¿Seguro que quieres borrar a este usuario? Esta acción no se puede deshacer erase_warning: Esta acción no se puede deshacer. Por favor asegurese de que quiere eliminar esta cuenta. erase_submit: Borrar cuenta + user_invites: + new: + label: Emails + info: "Introduce los emails separados por ','" + submit: Enviar invitaciones + title: Invitaciones para usuarios + create: + success_html: Se han enviado %{count} invitaciones. + title: Invitaciones para usuarios \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index ed2ee34e4..37497268c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -235,6 +235,8 @@ Rails.application.routes.draw do resources :email_verifications, only: [:new, :create] + resources :user_invites, only: [:new, :create] + resources :users, only: [:new, :create] do collection do delete :logout diff --git a/spec/features/emails_spec.rb b/spec/features/emails_spec.rb index f793b5bb7..dcc90ca27 100644 --- a/spec/features/emails_spec.rb +++ b/spec/features/emails_spec.rb @@ -231,4 +231,26 @@ feature 'Emails' do end + context "User invites" do + + scenario "Send an invitation" do + login_as_manager + visit new_management_user_invite_path + + fill_in "emails", with: "john@example.com, ana@example.com, isable@example.com" + click_button "Send invites" + + expect(page).to have_content "3 invitations have been sent." + + expect(unread_emails_for("john@example.com").count).to eq 1 + expect(unread_emails_for("ana@example.com").count).to eq 1 + expect(unread_emails_for("isable@example.com").count).to eq 1 + + email = open_last_email + expect(email).to have_subject("Invitation to Consul") + expect(email).to have_body_text(/#{new_user_registration_path}/) + end + + end + end diff --git a/spec/features/user_invites_spec.rb b/spec/features/user_invites_spec.rb new file mode 100644 index 000000000..5627b0b7e --- /dev/null +++ b/spec/features/user_invites_spec.rb @@ -0,0 +1,18 @@ +require 'rails_helper' + +feature 'User invites' do + + background do + login_as_manager + end + + scenario "Send invitations" do + visit new_management_user_invite_path + + fill_in "emails", with: "john@example.com, ana@example.com, isable@example.com" + click_button "Send invites" + + expect(page).to have_content "3 invitations have been sent." + end + +end \ No newline at end of file