diff --git a/app/assets/javascripts/admin.js b/app/assets/javascripts/admin.js index 5cf74790d..fa1863df8 100644 --- a/app/assets/javascripts/admin.js +++ b/app/assets/javascripts/admin.js @@ -46,6 +46,16 @@ Helpy.admin = function(){ $('.pick-a-color').pickAColor({ inlineDropdown: true //display underneath field }); + + $('input.send-email').off().on('change', function(){ + var chosen = $("input.send-email:radio:checked").val(); + if (chosen === 'true') { + $('.smtp-settings').removeClass('hidden'); + } else { + $('.smtp-settings').addClass('hidden'); + } + }); + }; $(document).on('page:change', Helpy.admin); diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index 6b5ac2ce8..4c8d6415a 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -416,18 +416,32 @@ def settings def update_settings + # NOTE: We iterate through settings here to establish our universe of settings to save + # this means if you add a setting, you MUST declare a default value in the "default_settings intializer" @settings = AppSettings.get_all # iterate through @settings.each do |setting| -# logger.info("Setting: #{setting[0]}") -# logger.info("Value: #{params[setting[0]]}") - AppSettings[setting[0]] = params[setting[0].to_sym] end - logger.info(params['i18n']) - AppSettings['i18n.available_locales'] = params['i18n.available_locales'] + # logger.info(params['i18n']) + # AppSettings['i18n.available_locales'] = params['i18n.available_locales'] + + # Configure griddler, mailer + # Griddler.configuration.email_service = params["email.mail_service"].to_sym + + # SMTP Settings from AppSettings + # ActionMailer::Base.smtp_settings = { + # :address => params["email.mail_smtp"], + # :port => params["email.mail_port"], + # :user_name => params["email.smtp_mail_username"], + # :password => params["email.smtp_mail_password"], + # :domain => params["email.mail_domain"] + # } + # + # # Toggle Delivery on and off via AppSettings + # ActionMailer::Base.perform_deliveries = AppSettings['email.send_email'] respond_to do |format| format.html { redirect_to(admin_settings_path) } diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index ecf254cfe..9d2260a1f 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -5,6 +5,7 @@ class ApplicationController < ActionController::Base add_breadcrumb :root before_action :set_locale + before_action :set_vars before_action :instantiate_tracker def url_options @@ -29,6 +30,32 @@ def set_locale end end + def set_vars + # Configure griddler, mailer + Griddler.configuration.email_service = AppSettings["email.mail_service"].to_sym + + ActionMailer::Base.smtp_settings = { + :address => AppSettings["email.mail_smtp"], + :port => AppSettings["email.mail_port"], + :user_name => AppSettings["email.smtp_mail_username"], + :password => AppSettings["email.smtp_mail_password"], + :domain => AppSettings["email.mail_domain"] + } + + ActionMailer::Base.perform_deliveries = to_boolean(AppSettings['email.send_email']) + + Cloudinary.config do |config| + config.cloud_name = AppSettings['cloudinary.cloud_name'] + config.api_key = AppSettings['cloudinary.api_key'] + config.api_secret = AppSettings['cloudinary.api_secret'] + end + + end + + def to_boolean(str) + str == 'true' + end + def fetch_counts @new = Topic.unread.count @unread = Topic.unread.count diff --git a/app/mailers/topic_mailer.rb b/app/mailers/topic_mailer.rb index d9813170c..ef41ba293 100644 --- a/app/mailers/topic_mailer.rb +++ b/app/mailers/topic_mailer.rb @@ -1,11 +1,13 @@ -#class TopicMailer < MandrillMailer::MessageMailer class TopicMailer < ActionMailer::Base - default from: "#{Settings.admin_email}" def new_ticket(topic) @topic = topic email_with_name = %("#{topic.user.name}" <#{topic.user.email}>) - mail(to: email_with_name, subject: "[#{AppSettings['settings.site_name']}] ##{topic.id}-#{topic.name}") + mail( + to: email_with_name, + from: %("#{AppSettings['settings.site_name']}" <#{AppSettings['email.admin_email']}>), + subject: "[#{AppSettings['settings.site_name']}] ##{topic.id}-#{topic.name}" + ) end end diff --git a/app/mailers/user_mailer.rb b/app/mailers/user_mailer.rb index 18247126b..0aa743030 100644 --- a/app/mailers/user_mailer.rb +++ b/app/mailers/user_mailer.rb @@ -1,12 +1,14 @@ class UserMailer < ActionMailer::Base - default from: Settings.from_email - def new_user(user, token) @user = user @token = token email_with_name = %("#{user.name}" <#{user.email}>) - mail(to: email_with_name, subject: "Welcome to #{AppSettings['settings.site_name']}") + mail( + to: email_with_name, + from: %("#{AppSettings['settings.site_name']}" <#{AppSettings['email.admin_email']}>), + subject: "Welcome to #{AppSettings['settings.site_name']}" + ) end end diff --git a/app/views/admin/settings.html.erb b/app/views/admin/settings.html.erb index 6af25b41e..478ef76d3 100644 --- a/app/views/admin/settings.html.erb +++ b/app/views/admin/settings.html.erb @@ -12,6 +12,8 @@
  • <%= link_to t("design", default: "Design"), '#', class: 'settings-link', "data-target" => "design" %>
  • <%= link_to t("i18n", default: "Internationalization"), '#', class: 'settings-link', "data-target" => "i18n" %>
  • <%= link_to t("widget", default: "Embed Widget"), '#', class: 'settings-link', "data-target" => "widget" %>
  • +
  • <%= link_to t("email", default: "Email Setup"), '#', class: 'settings-link', "data-target" => "email" %>
  • +
  • <%= link_to t("cloudinary", default: "Cloudinary"), '#', class: 'settings-link', "data-target" => "cloudinary" %>
  • @@ -20,6 +22,7 @@ <%= bootstrap_form_tag url: update_settings_path, method: 'put' do |f| %>
    <%= f.text_field 'settings.site_name', value: AppSettings['settings.site_name'], label: "Site Name" %> + <%= f.text_field 'settings.site_url', value: AppSettings['settings.site_url'], label: "Site URL" %> <%= f.text_field 'settings.parent_site', value: AppSettings['settings.parent_site'], label: "Parent Site" %> <%= f.text_field 'settings.parent_company', value: AppSettings['settings.parent_company'], label: "Parent Company" %> <%= f.text_field 'settings.site_tagline', value: AppSettings['settings.site_tagline'], label: "Site Tagline" %> @@ -68,13 +71,38 @@
    <%= select_default_locale %>
    + + + + +
    <%= f.submit "Save Settings", class: 'btn btn-warning' %>
    diff --git a/app/views/layouts/widget.html.erb b/app/views/layouts/widget.html.erb index f3c1d8cef..3ba0bf8e7 100644 --- a/app/views/layouts/widget.html.erb +++ b/app/views/layouts/widget.html.erb @@ -28,7 +28,7 @@ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); - ga('create', '<%= Settings.google_analytics_id %>', 'auto'); + ga('create', '<%= AppSettings['settings.google_analytics_id'] %>', 'auto'); $(document).ready(function(){ $('form').find("input").each(function(ev) diff --git a/config/initializers/default_settings.rb b/config/initializers/default_settings.rb index bb0499551..62a540e6a 100644 --- a/config/initializers/default_settings.rb +++ b/config/initializers/default_settings.rb @@ -28,3 +28,22 @@ # Widget: AppSettings.defaults["widget.show_on_support_site"] = "true" + +# Email specific: + +AppSettings.defaults["email.admin_email"] = Settings.admin_email +AppSettings.defaults["email.from_email"] = Settings.from_email +AppSettings.defaults["email.send_email"] = Settings.send_email + +AppSettings.defaults["email.mail_service"] = Settings.mail_service +AppSettings.defaults["email.smtp_mail_username"] = Settings.smtp_mail_username +AppSettings.defaults["email.smtp_mail_password"] = Settings.smtp_mail_password +AppSettings.defaults["email.mail_smtp"] = Settings.mail_smtp +AppSettings.defaults["email.mail_port"] = Settings.mail_port +AppSettings.defaults["email.mail_domain"]= Settings.mail_domain + +# Cloudinary: + +AppSettings.defaults['cloudinary.cloud_name'] = '' +AppSettings.defaults['cloudinary.api_key'] = '' +AppSettings.defaults['cloudinary.api_secret'] = '' diff --git a/test/controllers/admin_controller_test.rb b/test/controllers/admin_controller_test.rb index 943949e97..b5bf31fdf 100644 --- a/test/controllers/admin_controller_test.rb +++ b/test/controllers/admin_controller_test.rb @@ -301,4 +301,50 @@ class AdminControllerTest < ActionController::TestCase assert_equal '1', AppSettings['widget.show_on_support_site'] end + test 'an admin should be able to turn email delivery on and off' do + put :update_settings, + 'email.send_email' => 'false' + assert_no_difference 'ActionMailer::Base.deliveries.size' do + xhr :post, :create_ticket, topic: { user: { name: 'a user', email: 'anon@test.com' }, name: 'some new private topic', body: 'some body text', forum_id: 1 }, post: { body: 'this is the body' } + end + end + + test 'an admin should be able to add mail settings' do + put :update_settings, + 'email.admin_email' => 'test@test.com', + 'email.from_email' => 'test@test.com', + 'email.mail_service' => 'mailgun', + 'email.mail_smtp' => 'mail.test.com', + 'email.smtp_mail_username' => 'test-login', + 'email.smtp_mail_password' => '1234', + 'email.mail_port' => '587', + 'email.mail_domain' => 'something.com' + assert_redirected_to :admin_settings + + assert_equal 'test@test.com', AppSettings['email.admin_email'] + assert_equal 'test@test.com', AppSettings['email.from_email'] + assert_equal 'mailgun', AppSettings['email.mail_service'] + assert_equal 'mail.test.com', AppSettings['email.mail_smtp'] + assert_equal 'test-login', AppSettings['email.smtp_mail_username'] + assert_equal '1234', AppSettings['email.smtp_mail_password'] + assert_equal '587', AppSettings['email.mail_port'] + assert_equal 'something.com', AppSettings['email.mail_domain'] + end + + test 'an admin should be able to add a cloudinary key' do + put :update_settings, + 'cloudinary.cloud_name' => 'something', + 'cloudinary.api_key' => 'something', + 'cloudinary.api_secret' => 'something' + assert_redirected_to :admin_settings + + assert_equal 'something', AppSettings['cloudinary.cloud_name'] + assert_equal 'something', AppSettings['cloudinary.api_key'] + assert_equal 'something', AppSettings['cloudinary.api_secret'] + get :settings + assert_equal 'something', Cloudinary.config.cloud_name + assert_equal 'something', Cloudinary.config.api_key + assert_equal 'something', Cloudinary.config.api_secret + end + end diff --git a/test/test_helper.rb b/test/test_helper.rb index 0f461a7b7..cfbfa3358 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -41,4 +41,16 @@ def set_default_settings AppSettings['i18n.default_locale'] = 'en' AppSettings['i18n.available_locales'] = ['en', 'fr', 'de', 'et'] AppSettings['widget.show_on_support_site'] = 'true' + AppSettings['email.admin_email'] = Settings.admin_email + AppSettings['email.from_email'] = Settings.from_email + AppSettings['email.send_email'] = 'true' + AppSettings['email.mail_service'] = Settings.mail_service + AppSettings['email.smtp_mail_username'] = Settings.smtp_mail_username + AppSettings['email.smtp_mail_password'] = Settings.smtp_mail_password + AppSettings['email.mail_smtp'] = Settings.mail_smtp + AppSettings['email.mail_port'] = Settings.mail_port + AppSettings['email.mail_domain'] = Settings.mail_domain + AppSettings['cloudinary.cloud_name'] = '' + AppSettings['cloudinary.api_key'] = '' + AppSettings['cloudinary.api_secret'] = '' end