Commit 4fe9e656de8f1516d6efdb53b1bf3cd24cfdf39d
1 parent
99c763b5
Exists in
master
and in
27 other branches
Refactoring Work Assignment Plugin
- Removed class Person on Work Assignment Plugin. - Fixed rails3 file extension on functional Tests. - changed the email_contact 'from' to be the environment email. - Changed notification text field to show the user email by default Signed-off-by: Andre Bernardes <andrebsguedes@gmail.com> Signed-off-by: Dylan Guedes <djmgguedes@gmail.com> Signed-off-by: Filipe Ribeiro <firibeiro77@live.com> Signed-off-by: Dylan Guedes <djmgguedes@gmail.com> Signed-off-by: Marcos Ronaldo <marcos.rpj2@gmail.com>
Showing
12 changed files
with
65 additions
and
67 deletions
Show diff stats
lib/noosfero/plugin.rb
plugins/work_assignment/controllers/myprofile/work_assignment_plugin_cms_controller.rb
plugins/work_assignment/controllers/public/work_assignment_plugin_content_viewer_controller.rb
0 → 100644
... | ... | @@ -0,0 +1,19 @@ |
1 | +class WorkAssignmentPluginContentViewerController < ContentViewerController | |
2 | + def toggle_friends_permission | |
3 | + folder = environment.articles.find_by_id(params[:folder_id]) | |
4 | + puts "#{params[:folder_id]}" | |
5 | + | |
6 | + if folder | |
7 | + author = folder.author | |
8 | + work_assignment = folder.parent | |
9 | + | |
10 | + if !work_assignment.only_friends.include?(author) | |
11 | + work_assignment.only_friends << author | |
12 | + else | |
13 | + work_assignment.only_friends.delete(author) | |
14 | + end | |
15 | + end | |
16 | + redirect_to :action => :index | |
17 | + #render :action => 'view' | |
18 | + end | |
19 | +end | |
0 | 20 | \ No newline at end of file | ... | ... |
plugins/work_assignment/lib/ext/email_contact.rb
... | ... | @@ -15,13 +15,13 @@ class EmailContact |
15 | 15 | attr_accessor :message |
16 | 16 | attr_accessor :email |
17 | 17 | attr_accessor :receive_a_copy |
18 | - attr_accessor :receiver | |
19 | 18 | attr_accessor :sender |
19 | + attr_accessor :receiver | |
20 | 20 | |
21 | 21 | N_('Subject'); N_('Message'); N_('e-Mail'); N_('Name') |
22 | 22 | |
23 | - validates_presence_of :subject, :email, :message, :name | |
24 | - validates_format_of :email, :with => Noosfero::Constants::EMAIL_FORMAT, :if => (lambda {|o| !o.email.blank?}) | |
23 | + validates_presence_of :receiver, :subject, :message, :sender | |
24 | + validates_format_of :receiver, :with => Noosfero::Constants::EMAIL_FORMAT, :if => (lambda {|o| !o.email.blank?}) | |
25 | 25 | |
26 | 26 | def deliver |
27 | 27 | return false unless self.valid? |
... | ... | @@ -31,29 +31,25 @@ class EmailContact |
31 | 31 | class EmailSender < ActionMailer::Base |
32 | 32 | |
33 | 33 | def notification(email_contact) |
34 | - @name = email_contact.name | |
35 | - @email = email_contact.email | |
34 | + @name = email_contact.sender.name | |
35 | + @email = email_contact.sender.email | |
36 | 36 | @message = email_contact.message |
37 | 37 | @target = email_contact.receiver |
38 | 38 | |
39 | 39 | options = { |
40 | 40 | content_type: 'text/html', |
41 | - to: email_contact.receiver, | |
42 | - reply_to: email_contact.email, | |
41 | + to: @target, | |
42 | + reply_to: @email, | |
43 | 43 | subject: email_contact.subject, |
44 | - body: email_contact.message, | |
45 | - from: "#{email_contact.name} <#{email_contact.email}>" | |
44 | + body: @message, | |
45 | + from: "#{email_contact.sender.environment.name} <#{email_contact.sender.environment.contact_email}>", | |
46 | 46 | } |
47 | 47 | |
48 | - if email_contact.receive_a_copy == "1" | |
49 | - options.merge!(cc: "#{email_contact.email}") | |
50 | - end | |
51 | - | |
52 | 48 | mail(options) |
53 | 49 | end |
54 | 50 | end |
55 | 51 | |
56 | - def build_mail_message(environment, uploaded_files, parent_id) | |
52 | + def build_mail_message!(environment, uploaded_files, parent_id) | |
57 | 53 | @article = environment.articles.find_by_id(parent_id) |
58 | 54 | @message = "" |
59 | 55 | if !@article.nil? && @article.type == "WorkAssignmentPlugin::WorkAssignment" |
... | ... | @@ -63,7 +59,7 @@ class EmailContact |
63 | 59 | @real_file_url = "http://#{file.url[:host]}:#{file.url[:port]}/#{file.url[:profile]}/#{file.path}" |
64 | 60 | @message += "<br><a href='#{@real_file_url}'>#{@real_file_url}</a>" |
65 | 61 | end |
66 | - @message | |
62 | + self.message = @message | |
67 | 63 | end |
68 | 64 | |
69 | 65 | end | ... | ... |
plugins/work_assignment/lib/ext/person.rb
plugins/work_assignment/lib/work_assignment_plugin.rb
... | ... | @@ -10,7 +10,19 @@ class WorkAssignmentPlugin < Noosfero::Plugin |
10 | 10 | |
11 | 11 | def self.can_download_submission?(user, submission) |
12 | 12 | work_assignment = submission.parent.parent |
13 | - work_assignment.publish_submissions || (user && (submission.author == user || user.has_permission?('view_private_content', work_assignment.profile))) | |
13 | + | |
14 | + if work_assignment.publish_submissions | |
15 | + if work_assignment.only_friends.include?(submission.author) | |
16 | + submission.author.friends.include?(user) | |
17 | + else | |
18 | + true | |
19 | + end | |
20 | + elsif (user && (submission.author == user || user.has_permission?('view_private_content', work_assignment.profile))) | |
21 | + #work_assignment.publish_submissions || (user && (submission.author == user || user.has_permission?('view_private_content', work_assignment.profile))) | |
22 | + true | |
23 | + else | |
24 | + false | |
25 | + end | |
14 | 26 | end |
15 | 27 | |
16 | 28 | def self.is_submission?(content) |
... | ... | @@ -55,9 +67,9 @@ class WorkAssignmentPlugin < Noosfero::Plugin |
55 | 67 | block = proc do |
56 | 68 | if request.post? && params[:uploaded_files] |
57 | 69 | @email_notification = params[:article_email_notification] |
58 | - unless @email_notification.include? "example@example.com, example2@example.com.br" | |
59 | - @email_contact = user.build_email_contact(:name => user.name, :subject => @parent.name, :email => user.email, :receiver => @email_notification, :sender => user) | |
60 | - @email_contact.message = @email_contact.build_mail_message(environment, @uploaded_files, @parent.id) | |
70 | + unless !@email_notification || @email_notification.empty? | |
71 | + @email_contact = EmailContact.new(:subject => @parent.name, :receiver => @email_notification, :sender => user) | |
72 | + @email_contact.build_mail_message!(environment, @uploaded_files, @parent.id) | |
61 | 73 | if @email_contact.deliver |
62 | 74 | session[:notice] = _('Notification successfully sent') |
63 | 75 | else |
... | ... | @@ -75,11 +87,11 @@ class WorkAssignmentPlugin < Noosfero::Plugin |
75 | 87 | |
76 | 88 | def article_extra_fields(article) |
77 | 89 | proc do |
78 | - @article = Article.find_by_id(article) | |
79 | - if params[:parent_id] && !@article.nil? && @article.type == "WorkAssignmentPlugin::WorkAssignment" | |
80 | - render :partial => 'notify_text_field', :locals => { :size => '45'} | |
81 | - end | |
90 | + @article = Article.find_by_id(article) | |
91 | + if params[:parent_id] && !@article.nil? && @article.type == "WorkAssignmentPlugin::WorkAssignment" | |
92 | + render :partial => 'notify_text_field', :locals => { :size => '45'} | |
93 | + end | |
82 | 94 | end |
83 | 95 | end |
84 | 96 | |
85 | -end | |
86 | 97 | \ No newline at end of file |
98 | +end | ... | ... |
plugins/work_assignment/lib/work_assignment_plugin/helper.rb
... | ... | @@ -15,11 +15,14 @@ module WorkAssignmentPlugin::Helper |
15 | 15 | |
16 | 16 | def display_author_folder(author_folder, user) |
17 | 17 | return if author_folder.children.empty? |
18 | + only_friends = author_folder.parent.only_friends | |
19 | + action = 'toggle_friends_permission' | |
18 | 20 | content_tag('tr', |
19 | 21 | content_tag('td', link_to_last_submission(author_folder, user)) + |
20 | 22 | content_tag('td', time_format(author_folder.children.last.created_at)) + |
21 | 23 | content_tag('td', author_folder.children.count, :style => 'text-align: center') + |
22 | - content_tag('td', content_tag('button', _('View all versions'), :class => 'view-author-versions', 'data-folder-id' => author_folder.id)) | |
24 | + content_tag('td', content_tag('button', _('View all versions'), :class => 'view-author-versions', 'data-folder-id' => author_folder.id)) + | |
25 | + content_tag('td', button('toggle_friends_permission', only_friends.include?(author_folder.author) ? _('All') : _('Only Friends'),:controller => 'work_assignment_plugin_content_viewer', :action => action, :folder_id => author_folder.id)) | |
23 | 26 | ).html_safe + |
24 | 27 | author_folder.children.map {|submission| display_submission(submission, user)}.join("\n").html_safe |
25 | 28 | end | ... | ... |
plugins/work_assignment/lib/work_assignment_plugin/work_assignment.rb
... | ... | @@ -2,9 +2,11 @@ class WorkAssignmentPlugin::WorkAssignment < Folder |
2 | 2 | |
3 | 3 | settings_items :publish_submissions, :type => :boolean, :default => false |
4 | 4 | settings_items :default_email, :type => :string, :default => "" |
5 | + settings_items :only_friends, :type => Array, :default => [] | |
5 | 6 | |
6 | 7 | attr_accessible :publish_submissions |
7 | 8 | attr_accessible :default_email |
9 | + attr_accessible :only_friends | |
8 | 10 | |
9 | 11 | def self.icon_name(article = nil) |
10 | 12 | 'work-assignment' |
... | ... | @@ -37,7 +39,7 @@ class WorkAssignmentPlugin::WorkAssignment < Folder |
37 | 39 | end |
38 | 40 | |
39 | 41 | def find_or_create_author_folder(author) |
40 | - children.find_by_slug(author.name.to_slug) || Folder.create!(:name => author.name, :parent => self, :profile => profile) | |
42 | + children.find_by_slug(author.name.to_slug) || Folder.create!(:name => author.name, :parent => self, :profile => profile, :author => author) | |
41 | 43 | end |
42 | 44 | |
43 | 45 | def submissions |
... | ... | @@ -47,6 +49,5 @@ class WorkAssignmentPlugin::WorkAssignment < Folder |
47 | 49 | def cache_key_with_person(params = {}, user = nil, language = 'en') |
48 | 50 | cache_key_without_person + (user && profile.members.include?(user) ? "-#{user.identifier}" : '') |
49 | 51 | end |
50 | - alias_method_chain :cache_key, :person | |
51 | - | |
52 | + alias_method_chain :cache_key, :person | |
52 | 53 | end | ... | ... |
plugins/work_assignment/public/text_field_css.js
... | ... | @@ -1,22 +0,0 @@ |
1 | - var element = jQuery("input[name='article_email_notification']"); | |
2 | - var initialVal="example@example.com, example2@example.com.br"; | |
3 | - var isEdited=false; | |
4 | - element.val(initialVal); | |
5 | - | |
6 | - element.focus(function(){ | |
7 | - if(!isEdited){ | |
8 | - element.val(""); | |
9 | - isEdited=true; | |
10 | - } | |
11 | - | |
12 | - }); | |
13 | - | |
14 | - element.blur(function(){ | |
15 | - if(element.val()==""){ | |
16 | - element.val(initialVal); | |
17 | - isEdited=false; | |
18 | - } | |
19 | - | |
20 | - }); | |
21 | - | |
22 | - |
plugins/work_assignment/test/functional/cms_controller_test.rb
1 | -require 'test_helper' | |
1 | +require File.expand_path(File.dirname(__FILE__) + "/../../../../test/test_helper") | |
2 | 2 | require 'cms_controller' |
3 | 3 | |
4 | 4 | # Re-raise errors caught by the controller. |
... | ... | @@ -22,7 +22,7 @@ class CmsControllerTest < ActionController::TestCase |
22 | 22 | |
23 | 23 | get :upload_files, :profile => organization.identifier, :parent_id => work_assignment.id |
24 | 24 | assert_response :forbidden |
25 | - assert_template 'access_denied.rhtml' | |
25 | + assert_template 'access_denied' | |
26 | 26 | |
27 | 27 | organization.add_member(person) |
28 | 28 | ... | ... |
plugins/work_assignment/test/functional/content_viewer_controller_test.rb
1 | -require 'test_helper' | |
1 | +require File.expand_path(File.dirname(__FILE__) + "/../../../../test/test_helper") | |
2 | 2 | require 'content_viewer_controller' |
3 | 3 | |
4 | 4 | # Re-raise errors caught by the controller. |
... | ... | @@ -31,7 +31,7 @@ class ContentViewerControllerTest < ActionController::TestCase |
31 | 31 | |
32 | 32 | get :view_page, :profile => organization.identifier, :page => submission.explode_path |
33 | 33 | assert_response :forbidden |
34 | - assert_template 'access_denied.rhtml' | |
34 | + assert_template 'access_denied' | |
35 | 35 | |
36 | 36 | WorkAssignmentPlugin.stubs(:can_download_submission?).returns(true) |
37 | 37 | ... | ... |
plugins/work_assignment/views/cms/_notify_text_field.html.erb
1 | 1 | <h5><%= _('If you want to notify someone about this action, fill the field below with the emails of the destinies, separated by comma.') %></h5> |
2 | 2 | |
3 | -<%= labelled_text_field(_('Send notification to: '), 'article_email_notification', "", :style => 'width: 60%;') %> | |
3 | +<%= labelled_text_field(_('Send notification to: '), 'article_email_notification', user.email, :style => 'width: 60%;') %> | |
4 | 4 | |
5 | -<%= javascript_include_tag '../plugins/work_assignment/text_field_css' %> | |
6 | 5 | \ No newline at end of file | ... | ... |