Commit 211e635e02365fe7a5087b150807885a5c8255be
Committed by
Arthur Esposte
1 parent
c6a2cc53
Exists in
master
and in
1 other branch
Create environment notification plugin
Signed-off-by: Arthur Del Esposte <arthurmde@gmail.com> Signed-off-by: Eduardo Vital <vitaldu@gmail.com> Signed-off-by: Gabriela Navarro <navarro1703@gmail.com> Signed-off-by: Fabio Teixeira <fabio1079@gmail.com> Signed-off-by: Jéssica Cristina <jessica.cris1127@gmail.com> Signed-off-by: Simião Carvalho <simiaosimis@gmail.com> Signed-off-by: Victor Navarro <victor.matias.navarro@gmail.com> Signed-off-by: Pedro de Lyra <pedrodelyra@gmail.com> Signed-off-by: Tallys Martins <tallysmartins@yahoo.com.br>
Showing
23 changed files
with
721 additions
and
0 deletions
Show diff stats
plugins/environment_notification/controllers/environment_notification_plugin_admin_controller.rb
0 → 100644
@@ -0,0 +1,80 @@ | @@ -0,0 +1,80 @@ | ||
1 | +class EnvironmentNotificationPluginAdminController < AdminController | ||
2 | + before_filter :admin_required, :except => [:hide_notification] | ||
3 | + def index | ||
4 | + @notifications = environment.environment_notifications.order('updated_at DESC') | ||
5 | + end | ||
6 | + | ||
7 | + def new | ||
8 | + @notification = EnvironmentNotificationPlugin::EnvironmentNotification.new | ||
9 | + if request.post? | ||
10 | + @notification = EnvironmentNotificationPlugin::EnvironmentNotification.new(params[:notifications]) | ||
11 | + @notification.message = @notification.message.html_safe | ||
12 | + @notification.environment_id = environment.id | ||
13 | + if @notification.save | ||
14 | + session[:notice] = _("Notification successfully created") | ||
15 | + redirect_to :action => :index | ||
16 | + else | ||
17 | + session[:notice] = _("Notification couldn't be created") | ||
18 | + end | ||
19 | + end | ||
20 | + end | ||
21 | + | ||
22 | + def destroy | ||
23 | + if request.delete? | ||
24 | + notification = environment.environment_notifications.find_by_id(params[:id]) | ||
25 | + if notification && notification.destroy | ||
26 | + session[:notice] = _('The notification was deleted.') | ||
27 | + else | ||
28 | + session[:notice] = _('Could not remove the notification') | ||
29 | + end | ||
30 | + end | ||
31 | + redirect_to :action => :index | ||
32 | + end | ||
33 | + | ||
34 | + def edit | ||
35 | + @notification = environment.environment_notifications.find_by_id(params[:id]) | ||
36 | + if request.post? | ||
37 | + if @notification.update_attributes(params[:notifications]) | ||
38 | + session[:notice] = _('The notification was edited.') | ||
39 | + else | ||
40 | + session[:notice] = _('Could not edit the notification.') | ||
41 | + end | ||
42 | + redirect_to :action => :index | ||
43 | + end | ||
44 | + end | ||
45 | + | ||
46 | + def change_status | ||
47 | + @notification = environment.environment_notifications.find_by_id(params[:id]) | ||
48 | + | ||
49 | + @notification.active = !@notification.active | ||
50 | + | ||
51 | + if @notification.save! | ||
52 | + session[:notice] = _('The status of the notification was changed.') | ||
53 | + else | ||
54 | + session[:notice] = _('Could not change the status of the notification.') | ||
55 | + end | ||
56 | + | ||
57 | + redirect_to :action => :index | ||
58 | + end | ||
59 | + | ||
60 | + def hide_notification | ||
61 | + result = false | ||
62 | + | ||
63 | + if logged_in? | ||
64 | + @notification = environment.environment_notifications.find_by_id(params[:notification_id]) | ||
65 | + | ||
66 | + if @notification | ||
67 | + @notification.users << current_user | ||
68 | + result = @notification.users.include?(current_user) | ||
69 | + end | ||
70 | + end | ||
71 | + | ||
72 | + render json: result | ||
73 | + end | ||
74 | + | ||
75 | + protected | ||
76 | + def admin_required | ||
77 | + redirect_to :root unless current_user.person.is_admin? | ||
78 | + end | ||
79 | + | ||
80 | +end |
plugins/environment_notification/db/migrate/20150721132025_create_notification_table.rb
0 → 100644
@@ -0,0 +1,24 @@ | @@ -0,0 +1,24 @@ | ||
1 | +class CreateNotificationTable < ActiveRecord::Migration | ||
2 | + def up | ||
3 | + create_table :environment_notifications do |t| | ||
4 | + t.text :message | ||
5 | + t.integer :environment_id | ||
6 | + t.string :type | ||
7 | + t.boolean :active | ||
8 | + t.boolean :display_only_in_homepage, :default => false | ||
9 | + t.boolean :display_to_all_users, :default => false | ||
10 | + t.column :created_at, :datetime | ||
11 | + t.column :updated_at, :datetime | ||
12 | + end | ||
13 | + | ||
14 | + create_table :environment_notifications_users, id: false do |t| | ||
15 | + t.belongs_to :environment_notification, index: true | ||
16 | + t.belongs_to :user, index: true | ||
17 | + end | ||
18 | + end | ||
19 | + | ||
20 | + def down | ||
21 | + drop_table :environment_notifications | ||
22 | + drop_table :environment_notifications_users | ||
23 | + end | ||
24 | +end |
plugins/environment_notification/lib/environment_notification_plugin.rb
0 → 100644
@@ -0,0 +1,29 @@ | @@ -0,0 +1,29 @@ | ||
1 | +class EnvironmentNotificationPlugin < Noosfero::Plugin | ||
2 | + | ||
3 | + def self.plugin_name | ||
4 | + "Environment Notifications Plugin" | ||
5 | + end | ||
6 | + | ||
7 | + def self.plugin_description | ||
8 | + _("A plugin for environment notifications.") | ||
9 | + end | ||
10 | + | ||
11 | + def stylesheet? | ||
12 | + true | ||
13 | + end | ||
14 | + | ||
15 | + def js_files | ||
16 | + %w( | ||
17 | + public/environment_notification_plugin.js | ||
18 | + ) | ||
19 | + end | ||
20 | + | ||
21 | + def body_beginning | ||
22 | + expanded_template('environment_notification_plugin_admin/show_notification.html.erb') | ||
23 | + end | ||
24 | + | ||
25 | + def admin_panel_links | ||
26 | + {:title => _('Notification Manager'), :url => {:controller => 'environment_notification_plugin_admin', :action => 'index'}} | ||
27 | + end | ||
28 | + | ||
29 | +end |
plugins/environment_notification/lib/environment_notifications_user.rb
0 → 100644
@@ -0,0 +1,10 @@ | @@ -0,0 +1,10 @@ | ||
1 | +class EnvironmentNotificationsUser < ActiveRecord::Base | ||
2 | + self.table_name = "environment_notifications_users" | ||
3 | + | ||
4 | + belongs_to :user | ||
5 | + belongs_to :environment_notification, class_name: 'EnvironmentNotificationPlugin::EnvironmentNotification' | ||
6 | + | ||
7 | + attr_accessible :user_id, :environment_notification_id | ||
8 | + | ||
9 | + validates_uniqueness_of :user_id, :scope => :environment_notification_id | ||
10 | +end |
plugins/environment_notification/models/environment_notification_plugin/danger_notification.rb
0 → 100644
plugins/environment_notification/models/environment_notification_plugin/environment_notification.rb
0 → 100644
@@ -0,0 +1,27 @@ | @@ -0,0 +1,27 @@ | ||
1 | +class EnvironmentNotificationPlugin::EnvironmentNotification < ActiveRecord::Base | ||
2 | + | ||
3 | + self.table_name = "environment_notifications" | ||
4 | + | ||
5 | + TYPE_LIST = [ | ||
6 | + "EnvironmentNotificationPlugin::WarningNotification", | ||
7 | + "EnvironmentNotificationPlugin::SuccessNotification", | ||
8 | + "EnvironmentNotificationPlugin::InformationNotification", | ||
9 | + "EnvironmentNotificationPlugin::DangerNotification" | ||
10 | + ] | ||
11 | + | ||
12 | + attr_accessible :message, :environment_id, :active, :type, :display_only_in_homepage, :display_to_all_users | ||
13 | + | ||
14 | + has_many :environment_notifications_users | ||
15 | + has_many :users, :through => :environment_notifications_users | ||
16 | + | ||
17 | + validates_presence_of :message | ||
18 | + validates_presence_of :environment_id | ||
19 | + validate :notification_type_must_be_in_type_list | ||
20 | + | ||
21 | + def notification_type_must_be_in_type_list | ||
22 | + unless TYPE_LIST.include?(type) | ||
23 | + errors.add(:type, "invalid notification type") | ||
24 | + end | ||
25 | + end | ||
26 | + | ||
27 | +end |
plugins/environment_notification/models/environment_notification_plugin/information_notification.rb
0 → 100644
plugins/environment_notification/models/environment_notification_plugin/success_notification.rb
0 → 100644
plugins/environment_notification/models/environment_notification_plugin/warning_notification.rb
0 → 100644
plugins/environment_notification/public/environment_notification_plugin.js
0 → 100644
@@ -0,0 +1,40 @@ | @@ -0,0 +1,40 @@ | ||
1 | +(function($) { | ||
2 | + "use strict"; | ||
3 | + | ||
4 | + function notificationBar() { | ||
5 | + var completeMessage = $(".notification-bar").remove(); | ||
6 | + $("#content-inner").before(completeMessage); | ||
7 | + }, | ||
8 | + | ||
9 | + function hideNotification(){ | ||
10 | + var notification = $(this).parent(); | ||
11 | + var id = notification.attr("data-notification"); | ||
12 | + | ||
13 | + $.ajax({ | ||
14 | + url: noosfero_root()+"/admin/plugin/environment_notification/hide_notification", | ||
15 | + type: "POST", | ||
16 | + data: {notification_id: id}, | ||
17 | + success: function(response) { | ||
18 | + notification.fadeOut(); | ||
19 | + } | ||
20 | + }); | ||
21 | + } | ||
22 | + | ||
23 | + function mceRestrict() { | ||
24 | + tinyMCE.init({ | ||
25 | + menubar : false, | ||
26 | + selector: "textarea", | ||
27 | + plugins: [ | ||
28 | + "autolink link" | ||
29 | + ], | ||
30 | + toolbar: "bold italic underline | link" | ||
31 | + }); | ||
32 | + } | ||
33 | + | ||
34 | + jQuery(document).ready(function(){ | ||
35 | + notificationBar(); | ||
36 | + $(".notification-close").on("click", hideNotification); | ||
37 | + mceRestrict(); | ||
38 | + }); | ||
39 | + | ||
40 | +})(jQuery); | ||
0 | \ No newline at end of file | 41 | \ No newline at end of file |
240 Bytes
389 Bytes
364 Bytes
@@ -0,0 +1,141 @@ | @@ -0,0 +1,141 @@ | ||
1 | +.notification-bar { | ||
2 | + display: block; | ||
3 | +} | ||
4 | + | ||
5 | +.notification:hover { | ||
6 | + opacity: 0.8; | ||
7 | +} | ||
8 | + | ||
9 | +#notification-manager { | ||
10 | + overflow: auto; | ||
11 | +} | ||
12 | + | ||
13 | +.notification .notification-close { | ||
14 | + background: url(public/images/close.png) no-repeat; | ||
15 | + background-position: center; | ||
16 | + width: 20px; | ||
17 | + height: 20px; | ||
18 | +} | ||
19 | + | ||
20 | +.warningnotification, | ||
21 | +.informationnotification, | ||
22 | +.successnotification, | ||
23 | +.dangernotification { | ||
24 | + margin-bottom: 10px; | ||
25 | + padding: 7px 10px; | ||
26 | + border-radius: 5px; | ||
27 | + border: 1px solid blue; | ||
28 | + font-size: 16px; | ||
29 | + color: white; | ||
30 | + overflow: auto; | ||
31 | +} | ||
32 | + | ||
33 | +.warningnotification p, | ||
34 | +.informationnotification p, | ||
35 | +.successnotification p, | ||
36 | +.dangernotification p { | ||
37 | + margin: 0px; | ||
38 | +} | ||
39 | + | ||
40 | +.warningnotification { | ||
41 | + background: #EEA236; | ||
42 | + border: 1px solid #EEA236; | ||
43 | +} | ||
44 | + | ||
45 | +.informationnotification { | ||
46 | + background: #5BC0DE; | ||
47 | + border: 1px solid #46B8DA; | ||
48 | +} | ||
49 | + | ||
50 | +.successnotification { | ||
51 | + background: #5CB85C; | ||
52 | + border: 1px solid #4CAE4C; | ||
53 | +} | ||
54 | + | ||
55 | +.dangernotification { | ||
56 | + background: #C9302C; | ||
57 | + border: 1px solid #AC2925; | ||
58 | +} | ||
59 | + | ||
60 | +a.button.icon-deactivate { | ||
61 | + background: url(public/images/hide.png) no-repeat; | ||
62 | + background-position: center; | ||
63 | +} | ||
64 | + | ||
65 | +a.button.icon-activate { | ||
66 | + background: url(public/images/show.png) no-repeat; | ||
67 | + background-position: center; | ||
68 | +} | ||
69 | + | ||
70 | +.notification-line { | ||
71 | + display: inline; | ||
72 | + padding-top: 10px; | ||
73 | + vertical-align: middle; | ||
74 | + border-bottom: 1px solid #ccc; | ||
75 | +} | ||
76 | + | ||
77 | +.notification-title-bar { | ||
78 | + float: left; | ||
79 | + width: 100%; | ||
80 | + font-style: 14px; | ||
81 | + font-weight: 700; | ||
82 | + border-bottom: 2px solid black; | ||
83 | + padding: 9px 0; | ||
84 | +} | ||
85 | + | ||
86 | +.notification-title { | ||
87 | + width: 80%; | ||
88 | + float: left; | ||
89 | + text-align: center; | ||
90 | +} | ||
91 | + | ||
92 | +.action-title { | ||
93 | + width: 20%; | ||
94 | + float: left; | ||
95 | + text-align: center; | ||
96 | +} | ||
97 | + | ||
98 | +.notification-action { | ||
99 | + width: 18%; | ||
100 | + float: left; | ||
101 | + height: 30px; | ||
102 | + padding-top: 9px; | ||
103 | +} | ||
104 | + | ||
105 | +.main-bar .button, | ||
106 | +.notification-action .button { | ||
107 | + border-radius: 3px; | ||
108 | +} | ||
109 | + | ||
110 | +.notification-message { | ||
111 | + width: 82%; | ||
112 | + float: left; | ||
113 | +} | ||
114 | + | ||
115 | +.new-notification { | ||
116 | + float: right; | ||
117 | + width: auto; | ||
118 | +} | ||
119 | + | ||
120 | +.back-button { | ||
121 | + float: left; | ||
122 | +} | ||
123 | + | ||
124 | +.main-bar { | ||
125 | + display: inline; | ||
126 | + width: 100%; | ||
127 | +} | ||
128 | + | ||
129 | +.notification-bar .notification .notification-message { | ||
130 | + width: 90%; | ||
131 | + float: left; | ||
132 | +} | ||
133 | + | ||
134 | +.notification-bar .notification .notification-close { | ||
135 | + background: url(public/images/close.png) no-repeat; | ||
136 | + background-position: center; | ||
137 | + width: 20px; | ||
138 | + height: 20px; | ||
139 | + float: right; | ||
140 | + cursor: pointer; | ||
141 | +} |
plugins/environment_notification/test/functional/environment_notification_plugin_admin_controller_test.rb
0 → 100644
@@ -0,0 +1,153 @@ | @@ -0,0 +1,153 @@ | ||
1 | +require File.expand_path(File.dirname(__FILE__)) + '/../../../../test/test_helper' | ||
2 | +require( | ||
3 | + File.expand_path(File.dirname(__FILE__)) + | ||
4 | + '/../../controllers/environment_notification_plugin_admin_controller' | ||
5 | +) | ||
6 | + | ||
7 | +class EnvironmentNotificationPluginAdminController; def rescue_action(e) raise e end; | ||
8 | +end | ||
9 | + | ||
10 | +class EnvironmentNotificationPluginAdminControllerTest < ActionController::TestCase | ||
11 | + def setup | ||
12 | + @controller = EnvironmentNotificationPluginAdminController.new | ||
13 | + @request = ActionController::TestRequest.new | ||
14 | + @response = ActionController::TestResponse.new | ||
15 | + @person = create_user('person').person | ||
16 | + | ||
17 | + @environment = Environment.default | ||
18 | + @environment.enable_plugin('EnvironmentNotificationPlugin') | ||
19 | + @environment.save! | ||
20 | + | ||
21 | + login_as(@person.user.login) | ||
22 | + end | ||
23 | + | ||
24 | + attr_accessor :person | ||
25 | + | ||
26 | + should 'an admin be able to create a notification' do | ||
27 | + @environment.add_admin(@person) | ||
28 | + post :new, :notifications => { | ||
29 | + :message => "Message", | ||
30 | + :active => true, | ||
31 | + :type => "EnvironmentNotificationPlugin::DangerNotification" | ||
32 | + } | ||
33 | + assert_redirected_to :action => 'index' | ||
34 | + notification = EnvironmentNotificationPlugin::EnvironmentNotification.last | ||
35 | + assert_equal "Message", notification.message | ||
36 | + assert notification.active | ||
37 | + assert_equal "EnvironmentNotificationPlugin::DangerNotification", notification.type | ||
38 | + end | ||
39 | + | ||
40 | + should 'an user not to be able to create a notification' do | ||
41 | + post :new, :notifications => { | ||
42 | + :message => "Message", | ||
43 | + :active => true, | ||
44 | + :type => "EnvironmentNotificationPlugin::DangerNotification" | ||
45 | + } | ||
46 | + assert_redirected_to :root | ||
47 | + assert_nil EnvironmentNotificationPlugin::EnvironmentNotification.last | ||
48 | + end | ||
49 | + | ||
50 | + should 'an admin be able to edit a notification' do | ||
51 | + @environment.add_admin(@person) | ||
52 | + @notification = EnvironmentNotificationPlugin::EnvironmentNotification.create( | ||
53 | + :environment_id => @environment.id, | ||
54 | + :message => "Message", | ||
55 | + :active => true, | ||
56 | + :type => "EnvironmentNotificationPlugin::DangerNotification" | ||
57 | + ) | ||
58 | + post :edit, :id => @notification.id, :notifications => { | ||
59 | + :message => "Edited Message", | ||
60 | + :active => false, | ||
61 | + :type => "EnvironmentNotificationPlugin::WarningNotification" | ||
62 | + } | ||
63 | + @notification = EnvironmentNotificationPlugin::EnvironmentNotification.last | ||
64 | + assert_redirected_to :action => 'index' | ||
65 | + assert_equal "Edited Message", @notification.message | ||
66 | + assert !@notification.active | ||
67 | + assert_equal "EnvironmentNotificationPlugin::WarningNotification", @notification.type | ||
68 | + end | ||
69 | + | ||
70 | + should 'an user not to be able to edit a notification' do | ||
71 | + @notification = EnvironmentNotificationPlugin::EnvironmentNotification.create( | ||
72 | + :environment_id => @environment.id, | ||
73 | + :message => "Message", | ||
74 | + :active => true, | ||
75 | + :type => "EnvironmentNotificationPlugin::DangerNotification" | ||
76 | + ) | ||
77 | + post :edit, :notifications => { | ||
78 | + :message => "Edited Message", | ||
79 | + :active => false, | ||
80 | + :type => "EnvironmentNotificationPlugin::DangerNotification" | ||
81 | + } | ||
82 | + @notification.reload | ||
83 | + assert_redirected_to :root | ||
84 | + assert_equal "Message", @notification.message | ||
85 | + assert @notification.active | ||
86 | + end | ||
87 | + | ||
88 | + should 'an admin be able to destroy a notification' do | ||
89 | + @environment.add_admin(@person) | ||
90 | + @notification = EnvironmentNotificationPlugin::EnvironmentNotification.create( | ||
91 | + :environment_id => @environment.id, | ||
92 | + :message => "Message", | ||
93 | + :active => true, | ||
94 | + :type => "EnvironmentNotificationPlugin::DangerNotification" | ||
95 | + ) | ||
96 | + delete :destroy, :id => @notification.id | ||
97 | + assert_nil EnvironmentNotificationPlugin::EnvironmentNotification.find_by_id(@notification.id) | ||
98 | + end | ||
99 | + | ||
100 | + should 'an user not to be able to destroy a notification' do | ||
101 | + @notification = EnvironmentNotificationPlugin::EnvironmentNotification.create( | ||
102 | + :environment_id => @environment.id, | ||
103 | + :message => "Message", | ||
104 | + :active => true, | ||
105 | + :type => "EnvironmentNotificationPlugin::DangerNotification" | ||
106 | + ) | ||
107 | + delete :destroy, :id => @notification.id | ||
108 | + | ||
109 | + assert_redirected_to :root | ||
110 | + assert_not_nil EnvironmentNotificationPlugin::EnvironmentNotification.find_by_id(@notification.id) | ||
111 | + end | ||
112 | + | ||
113 | + should 'an admin be able to change Notification status' do | ||
114 | + @environment.add_admin(@person) | ||
115 | + @notification = EnvironmentNotificationPlugin::EnvironmentNotification.create( | ||
116 | + :environment_id => @environment.id, | ||
117 | + :message => "Message", | ||
118 | + :active => true, | ||
119 | + :type => "EnvironmentNotificationPlugin::DangerNotification" | ||
120 | + ) | ||
121 | + post :change_status, :id => @notification.id | ||
122 | + assert_redirected_to :action => 'index' | ||
123 | + | ||
124 | + @notification.reload | ||
125 | + assert !@notification.active | ||
126 | + end | ||
127 | + | ||
128 | + should 'an user not be able to change Notification status' do | ||
129 | + @notification = EnvironmentNotificationPlugin::EnvironmentNotification.create( | ||
130 | + :environment_id => @environment.id, | ||
131 | + :message => "Message", | ||
132 | + :active => true, | ||
133 | + :type => "EnvironmentNotificationPlugin::DangerNotification" | ||
134 | + ) | ||
135 | + post :change_status, :id => @notification.id | ||
136 | + assert_redirected_to :root | ||
137 | + | ||
138 | + @notification.reload | ||
139 | + assert @notification.active | ||
140 | + end | ||
141 | + | ||
142 | + should 'a logged in user be able to permanently hide notifications' do | ||
143 | + @notification = EnvironmentNotificationPlugin::EnvironmentNotification.create( | ||
144 | + :environment_id => @environment.id, | ||
145 | + :message => "Message", | ||
146 | + :active => true, | ||
147 | + :type => "EnvironmentNotificationPlugin::DangerNotification" | ||
148 | + ) | ||
149 | + post :hide_notification, :notification_id => @notification.id | ||
150 | + assert_equal "true", @response.body | ||
151 | + assert_equal true, @notification.users.include?(@person.user) | ||
152 | + end | ||
153 | +end |
plugins/environment_notification/test/functional/home_controller_test.rb
0 → 100644
@@ -0,0 +1,105 @@ | @@ -0,0 +1,105 @@ | ||
1 | +require File.expand_path(File.dirname(__FILE__)) + '/../../../../test/test_helper' | ||
2 | +require 'home_controller' | ||
3 | + | ||
4 | +class HomeController; def rescue_action(e) raise e end; | ||
5 | +end | ||
6 | + | ||
7 | +class HomeControllerTest < ActionController::TestCase | ||
8 | + def setup | ||
9 | + @controller = HomeController.new | ||
10 | + @request = ActionController::TestRequest.new | ||
11 | + @response = ActionController::TestResponse.new | ||
12 | + @person = create_user('person').person | ||
13 | + | ||
14 | + @environment = Environment.default | ||
15 | + @environment.enable_plugin('EnvironmentNotificationPlugin') | ||
16 | + @environment.save! | ||
17 | + end | ||
18 | + | ||
19 | + attr_accessor :person | ||
20 | + | ||
21 | + should 'an active notification be displayed on home page for a logged in user' do | ||
22 | + login_as(@person.user.login) | ||
23 | + @notification = EnvironmentNotificationPlugin::EnvironmentNotification.create( | ||
24 | + :environment_id => @environment.id, | ||
25 | + :message => "Hello, this is a Notification Message", | ||
26 | + :active => true, | ||
27 | + :type => "EnvironmentNotificationPlugin::DangerNotification" | ||
28 | + ) | ||
29 | + get :index | ||
30 | + assert_match /Hello, this is a Notification Message/, @response.body | ||
31 | + end | ||
32 | + | ||
33 | + | ||
34 | + should 'an active notification not be displayed on home page for unlogged user' do | ||
35 | + @notification = EnvironmentNotificationPlugin::EnvironmentNotification.create( | ||
36 | + :environment_id => @environment.id, | ||
37 | + :message => "Hello, this is a Notification Message", | ||
38 | + :active => true, | ||
39 | + :type => "EnvironmentNotificationPlugin::DangerNotification" | ||
40 | + ) | ||
41 | + get :index | ||
42 | + assert_no_match /Hello, this is a Notification Message/, @response.body | ||
43 | + end | ||
44 | + | ||
45 | + should 'an active notification be displayed on home page for unlogged user' do | ||
46 | + @notification = EnvironmentNotificationPlugin::EnvironmentNotification.create( | ||
47 | + :environment_id => @environment.id, | ||
48 | + :message => "Hello, this is a Notification Message", | ||
49 | + :display_to_all_users => true, | ||
50 | + :active => true, | ||
51 | + :type => "EnvironmentNotificationPlugin::DangerNotification" | ||
52 | + ) | ||
53 | + get :index | ||
54 | + assert_match /Hello, this is a Notification Message/, @response.body | ||
55 | + end | ||
56 | + | ||
57 | + should 'only display the notification with display_to_all_users option for unlogged user ' do | ||
58 | + @notification1 = EnvironmentNotificationPlugin::EnvironmentNotification.create( | ||
59 | + :environment_id => @environment.id, | ||
60 | + :message => "Hello, this is an old Notification Message", | ||
61 | + :active => true, | ||
62 | + :type => "EnvironmentNotificationPlugin::DangerNotification" | ||
63 | + ) | ||
64 | + | ||
65 | + @notification2 = EnvironmentNotificationPlugin::EnvironmentNotification.create( | ||
66 | + :environment_id => @environment.id, | ||
67 | + :message => "Hello, this is a new Notification Message", | ||
68 | + :display_to_all_users => true, | ||
69 | + :active => true, | ||
70 | + :type => "EnvironmentNotificationPlugin::DangerNotification" | ||
71 | + ) | ||
72 | + | ||
73 | + | ||
74 | + get :index | ||
75 | + assert_no_match /Hello, this is a Notification Message/, @response.body | ||
76 | + assert_match /Hello, this is a new Notification Message/, @response.body | ||
77 | + end | ||
78 | + | ||
79 | + should 'an inactive notification not be displayed on home page' do | ||
80 | + @notification = EnvironmentNotificationPlugin::EnvironmentNotification.create( | ||
81 | + :environment_id => @environment.id, | ||
82 | + :message => "Hello, this is a Notification Message", | ||
83 | + :active => false, | ||
84 | + :type => "EnvironmentNotificationPlugin::DangerNotification" | ||
85 | + ) | ||
86 | + get :index | ||
87 | + assert_no_match /Hello, this is a Notification Message/, @response.body | ||
88 | + end | ||
89 | + | ||
90 | + | ||
91 | + should 'an active notification not be displayed to a logged in user after been closed by him' do | ||
92 | + login_as(@person.user.login) | ||
93 | + @notification = EnvironmentNotificationPlugin::EnvironmentNotification.create( | ||
94 | + :environment_id => @environment.id, | ||
95 | + :message => "Hello, this is a Notification Message", | ||
96 | + :active => true, | ||
97 | + :type => "EnvironmentNotificationPlugin::DangerNotification" | ||
98 | + ) | ||
99 | + @notification.users << @person.user | ||
100 | + @notification.save! | ||
101 | + assert_equal true, @notification.users.include?(@person.user) | ||
102 | + get :index | ||
103 | + assert_no_match /Hello, this is a Notification Message/, @response.body | ||
104 | + end | ||
105 | +end |
plugins/environment_notification/views/environment_notification_plugin_admin/_form.html.erb
0 → 100644
@@ -0,0 +1,27 @@ | @@ -0,0 +1,27 @@ | ||
1 | +<% abstract_options = {:value => @notification.message, :style => 'width: 100%; height: 200px;'} %> | ||
2 | + | ||
3 | +<%= button :back, _('Back'), :controller => 'environment_notification_plugin_admin' %> | ||
4 | + | ||
5 | +<%= form_for :notifications do |f| %> | ||
6 | + | ||
7 | + <%= render :file => 'shared/tiny_mce' %> | ||
8 | + | ||
9 | + <%= labelled_form_field(_("Enter your message here:"), f.text_area(:message, abstract_options)) %> | ||
10 | + | ||
11 | + <%= labelled_form_field(_('Notifications Status'), select(:notifications, :active, options_for_select_with_title({"Active" => true, "Inactive" => false}, @notification.active))) %> | ||
12 | + | ||
13 | + <%= labelled_form_field(_('Notifications Type'), select(:notifications, :type, options_for_select_with_title({"Information" => "EnvironmentNotificationPlugin::InformationNotification", "Warning" => "EnvironmentNotificationPlugin::WarningNotification", "Success" => "EnvironmentNotificationPlugin::SuccessNotification", "Danger" => "EnvironmentNotificationPlugin::DangerNotification"}, @notification.type))) %> | ||
14 | + | ||
15 | + <div> | ||
16 | + <%= labelled_check_box(_("Display only in the homepage"), 'notifications[display_only_in_homepage]', '1', @notification.display_only_in_homepage?) %> | ||
17 | + </div> | ||
18 | + | ||
19 | + <div> | ||
20 | + <%= labelled_check_box(_("Display to not logged users too"), 'notifications[display_to_all_users]', '1', @notification.display_to_all_users?) %> | ||
21 | + </div> | ||
22 | + | ||
23 | + <% button_bar do %> | ||
24 | + <%= submit_button 'save', _('Save'), :cancel => { :action => 'index' } %> | ||
25 | + <% end %> | ||
26 | + | ||
27 | +<% end %> |
plugins/environment_notification/views/environment_notification_plugin_admin/edit.html.erb
0 → 100644
@@ -0,0 +1 @@ | @@ -0,0 +1 @@ | ||
1 | +<%= render :partial => "form" %> |
plugins/environment_notification/views/environment_notification_plugin_admin/index.html.erb
0 → 100644
@@ -0,0 +1,40 @@ | @@ -0,0 +1,40 @@ | ||
1 | +<div id="notification-manager"> | ||
2 | + <div class="notification-manager-title"> | ||
3 | + <h1><%= _("Environment Notifications") %></h1> | ||
4 | + </div> | ||
5 | + <div class="buttons-bar"> | ||
6 | + <div class="new-notification"> | ||
7 | + <%= button :new, _('New Notification'), {:action => :new}, :method => :get %> | ||
8 | + </div> | ||
9 | + <div class="back-button"> | ||
10 | + <%= button :back, _('Back to control panel'), {:controller => 'admin_panel', :action => :index}, :method => :get %> | ||
11 | + </div> | ||
12 | + </div> | ||
13 | + | ||
14 | + <div class="notification-title-bar"> | ||
15 | + <div class="notification-title"> | ||
16 | + <%= _('Notifications') %> | ||
17 | + </div> | ||
18 | + <div class="action-title"> | ||
19 | + <%= _('Actions') %> | ||
20 | + </div> | ||
21 | + </div> | ||
22 | + | ||
23 | + <% @notifications.each do |notification| %> | ||
24 | + <div class="notification-line"> | ||
25 | + <div class="notification-message"> | ||
26 | + <%= truncate(notification.message, length: 50) %> | ||
27 | + </div> | ||
28 | + <div class="notification-action"> | ||
29 | + <% if notification.active? %> | ||
30 | + <%= button_without_text :deactivate, _('Deactivate'), {:action => :change_status, :id => notification}, :method => :post, :confirm => _("Do you want to change the status of this notification?") %> | ||
31 | + <% else %> | ||
32 | + <%= button_without_text :activate, _('Activate'), {:action => :change_status, :id => notification}, :method => :post, :confirm => _("Do you want to change the status of this notification?") %> | ||
33 | + <% end %> | ||
34 | + <%= button_without_text :edit, _('Edit'), {:action => 'edit', :id => notification.id} if !remove_content_button(:edit, notification) %> | ||
35 | + <%= button_without_text :delete, _('Delete'), {:action => :destroy, :id => notification}, :method => :delete, :confirm => _("Do you want to delete this notification?") %> | ||
36 | + </div> | ||
37 | + </div> | ||
38 | + <% end %> | ||
39 | +</div> | ||
40 | + |
plugins/environment_notification/views/environment_notification_plugin_admin/new.html.erb
0 → 100644
@@ -0,0 +1 @@ | @@ -0,0 +1 @@ | ||
1 | +<%= render :partial => "form" %> |
plugins/environment_notification/views/environment_notification_plugin_admin/show_notification.html.erb
0 → 100644
@@ -0,0 +1,24 @@ | @@ -0,0 +1,24 @@ | ||
1 | +<div class="notification-bar"> | ||
2 | + <% if logged_in? %> | ||
3 | + <% @notifications = environment.environment_notifications.order('updated_at DESC').where(active: true) %> | ||
4 | + <% @deactivated = current_user.environment_notifications %> | ||
5 | + <% @notifications = @notifications - @deactivated %> | ||
6 | + <% else %> | ||
7 | + <% @notifications = environment.environment_notifications.order('updated_at DESC').where(active: true) %> | ||
8 | + <% end %> | ||
9 | + | ||
10 | + <% @notifications.each do |notification| %> | ||
11 | + <% if controller_path == "home" || !notification.display_only_in_homepage? %> | ||
12 | + <% if logged_in? || notification.display_to_all_users? %> | ||
13 | + <div class="<%= notification.type.gsub("EnvironmentNotificationPlugin::", "").downcase %> notification" data-notification="<%=notification.id%>"> | ||
14 | + <div class="notification-message"> | ||
15 | + <%= notification.message %> | ||
16 | + </div> | ||
17 | + <% if logged_in? %> | ||
18 | + <div class="notification-close"></div> | ||
19 | + <% end %> | ||
20 | + </div> | ||
21 | + <% end %> | ||
22 | + <% end %> | ||
23 | + <% end %> | ||
24 | +</div> |