From 730768cb59ab03bc20cd56c7edd47f5b9cd613f1 Mon Sep 17 00:00:00 2001 From: Benjamin ter Kuile Date: Thu, 17 Jan 2013 09:15:42 +0100 Subject: [PATCH] Mailer and other upgrades --- Gemfile | 1 + Gemfile.lock | 5 ++++ .../javascripts/supplier/translations.js.erb | 1 - .../theme1/bootstrap_and_overrides.css.sass | 7 ++++++ app/mailers/supplier_mailer.rb | 10 ++++++++ app/models/supplier.rb | 8 +++++- app/models/table.rb | 2 +- app/models/user.rb | 2 ++ app/views/layouts/mail.html.slim | 11 ++++++++ app/views/supplier_mailer/creation.html.slim | 20 +++++++++++++++ .../{devise => suppliers}/_links.html.slim | 0 .../confirmations/new.html.erb | 0 .../mailer/confirmation_instructions.html.erb | 0 .../reset_password_instructions.html.erb | 0 .../mailer/unlock_instructions.html.erb | 0 .../passwords/edit.html.slim | 0 .../passwords/new.html.slim | 0 .../registrations/edit.html.erb | 0 .../registrations/new.html.slim | 0 .../sessions/new.html.slim | 0 .../unlocks/new.html.erb | 0 app/views/users/_links.html.slim | 19 ++++++++++++++ app/views/users/confirmations/new.html.erb | 12 +++++++++ .../mailer/confirmation_instructions.html.erb | 5 ++++ .../reset_password_instructions.html.erb | 8 ++++++ .../users/mailer/unlock_instructions.html.erb | 7 ++++++ app/views/users/passwords/edit.html.slim | 14 +++++++++++ app/views/users/passwords/new.html.slim | 10 ++++++++ app/views/users/registrations/edit.html.erb | 25 +++++++++++++++++++ app/views/users/registrations/new.html.slim | 19 ++++++++++++++ app/views/users/sessions/new.html.slim | 19 ++++++++++++++ app/views/users/unlocks/new.html.erb | 12 +++++++++ config/environments/development.rb | 15 +++++++++++ config/environments/production.rb | 11 +++++++- config/initializers/devise.rb | 4 +-- config/locales/devise.nl.yml | 3 +-- 36 files changed, 242 insertions(+), 8 deletions(-) create mode 100644 app/assets/stylesheets/theme1/bootstrap_and_overrides.css.sass create mode 100644 app/mailers/supplier_mailer.rb create mode 100644 app/views/layouts/mail.html.slim create mode 100644 app/views/supplier_mailer/creation.html.slim rename app/views/{devise => suppliers}/_links.html.slim (100%) rename app/views/{devise => suppliers}/confirmations/new.html.erb (100%) rename app/views/{devise => suppliers}/mailer/confirmation_instructions.html.erb (100%) rename app/views/{devise => suppliers}/mailer/reset_password_instructions.html.erb (100%) rename app/views/{devise => suppliers}/mailer/unlock_instructions.html.erb (100%) rename app/views/{devise => suppliers}/passwords/edit.html.slim (100%) rename app/views/{devise => suppliers}/passwords/new.html.slim (100%) rename app/views/{devise => suppliers}/registrations/edit.html.erb (100%) rename app/views/{devise => suppliers}/registrations/new.html.slim (100%) rename app/views/{devise => suppliers}/sessions/new.html.slim (100%) rename app/views/{devise => suppliers}/unlocks/new.html.erb (100%) create mode 100644 app/views/users/_links.html.slim create mode 100644 app/views/users/confirmations/new.html.erb create mode 100644 app/views/users/mailer/confirmation_instructions.html.erb create mode 100644 app/views/users/mailer/reset_password_instructions.html.erb create mode 100644 app/views/users/mailer/unlock_instructions.html.erb create mode 100644 app/views/users/passwords/edit.html.slim create mode 100644 app/views/users/passwords/new.html.slim create mode 100644 app/views/users/registrations/edit.html.erb create mode 100644 app/views/users/registrations/new.html.slim create mode 100644 app/views/users/sessions/new.html.slim create mode 100644 app/views/users/unlocks/new.html.erb diff --git a/Gemfile b/Gemfile index 5bec0134..24c9773a 100644 --- a/Gemfile +++ b/Gemfile @@ -53,6 +53,7 @@ group :development do gem 'rspec-rails' gem 'guard-rspec' gem 'quiet_assets' + gem 'letter_opener' gem 'thin' end diff --git a/Gemfile.lock b/Gemfile.lock index d1ccea4b..3eb6db5b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -130,6 +130,10 @@ GEM kaminari-bootstrap (0.1.3) kaminari (>= 0.13.0) rails + launchy (2.1.2) + addressable (~> 2.3) + letter_opener (1.0.0) + launchy (>= 2.0.4) libwebsocket (0.1.7.1) addressable websocket @@ -269,6 +273,7 @@ DEPENDENCIES haml-rails jquery-rails kaminari-bootstrap + letter_opener mini_magick mustache pry diff --git a/app/assets/javascripts/supplier/translations.js.erb b/app/assets/javascripts/supplier/translations.js.erb index 423c98b4..a9d2d020 100644 --- a/app/assets/javascripts/supplier/translations.js.erb +++ b/app/assets/javascripts/supplier/translations.js.erb @@ -56,7 +56,6 @@ function setTranslations(selector){ var list = $('#top-navigation-list'); list.find('.locale').show(); list.find('.locale-'+$locale).hide(); - debugger; if(selector){ $(selector).find('[data-t]').each(function(){$(this).text(t($(this).data('t'), $(this).data('tAttributes')))}) }else{ diff --git a/app/assets/stylesheets/theme1/bootstrap_and_overrides.css.sass b/app/assets/stylesheets/theme1/bootstrap_and_overrides.css.sass new file mode 100644 index 00000000..edc735c5 --- /dev/null +++ b/app/assets/stylesheets/theme1/bootstrap_and_overrides.css.sass @@ -0,0 +1,7 @@ +@import bootstrap +body + .nav + > li + > a + &:hover + background-color: transparent diff --git a/app/mailers/supplier_mailer.rb b/app/mailers/supplier_mailer.rb new file mode 100644 index 00000000..a5ffbc9b --- /dev/null +++ b/app/mailers/supplier_mailer.rb @@ -0,0 +1,10 @@ +class SupplierMailer < ActionMailer::Base + default from: "Qwaiter " + layout 'mail' + + def creation(supplier) + I18n.locale = :nl + @supplier = supplier + mail to: supplier.email, subject: I18n.t('mailer.supplier.creation.subject', name: supplier.name) + end +end diff --git a/app/models/supplier.rb b/app/models/supplier.rb index 9acd84c8..33795ae8 100644 --- a/app/models/supplier.rb +++ b/app/models/supplier.rb @@ -1,7 +1,8 @@ class Supplier include SimplyStored::Couch include Devise::Orm::SimplyStored - devise :database_authenticatable, :recoverable, :rememberable, :trackable, :registerable + devise :database_authenticatable, :recoverable, :rememberable, :trackable, :registerable, :confirmable + property :unconfirmed_email property :name property :open, type: :boolean, default: false @@ -30,6 +31,7 @@ class Supplier has_many :sections, dependent: :destroy after_create :add_section_on_create + after_create :send_creation_notifications view :by_email, key: :email @@ -92,4 +94,8 @@ class Supplier @section = Section.create supplier: self, title: I18n.t('supplier.section.first_section_title') end + def send_creation_notifications + SupplierMailer.creation(self).deliver + end + end diff --git a/app/models/table.rb b/app/models/table.rb index 3f3f13fc..ffcfa10f 100644 --- a/app/models/table.rb +++ b/app/models/table.rb @@ -17,7 +17,7 @@ class Table view :by_supplier_id_and_id, key: [:supplier_id, :_id] #validates_uniqueness_of :number - #view :by_number, key: :number # For uniqueness validation + view :by_number, key: :number def occupied? return @is_occupied if instance_variable_defined?(:'@is_occupied') diff --git a/app/models/user.rb b/app/models/user.rb index 353666ac..b8a486e5 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,6 +1,8 @@ class User include SimplyStored::Couch include Devise::Orm::SimplyStored + + property :name property :active_list_id devise :database_authenticatable, :recoverable, :rememberable, :trackable, :token_authenticatable # , :registerable diff --git a/app/views/layouts/mail.html.slim b/app/views/layouts/mail.html.slim new file mode 100644 index 00000000..1606f087 --- /dev/null +++ b/app/views/layouts/mail.html.slim @@ -0,0 +1,11 @@ +doctype strict +html + head + title + meta http-equiv="Content-Type" content="text/html; charset=utf-8" + body leftmargin="0" marginwidth="0" topmargin="0" marginheight="0" offset="0" style="-webkit-text-size-adjust:none;margin:0;padding:0;background-color:#eaeef0;width:100%;" + center + table border="0" cellpadding="0" cellspacing="0" height="100%" id="backgroundTable" style="margin:20px 0 20px 0;padding:0;height:100%;width:600px;background-color:#ffffff" + tr + td align="left" valign="top" style="color:#4C7334;font-family:Arial;padding:22px" + = yield diff --git a/app/views/supplier_mailer/creation.html.slim b/app/views/supplier_mailer/creation.html.slim new file mode 100644 index 00000000..27d800f3 --- /dev/null +++ b/app/views/supplier_mailer/creation.html.slim @@ -0,0 +1,20 @@ +h2= t('mailer.supplier.creation.title', name: @supplier.name) +p + | + Welkom bij Qwaiter! Leuk dat je gebruik wil maken van bestellen via de smartphone. De eerste stap is gezet! Maak je gebruik van een reeds + bestaand kassasysteem dan is de kans groot dat Qwaiter deze ondersteunt. Selecteer in + dit geval eerst je kassasysteem. De inrichting van Qwaiter zich hierop zal + aanpassen. +p + | + Wij van Qwaiter hopen dat dit een waardevolle toevoeging op je bedrijf zal zijn en + zullen er alles aan doen om de relatie zo aangenaam mogelijk te maken. +p + br + | Met vriendelijke groet, + br + br + | Qwaiter + br + = link_to 'www.Qwaiter.com', root_url, style: "color:#FAA732" + diff --git a/app/views/devise/_links.html.slim b/app/views/suppliers/_links.html.slim similarity index 100% rename from app/views/devise/_links.html.slim rename to app/views/suppliers/_links.html.slim diff --git a/app/views/devise/confirmations/new.html.erb b/app/views/suppliers/confirmations/new.html.erb similarity index 100% rename from app/views/devise/confirmations/new.html.erb rename to app/views/suppliers/confirmations/new.html.erb diff --git a/app/views/devise/mailer/confirmation_instructions.html.erb b/app/views/suppliers/mailer/confirmation_instructions.html.erb similarity index 100% rename from app/views/devise/mailer/confirmation_instructions.html.erb rename to app/views/suppliers/mailer/confirmation_instructions.html.erb diff --git a/app/views/devise/mailer/reset_password_instructions.html.erb b/app/views/suppliers/mailer/reset_password_instructions.html.erb similarity index 100% rename from app/views/devise/mailer/reset_password_instructions.html.erb rename to app/views/suppliers/mailer/reset_password_instructions.html.erb diff --git a/app/views/devise/mailer/unlock_instructions.html.erb b/app/views/suppliers/mailer/unlock_instructions.html.erb similarity index 100% rename from app/views/devise/mailer/unlock_instructions.html.erb rename to app/views/suppliers/mailer/unlock_instructions.html.erb diff --git a/app/views/devise/passwords/edit.html.slim b/app/views/suppliers/passwords/edit.html.slim similarity index 100% rename from app/views/devise/passwords/edit.html.slim rename to app/views/suppliers/passwords/edit.html.slim diff --git a/app/views/devise/passwords/new.html.slim b/app/views/suppliers/passwords/new.html.slim similarity index 100% rename from app/views/devise/passwords/new.html.slim rename to app/views/suppliers/passwords/new.html.slim diff --git a/app/views/devise/registrations/edit.html.erb b/app/views/suppliers/registrations/edit.html.erb similarity index 100% rename from app/views/devise/registrations/edit.html.erb rename to app/views/suppliers/registrations/edit.html.erb diff --git a/app/views/devise/registrations/new.html.slim b/app/views/suppliers/registrations/new.html.slim similarity index 100% rename from app/views/devise/registrations/new.html.slim rename to app/views/suppliers/registrations/new.html.slim diff --git a/app/views/devise/sessions/new.html.slim b/app/views/suppliers/sessions/new.html.slim similarity index 100% rename from app/views/devise/sessions/new.html.slim rename to app/views/suppliers/sessions/new.html.slim diff --git a/app/views/devise/unlocks/new.html.erb b/app/views/suppliers/unlocks/new.html.erb similarity index 100% rename from app/views/devise/unlocks/new.html.erb rename to app/views/suppliers/unlocks/new.html.erb diff --git a/app/views/users/_links.html.slim b/app/views/users/_links.html.slim new file mode 100644 index 00000000..689d28c9 --- /dev/null +++ b/app/views/users/_links.html.slim @@ -0,0 +1,19 @@ +ul.nav.nav-pills + - if controller_name != 'sessions' + li= link_to t('devise.sessions.button'), new_session_path(resource_name), class: [:devise, :btn] + + - if devise_mapping.registerable? && controller_name != 'registrations' + li= link_to t('devise.registrations.button'), new_registration_path(resource_name), class: [:devise, :btn] + + - if devise_mapping.recoverable? && controller_name != 'passwords' + li= link_to t('devise.sessions.forgot_your_password'), new_password_path(resource_name), class: [:devise, :btn] + + - if devise_mapping.confirmable? && controller_name != 'confirmations' + li= link_to t('devise.confirmations.did_not_receive_instructions_link'), new_confirmation_path(resource_name), class: [:devise, :btn] + + - if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' + li= link_to t('devise.unlocks.did_not_receive_instructions_link'), new_unlock_path(resource_name), class: [:devise, :btn] + + - if devise_mapping.omniauthable? + - resource_class.omniauth_providers.each do |provider| + li= link_to t('devise.omniauth_callbacks.sign_in_with', provider: provider.to_s.titleize), omniauth_authorize_path(resource_name, provider), class: [:devise, :btn] diff --git a/app/views/users/confirmations/new.html.erb b/app/views/users/confirmations/new.html.erb new file mode 100644 index 00000000..18d81b14 --- /dev/null +++ b/app/views/users/confirmations/new.html.erb @@ -0,0 +1,12 @@ +

Resend confirmation instructions

+ +<%= form_for(resource, :as => resource_name, :url => confirmation_path(resource_name), :html => { :method => :post }) do |f| %> + <%= devise_error_messages! %> + +
<%= f.label :email %>
+ <%= f.email_field :email %>
+ +
<%= f.submit "Resend confirmation instructions" %>
+<% end %> + +<%= render "links" %> \ No newline at end of file diff --git a/app/views/users/mailer/confirmation_instructions.html.erb b/app/views/users/mailer/confirmation_instructions.html.erb new file mode 100644 index 00000000..a5c4585e --- /dev/null +++ b/app/views/users/mailer/confirmation_instructions.html.erb @@ -0,0 +1,5 @@ +

Welcome <%= @resource.email %>!

+ +

You can confirm your account email through the link below:

+ +

<%= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) %>

diff --git a/app/views/users/mailer/reset_password_instructions.html.erb b/app/views/users/mailer/reset_password_instructions.html.erb new file mode 100644 index 00000000..ae9e888a --- /dev/null +++ b/app/views/users/mailer/reset_password_instructions.html.erb @@ -0,0 +1,8 @@ +

Hello <%= @resource.email %>!

+ +

Someone has requested a link to change your password, and you can do this through the link below.

+ +

<%= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @resource.reset_password_token) %>

+ +

If you didn't request this, please ignore this email.

+

Your password won't change until you access the link above and create a new one.

diff --git a/app/views/users/mailer/unlock_instructions.html.erb b/app/views/users/mailer/unlock_instructions.html.erb new file mode 100644 index 00000000..2263c219 --- /dev/null +++ b/app/views/users/mailer/unlock_instructions.html.erb @@ -0,0 +1,7 @@ +

Hello <%= @resource.email %>!

+ +

Your account has been locked due to an excessive amount of unsuccessful sign in attempts.

+ +

Click the link below to unlock your account:

+ +

<%= link_to 'Unlock my account', unlock_url(@resource, :unlock_token => @resource.unlock_token) %>

diff --git a/app/views/users/passwords/edit.html.slim b/app/views/users/passwords/edit.html.slim new file mode 100644 index 00000000..6a71746c --- /dev/null +++ b/app/views/users/passwords/edit.html.slim @@ -0,0 +1,14 @@ +h2= t('devise.passwords.edit.title') += form_for(resource, :as => resource_name, :url => password_path(resource_name), html: {class: 'form-horizontal', method: :put}) do |f| + = devise_error_messages! + = f.hidden_field :reset_password_token + .control-group + = f.label :password, class: 'control-label' + .controls= f.password_field :password + .control-group + = f.label :password_confirmation, class: 'control-label' + .controls= f.password_field :password_confirmation + .control-group + .controls + = f.submit t('devise.passwords.edit.button'), class: 'btn btn-primary' += render "links" diff --git a/app/views/users/passwords/new.html.slim b/app/views/users/passwords/new.html.slim new file mode 100644 index 00000000..c0304fc9 --- /dev/null +++ b/app/views/users/passwords/new.html.slim @@ -0,0 +1,10 @@ +h2= t('devise.passwords.title') += form_for(resource, :as => resource_name, :url => password_path(resource_name), html: {class: 'form-horizontal'}) do |f| + = devise_error_messages! + .control-group + = f.label :email, class: 'control-label' + .controls= f.email_field :email + .control-group + .controls + = f.submit t('devise.passwords.button'), class: 'btn btn-primary' += render "links" diff --git a/app/views/users/registrations/edit.html.erb b/app/views/users/registrations/edit.html.erb new file mode 100644 index 00000000..bb66fbf2 --- /dev/null +++ b/app/views/users/registrations/edit.html.erb @@ -0,0 +1,25 @@ +

Edit <%= resource_name.to_s.humanize %>

+ +<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %> + <%= devise_error_messages! %> + +
<%= f.label :email %>
+ <%= f.email_field :email %>
+ +
<%= f.label :password %> (leave blank if you don't want to change it)
+ <%= f.password_field :password, :autocomplete => "off" %>
+ +
<%= f.label :password_confirmation %>
+ <%= f.password_field :password_confirmation %>
+ +
<%= f.label :current_password %> (we need your current password to confirm your changes)
+ <%= f.password_field :current_password %>
+ +
<%= f.submit "Update" %>
+<% end %> + +

Cancel my account

+ +

Unhappy? <%= link_to "Cancel my account", registration_path(resource_name), :confirm => "Are you sure?", :method => :delete %>.

+ +<%= link_to "Back", :back %> diff --git a/app/views/users/registrations/new.html.slim b/app/views/users/registrations/new.html.slim new file mode 100644 index 00000000..4c70a247 --- /dev/null +++ b/app/views/users/registrations/new.html.slim @@ -0,0 +1,19 @@ +h2= t('devise.registrations.title') += form_for(resource, :as => resource_name, :url => registration_path(resource_name), html: {class: 'form-horizontal'}) do |f| + = devise_error_messages! + .control-group + = f.label :name, class: 'control-label' + .controls= f.text_field :name + .control-group + = f.label :email, class: 'control-label' + .controls= f.email_field :email + .control-group + = f.label :password, class: 'control-label' + .controls= f.password_field :password + .control-group + = f.label :password_confirmation, class: 'control-label' + .controls= f.password_field :password_confirmation + .control-group + .controls + = f.submit t('devise.registrations.button'), class: 'btn btn-primary' += render "links" diff --git a/app/views/users/sessions/new.html.slim b/app/views/users/sessions/new.html.slim new file mode 100644 index 00000000..bda31ea2 --- /dev/null +++ b/app/views/users/sessions/new.html.slim @@ -0,0 +1,19 @@ +h2= t('devise.sessions.title') += form_for(resource, :as => resource_name, :url => session_path(resource_name), html: {class: 'form-horizontal'}) do |f| + = devise_error_messages! + .control-group + = f.label :email, class: 'control-label' + .controls= f.email_field :email + .control-group + = f.label :password, class: 'control-label' + .controls= f.password_field :password + .control-group + .controls + = f.label :remember_me do + = f.check_box :remember_me + |  + = t('devise.sessions.remember_me') + .control-group + .controls + = f.submit t('devise.sessions.button'), class: 'btn btn-primary' += render "links" diff --git a/app/views/users/unlocks/new.html.erb b/app/views/users/unlocks/new.html.erb new file mode 100644 index 00000000..0dc79ac0 --- /dev/null +++ b/app/views/users/unlocks/new.html.erb @@ -0,0 +1,12 @@ +

Resend unlock instructions

+ +<%= form_for(resource, :as => resource_name, :url => unlock_path(resource_name), :html => { :method => :post }) do |f| %> + <%= devise_error_messages! %> + +
<%= f.label :email %>
+ <%= f.email_field :email %>
+ +
<%= f.submit "Resend unlock instructions" %>
+<% end %> + +<%= render "links" %> \ No newline at end of file diff --git a/config/environments/development.rb b/config/environments/development.rb index 8eea23c4..ed6ddb02 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -22,6 +22,21 @@ Qwaiter::Application.configure do # Don't care if the mailer can't send config.action_mailer.raise_delivery_errors = false + #config.action_mailer.delivery_method = :letter_opener + config.action_mailer.default_url_options = { + host: 'localhost', + port: 3000 + } + + config.action_mailer.smtp_settings = { + address: "smtp.gmail.com", + port: 587, + domain: "atool.nl", + authentication: :plain, + user_name: "bterkuile@companytools.nl", + password: "BjTKct22", + enable_starttls_auto: true + } # Print deprecation notices to the Rails logger config.active_support.deprecation = :log diff --git a/config/environments/production.rb b/config/environments/production.rb index fd6ff40c..d5659407 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -49,7 +49,16 @@ Qwaiter::Application.configure do # config.assets.precompile += %w( search.js ) # Disable delivery errors, bad email addresses will be ignored - # config.action_mailer.raise_delivery_errors = false + config.action_mailer.raise_delivery_errors = false + config.action_mailer.smtp_settings = { + address: "smtp.gmail.com", + port: 587, + domain: "atool.nl", + authentication: :plain, + user_name: "bterkuile@companytools.nl", + password: "BjTKct22", + enable_starttls_auto: true + } # Enable threaded mode # config.threadsafe! diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index c9a65e1d..90e36697 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -182,11 +182,11 @@ Devise.setup do |config| # Turn scoped views on. Before rendering "sessions/new", it will first check for # "users/sessions/new". It's turned off by default because it's slower if you # are using only default views. - # config.scoped_views = false + config.scoped_views = true # Configure the default scope given to Warden. By default it's the first # devise role declared in your routes (usually :user). - # config.default_scope = :user + config.default_scope = :supplier # Configure sign_out behavior. # Sign_out action can be scoped (i.e. /users/sign_out affects only :user scope). diff --git a/config/locales/devise.nl.yml b/config/locales/devise.nl.yml index 5c740d21..555a1173 100644 --- a/config/locales/devise.nl.yml +++ b/config/locales/devise.nl.yml @@ -43,14 +43,13 @@ nl: registrations: title: Aanmelden button: Aanmelden - signed_up: 'Welcome! You have signed up successfully.' signed_up_but_unconfirmed: 'A message with a confirmation link has been sent to your email address. Please open the link to activate your account.' signed_up_but_inactive: 'You have signed up successfully. However, we could not sign you in because your account is not yet activated.' signed_up_but_locked: 'You have signed up successfully. However, we could not sign you in because your account is locked.' updated: 'You updated your account successfully.' update_needs_confirmation: "You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address." - signed_up: 'You have signed up successfully. If enabled, a confirmation was sent your e-mail.' + signed_up: 'Je hebt je succesvol aangemeld! Er wordt een bevestigingsmail toegestuurd' updated: 'You updated your account successfully.' destroyed: 'Bye! Your account was successfully cancelled. We hope to see you again soon.' sign_up: Acount aanvragen