diff --git a/app/controllers/admin/environment_email_templates_controller.rb b/app/controllers/admin/environment_email_templates_controller.rb
new file mode 100644
index 0000000..5326bc0
--- /dev/null
+++ b/app/controllers/admin/environment_email_templates_controller.rb
@@ -0,0 +1,15 @@
+class EnvironmentEmailTemplatesController < EmailTemplatesController
+
+ protect 'manage_email_templates', :environment
+
+ protected
+
+ def owner
+ environment
+ end
+
+ before_filter :only => :index do
+ @back_to = url_for(:controller => :admin_panel)
+ end
+
+end
diff --git a/app/controllers/email_templates_controller.rb b/app/controllers/email_templates_controller.rb
new file mode 100644
index 0000000..48eda4e
--- /dev/null
+++ b/app/controllers/email_templates_controller.rb
@@ -0,0 +1,62 @@
+class EmailTemplatesController < ApplicationController
+
+ def index
+ @email_templates = owner.email_templates
+ end
+
+ def show
+ @email_template = owner.email_templates.find(params[:id])
+
+ respond_to do |format|
+ format.html # show.html.erb
+ format.json { render json: @email_template }
+ end
+ end
+
+ def show_parsed
+ @email_template = owner.email_templates.find(params[:id])
+ template_params = {:profile => owner, :environment => environment}
+ render json: {:parsed_body => @email_template.parsed_body(template_params), :parsed_subject => @email_template.parsed_subject(template_params)}
+ end
+
+ def new
+ @email_template = owner.email_templates.build(:owner => owner)
+ end
+
+ def edit
+ @email_template = owner.email_templates.find(params[:id])
+ end
+
+ def create
+ @email_template = owner.email_templates.build(params[:email_template])
+ @email_template.owner = owner
+
+ if @email_template.save
+ session[:notice] = _('Email template was successfully created.')
+ redirect_to url_for(:action => :index)
+ else
+ render action: "new"
+ end
+ end
+
+ def update
+ @email_template = owner.email_templates.find(params[:id])
+
+ if @email_template.update_attributes(params[:email_template])
+ session[:notice] = _('Email template was successfully updated.')
+ redirect_to url_for(:action => :index)
+ else
+ render action: "edit"
+ end
+ end
+
+ def destroy
+ @email_template = owner.email_templates.find(params[:id])
+ @email_template.destroy
+
+ respond_to do |format|
+ format.html { redirect_to url_for(:action => :index)}
+ format.json { head :no_content }
+ end
+ end
+end
diff --git a/app/controllers/my_profile/email_templates_controller.rb b/app/controllers/my_profile/email_templates_controller.rb
deleted file mode 100644
index 3429ebc..0000000
--- a/app/controllers/my_profile/email_templates_controller.rb
+++ /dev/null
@@ -1,63 +0,0 @@
-class EmailTemplatesController < MyProfileController
-
- protect 'manage_email_templates', :profile
-
- def index
- @email_templates = profile.email_templates
- end
-
- def show
- @email_template = profile.email_templates.find(params[:id])
-
- respond_to do |format|
- format.html # show.html.erb
- format.json { render json: @email_template }
- end
- end
-
- def show_parsed
- @email_template = profile.email_templates.find(params[:id])
- template_params = {:profile => profile, :environment => environment}
- render json: {:parsed_body => @email_template.parsed_body(template_params), :parsed_subject => @email_template.parsed_subject(template_params)}
- end
-
- def new
- @email_template = profile.email_templates.build(:owner => profile)
- end
-
- def edit
- @email_template = profile.email_templates.find(params[:id])
- end
-
- def create
- @email_template = profile.email_templates.build(params[:email_template], :owner => profile)
-
- if @email_template.save
- session[:notice] = _('Email template was successfully created.')
- redirect_to url_for(:action => :index)
- else
- render action: "new"
- end
- end
-
- def update
- @email_template = profile.email_templates.find(params[:id])
-
- if @email_template.update_attributes(params[:email_template])
- session[:notice] = _('Email template was successfully updated.')
- redirect_to url_for(:action => :index)
- else
- render action: "edit"
- end
- end
-
- def destroy
- @email_template = profile.email_templates.find(params[:id])
- @email_template.destroy
-
- respond_to do |format|
- format.html { redirect_to url_for(:action => :index)}
- format.json { head :no_content }
- end
- end
-end
diff --git a/app/controllers/my_profile/profile_email_templates_controller.rb b/app/controllers/my_profile/profile_email_templates_controller.rb
new file mode 100644
index 0000000..1aba8a7
--- /dev/null
+++ b/app/controllers/my_profile/profile_email_templates_controller.rb
@@ -0,0 +1,16 @@
+class ProfileEmailTemplatesController < EmailTemplatesController
+
+ needs_profile
+ protect 'manage_email_templates', :profile
+
+ protected
+
+ def owner
+ profile
+ end
+
+ before_filter :only => :index do
+ @back_to = url_for(:controller => :profile_editor)
+ end
+
+end
diff --git a/app/helpers/task_helper.rb b/app/helpers/task_helper.rb
index 1173a1f..86242f6 100644
--- a/app/helpers/task_helper.rb
+++ b/app/helpers/task_helper.rb
@@ -5,7 +5,7 @@ module TaskHelper
content_tag(
:div,
- labelled_form_field(description, select_tag("tasks[#{task.id}][task][email_template_id]", options_from_collection_for_select(email_templates, :id, :name), :include_blank => include_blank, 'data-url' => url_for(:controller => 'email_templates', :action => 'show_parsed', :profile => profile.identifier))),
+ labelled_form_field(description, select_tag("tasks[#{task.id}][task][email_template_id]", options_from_collection_for_select(email_templates, :id, :name), :include_blank => include_blank, 'data-url' => url_for(:controller => 'profile_email_templates', :action => 'show_parsed', :profile => profile.identifier))),
:class => 'template-selection'
)
end
diff --git a/app/models/email_template.rb b/app/models/email_template.rb
index 4a75a63..2b18be1 100644
--- a/app/models/email_template.rb
+++ b/app/models/email_template.rb
@@ -31,6 +31,10 @@ class EmailTemplate < ActiveRecord::Base
HashWithIndifferentAccess.new EmailTemplate.available_types.select {|k, v| owner.kind_of?(v[:owner_type])}
end
+ def type_description
+ available_types.fetch(template_type, {})[:description]
+ end
+
def unique_by_type?
available_types.fetch(template_type, {})[:unique]
end
diff --git a/app/models/environment.rb b/app/models/environment.rb
index 2ee1c98..75db050 100644
--- a/app/models/environment.rb
+++ b/app/models/environment.rb
@@ -51,6 +51,7 @@ class Environment < ActiveRecord::Base
'manage_environment_licenses' => N_('Manage environment licenses'),
'manage_environment_trusted_sites' => N_('Manage environment trusted sites'),
'edit_appearance' => N_('Edit appearance'),
+ 'manage_email_templates' => N_('Manage Email Templates'),
}
module Roles
diff --git a/app/views/admin_panel/index.html.erb b/app/views/admin_panel/index.html.erb
index eab20d5..6dbca60 100644
--- a/app/views/admin_panel/index.html.erb
+++ b/app/views/admin_panel/index.html.erb
@@ -11,6 +11,7 @@
<%= link_to _('Homepage'), :action => 'set_portal_community' %> |
<%= link_to _('Licenses'), :controller =>'licenses' %> |
<%= link_to _('Trusted sites'), :controller =>'trusted_sites' %> |
+ <%= link_to _('Email templates'), :controller =>'environment_email_templates' %> |
<%= _('Profiles') %>
diff --git a/app/views/email_templates/_form.html.erb b/app/views/email_templates/_form.html.erb
index 4de3081..6db38a1 100644
--- a/app/views/email_templates/_form.html.erb
+++ b/app/views/email_templates/_form.html.erb
@@ -1,4 +1,4 @@
-<%= form_for(@email_template, :url => {:controller => :email_templates, :action => @email_template.persisted? ? :update : :create, :id => @email_template.id}) do |f| %>
+<%= form_for(@email_template, :url => {:action => @email_template.persisted? ? :update : :create, :id => @email_template.id}) do |f| %>
<%= error_messages_for :email_template if @email_template.errors.any? %>
@@ -25,7 +25,7 @@
<%= submit_button(:save, _('Save')) %>
- <%= button(:back, _('Back'), :controller => :email_templates) %>
+ <%= button(:back, _('Back'), :action => :index) %>
<% end %>
diff --git a/app/views/email_templates/index.html.erb b/app/views/email_templates/index.html.erb
index 3bf0329..45cd2e8 100644
--- a/app/views/email_templates/index.html.erb
+++ b/app/views/email_templates/index.html.erb
@@ -11,10 +11,10 @@
<% @email_templates.each do |email_template| %>
<%= email_template.name %> |
- <%= email_template.available_types[email_template.template_type][:description] if email_template.template_type.present? %> |
+ <%= email_template.type_description %> |
- <%= button_without_text(:edit, _('Edit'), {:controller => :email_templates, :action => :edit, :id => email_template.id}) %>
- <%= button_without_text(:remove, _('Remove'), {:controller => :email_templates, :action => :destroy, :id => email_template.id}, method: :delete, data: { confirm: 'Are you sure?' }) %>
+ <%= button_without_text(:edit, _('Edit'), {:action => :edit, :id => email_template.id}) %>
+ <%= button_without_text(:remove, _('Remove'), {:action => :destroy, :id => email_template.id}, method: :delete, data: { confirm: 'Are you sure?' }) %>
|
<% end %>
@@ -22,6 +22,6 @@
- <%= button(:new, _('New template'), :controller => :email_templates, :action => :new) %>
- <%= button(:back, _('Back to control panel'), :controller => :profile_editor) %>
+ <%= button(:new, _('New template'), :action => :new) %>
+ <%= button(:back, _('Back'), @back_to) %>
diff --git a/app/views/email_templates/show.html.erb b/app/views/email_templates/show.html.erb
index 6661671..14493b7 100644
--- a/app/views/email_templates/show.html.erb
+++ b/app/views/email_templates/show.html.erb
@@ -1,5 +1,5 @@
<%= notice %>
-<%= link_to 'Edit', url_for(:controller => :email_templates, :action => :edit, :id => @email_template.id) %> |
-<%= link_to 'Back', url_for(:controller => :email_templates) %>
+<%= link_to 'Edit', url_for(:action => :edit, :id => @email_template.id) %> |
+<%= link_to 'Back', url_for(:action => :index) %>
diff --git a/app/views/profile/send_mail.html.erb b/app/views/profile/send_mail.html.erb
index cd2c197..e8d9a92 100644
--- a/app/views/profile/send_mail.html.erb
+++ b/app/views/profile/send_mail.html.erb
@@ -6,7 +6,7 @@
<% if @email_templates.present? %>
- <%= labelled_form_field(_('Select a template:'), select_tag(:template, options_from_collection_for_select(@email_templates, :id, :name), :include_blank => true, 'data-url' => url_for(:controller => 'email_templates', :action => 'show_parsed'))) %>
+ <%= labelled_form_field(_('Select a template:'), select_tag(:template, options_from_collection_for_select(@email_templates, :id, :name), :include_blank => true, 'data-url' => url_for(:controller => 'profile_email_templates', :action => 'show_parsed'))) %>
<% end %>
diff --git a/app/views/profile_editor/index.html.erb b/app/views/profile_editor/index.html.erb
index 81ed334..4d9a715 100644
--- a/app/views/profile_editor/index.html.erb
+++ b/app/views/profile_editor/index.html.erb
@@ -72,7 +72,7 @@
<%= control_panel_button(_('Edit welcome page'), 'welcome-page', :action => 'welcome_page') if has_welcome_page %>
- <%= control_panel_button(_('Email Templates'), 'email-templates', :controller => :email_templates) if profile.organization? %>
+ <%= control_panel_button(_('Email Templates'), 'email-templates', :controller => :profile_email_templates) if profile.organization? %>
<% @plugins.dispatch(:control_panel_buttons).each do |button| %>
<%= control_panel_button(button[:title], button[:icon], button[:url], button[:html_options]) %>
diff --git a/test/fixtures/roles.yml b/test/fixtures/roles.yml
index 90bc9f4..c846ce2 100644
--- a/test/fixtures/roles.yml
+++ b/test/fixtures/roles.yml
@@ -38,6 +38,7 @@ four:
- manage_environment_organizations
- manage_environment_templates
- manage_environment_licenses
+ - manage_email_templates
profile_admin:
id: 5
environment_id: 1
@@ -60,6 +61,7 @@ profile_admin:
- manage_friends
- validate_enterprise
- publish_content
+ - manage_email_templates
profile_member:
id: 6
environment_id: 1
@@ -100,3 +102,4 @@ environment_administrator:
- destroy_profile
- manage_environment_templates
- manage_environment_licenses
+ - manage_email_templates
diff --git a/test/functional/email_templates_controller_test.rb b/test/functional/email_templates_controller_test.rb
deleted file mode 100644
index c6edda9..0000000
--- a/test/functional/email_templates_controller_test.rb
+++ /dev/null
@@ -1,68 +0,0 @@
-require 'test_helper'
-
-class EmailTemplatesControllerTest < ActionController::TestCase
-
- setup do
- @profile = fast_create(Community)
- @email_template = EmailTemplate.create!(:name => 'template', :owner => @profile)
- @person = create_user_with_permission('templatemanager', 'manage_email_templates', @profile)
- login_as(@person.user.login)
- end
-
- attr_accessor :profile, :person
-
- test "should get index" do
- get :index, :profile => profile.identifier
- assert_response :success
- assert_not_nil assigns(:email_templates)
- end
-
- test "should get new" do
- get :new, :profile => profile.identifier
- assert_response :success
- end
-
- test "should create email_template" do
- assert_difference('EmailTemplate.count') do
- post :create, email_template: { :name => 'test' }, :profile => profile.identifier
- end
-
- assert_redirected_to url_for(:action => :index)
- end
-
- test "should show email_template" do
- get :show, id: @email_template, :profile => profile.identifier
- assert_response :success
- end
-
- test "should get edit" do
- get :edit, id: @email_template, :profile => profile.identifier
- assert_response :success
- end
-
- test "should update email_template" do
- put :update, id: @email_template, email_template: { }, :profile => profile.identifier
- assert_redirected_to url_for(:action => :index)
- end
-
- test "should destroy email_template" do
- assert_difference('EmailTemplate.count', -1) do
- delete :destroy, id: @email_template, :profile => profile.identifier
- end
-
- assert_redirected_to url_for(:action => :index)
- end
-
- test "should get parsed template" do
- environment = Environment.default
- @email_template.subject = '{{profile.name}} - {{profile.identifier}}'
- @email_template.body = '{{profile.name}} - {{profile.identifier}} - {{environment.name}}'
- @email_template.save!
- get :show_parsed, id: @email_template, :profile => profile.identifier
- assert_response :success
- json_response = ActiveSupport::JSON.decode(@response.body)
- assert_equal "#{profile.name} - #{profile.identifier}", json_response['parsed_subject']
- assert_equal "#{profile.name} - #{profile.identifier} - #{environment.name}", json_response['parsed_body']
- end
-
-end
diff --git a/test/functional/environment_email_templates_controller_test.rb b/test/functional/environment_email_templates_controller_test.rb
new file mode 100644
index 0000000..b7e4a87
--- /dev/null
+++ b/test/functional/environment_email_templates_controller_test.rb
@@ -0,0 +1,65 @@
+require 'test_helper'
+
+class EnvironmentEmailTemplatesControllerTest < ActionController::TestCase
+
+ setup do
+ @email_template = EmailTemplate.create!(:name => 'template', :owner => Environment.default)
+ person = create_user_with_permission('template_manager', 'manage_email_templates', Environment.default)
+ login_as(person.user.login)
+ end
+
+ test "should get index" do
+ get :index
+ assert_response :success
+ assert_not_nil assigns(:email_templates)
+ end
+
+ test "should get new" do
+ get :new
+ assert_response :success
+ end
+
+ test "should create email_template" do
+ assert_difference('EmailTemplate.count') do
+ post :create, email_template: { :name => 'test' }
+ end
+
+ assert_redirected_to url_for(:action => :index)
+ end
+
+ test "should show email_template" do
+ get :show, id: @email_template
+ assert_response :success
+ end
+
+ test "should get edit" do
+ get :edit, id: @email_template
+ assert_response :success
+ end
+
+ test "should update email_template" do
+ put :update, id: @email_template, email_template: { }
+ assert_redirected_to url_for(:action => :index)
+ end
+
+ test "should destroy email_template" do
+ assert_difference('EmailTemplate.count', -1) do
+ delete :destroy, id: @email_template
+ end
+
+ assert_redirected_to url_for(:action => :index)
+ end
+
+ test "should get parsed template" do
+ environment = Environment.default
+ @email_template.subject = '{{environment.name}}'
+ @email_template.body = '{{environment.name}}'
+ @email_template.save!
+ get :show_parsed, id: @email_template
+ assert_response :success
+ json_response = ActiveSupport::JSON.decode(@response.body)
+ assert_equal "#{environment.name}", json_response['parsed_subject']
+ assert_equal "#{environment.name}", json_response['parsed_body']
+ end
+
+end
diff --git a/test/functional/profile_editor_controller_test.rb b/test/functional/profile_editor_controller_test.rb
index 3c3aebb..de3294e 100644
--- a/test/functional/profile_editor_controller_test.rb
+++ b/test/functional/profile_editor_controller_test.rb
@@ -629,7 +629,7 @@ class ProfileEditorControllerTest < ActionController::TestCase
should 'display email template link for organizations in control panel' do
profile = fast_create(Organization)
get :index, :profile => profile.identifier
- assert_tag :tag => 'a', :attributes => { :href => "/myprofile/#{profile.identifier}/email_templates" }
+ assert_tag :tag => 'a', :attributes => { :href => "/myprofile/#{profile.identifier}/profile_email_templates" }
end
should 'not display email template link in control panel for person' do
diff --git a/test/functional/profile_email_templates_controller_test.rb b/test/functional/profile_email_templates_controller_test.rb
new file mode 100644
index 0000000..612dc15
--- /dev/null
+++ b/test/functional/profile_email_templates_controller_test.rb
@@ -0,0 +1,68 @@
+require 'test_helper'
+
+class ProfileEmailTemplatesControllerTest < ActionController::TestCase
+
+ setup do
+ @profile = fast_create(Community)
+ @email_template = EmailTemplate.create!(:name => 'template', :owner => @profile)
+ @person = create_user_with_permission('templatemanager', 'manage_email_templates', @profile)
+ login_as(@person.user.login)
+ end
+
+ attr_accessor :profile, :person
+
+ test "should get index" do
+ get :index, :profile => profile.identifier
+ assert_response :success
+ assert_not_nil assigns(:email_templates)
+ end
+
+ test "should get new" do
+ get :new, :profile => profile.identifier
+ assert_response :success
+ end
+
+ test "should create email_template" do
+ assert_difference('EmailTemplate.count') do
+ post :create, email_template: { :name => 'test' }, :profile => profile.identifier
+ end
+
+ assert_redirected_to url_for(:action => :index)
+ end
+
+ test "should show email_template" do
+ get :show, id: @email_template, :profile => profile.identifier
+ assert_response :success
+ end
+
+ test "should get edit" do
+ get :edit, id: @email_template, :profile => profile.identifier
+ assert_response :success
+ end
+
+ test "should update email_template" do
+ put :update, id: @email_template, email_template: { }, :profile => profile.identifier
+ assert_redirected_to url_for(:action => :index)
+ end
+
+ test "should destroy email_template" do
+ assert_difference('EmailTemplate.count', -1) do
+ delete :destroy, id: @email_template, :profile => profile.identifier
+ end
+
+ assert_redirected_to url_for(:action => :index)
+ end
+
+ test "should get parsed template" do
+ environment = Environment.default
+ @email_template.subject = '{{profile.name}} - {{profile.identifier}}'
+ @email_template.body = '{{profile.name}} - {{profile.identifier}} - {{environment.name}}'
+ @email_template.save!
+ get :show_parsed, id: @email_template, :profile => profile.identifier
+ assert_response :success
+ json_response = ActiveSupport::JSON.decode(@response.body)
+ assert_equal "#{profile.name} - #{profile.identifier}", json_response['parsed_subject']
+ assert_equal "#{profile.name} - #{profile.identifier} - #{environment.name}", json_response['parsed_body']
+ end
+
+end
--
libgit2 0.21.2