Commit c13119fbe652161a543c379529453bc9435e4ea5
1 parent
c9b33c17
Exists in
master
and in
29 other branches
Recatoring Work Assignment Plugin to fit the merge
- Moved EmailContact class from ext directory to plugin scope - Refactored Work Assignment Plugin to accept general articles instead of only uploaded files - Protecting methods that are not supposed to be actions Signed-off-by: Tallys Martins <tallysmartins@gmail.com> Signed-off-by: André Bernardes <andrebsguedes@gmail.com> Signed-off-by: Hebert Douglas <hebertdougl@gmail>
Showing
6 changed files
with
96 additions
and
92 deletions
Show diff stats
plugins/work_assignment/controllers/work_assignment_plugin_myprofile_controller.rb
... | ... | @@ -5,13 +5,6 @@ helper CmsHelper |
5 | 5 | |
6 | 6 | before_filter :protect_if, :only => [:edit_visibility] |
7 | 7 | |
8 | -def protect_if | |
9 | - article = environment.articles.find_by_id(params[:article_id]) | |
10 | - render_access_denied unless (user && !article.nil? && (user.is_member_of? article.profile) && | |
11 | - article.parent.allow_visibility_edition && article.folder? && | |
12 | - (article.author == user || user.has_permission?('view_private_content', profile))) | |
13 | -end | |
14 | - | |
15 | 8 | def edit_visibility |
16 | 9 | unless params[:article_id].blank? |
17 | 10 | folder = profile.environment.articles.find_by_id(params[:article_id]) |
... | ... | @@ -32,4 +25,14 @@ def edit_visibility |
32 | 25 | result = profile.members.find(:all, :conditions => ['LOWER(name) LIKE ?', "%#{arg}%"]) |
33 | 26 | render :text => prepare_to_token_input(result).to_json |
34 | 27 | end |
28 | + | |
29 | + protected | |
30 | + | |
31 | + def protect_if | |
32 | + article = environment.articles.find_by_id(params[:article_id]) | |
33 | + render_access_denied unless (user && !article.nil? && (user.is_member_of? article.profile) && | |
34 | + article.parent.allow_visibility_edition && article.folder? && | |
35 | + (article.author == user || user.has_permission?('view_private_content', profile))) | |
36 | + end | |
37 | + | |
35 | 38 | end | ... | ... |
... | ... | @@ -0,0 +1,20 @@ |
1 | +require_dependency 'article' | |
2 | + | |
3 | +class Article | |
4 | + before_validation :work_assignment_save_into_author_folder | |
5 | + after_validation :work_assignment_change_visibility | |
6 | + | |
7 | + def work_assignment_save_into_author_folder | |
8 | + if not self.is_a? Folder and self.parent.kind_of? WorkAssignmentPlugin::WorkAssignment | |
9 | + author_folder = self.parent.find_or_create_author_folder(self.author) | |
10 | + self.name = WorkAssignmentPlugin::WorkAssignment.versioned_name(self, author_folder) | |
11 | + self.parent = author_folder | |
12 | + end | |
13 | + end | |
14 | + | |
15 | + def work_assignment_change_visibility | |
16 | + if self.parent && self.parent.parent && self.parent.parent.kind_of?(WorkAssignmentPlugin::WorkAssignment) | |
17 | + self.published = self.parent.published | |
18 | + end | |
19 | + end | |
20 | +end | |
0 | 21 | \ No newline at end of file | ... | ... |
plugins/work_assignment/lib/ext/email_contact.rb
... | ... | @@ -1,65 +0,0 @@ |
1 | -class EmailContact | |
2 | - | |
3 | - include ActiveModel::Validations | |
4 | - | |
5 | - def initialize(attributes = nil) | |
6 | - if attributes | |
7 | - attributes.each do |attr,value| | |
8 | - self.send("#{attr}=", value) | |
9 | - end | |
10 | - end | |
11 | - end | |
12 | - | |
13 | - attr_accessor :name | |
14 | - attr_accessor :subject | |
15 | - attr_accessor :message | |
16 | - attr_accessor :email | |
17 | - attr_accessor :receive_a_copy | |
18 | - attr_accessor :sender | |
19 | - attr_accessor :receiver | |
20 | - | |
21 | - N_('Subject'); N_('Message'); N_('e-Mail'); N_('Name') | |
22 | - | |
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 | - | |
26 | - def deliver | |
27 | - return false unless self.valid? | |
28 | - EmailContact::EmailSender.notification(self).deliver | |
29 | - end | |
30 | - | |
31 | - class EmailSender < ActionMailer::Base | |
32 | - | |
33 | - def notification(email_contact) | |
34 | - name = email_contact.sender.name | |
35 | - email = email_contact.sender.email | |
36 | - message = email_contact.message | |
37 | - target = email_contact.receiver | |
38 | - | |
39 | - options = { | |
40 | - content_type: 'text/html', | |
41 | - to: target, | |
42 | - reply_to: email, | |
43 | - subject: email_contact.subject, | |
44 | - body: message, | |
45 | - from: "#{email_contact.sender.environment.name} <#{email_contact.sender.environment.contact_email}>", | |
46 | - } | |
47 | - | |
48 | - mail(options) | |
49 | - end | |
50 | - end | |
51 | - | |
52 | - def build_mail_message!(environment, uploaded_files, parent_id) | |
53 | - article = environment.articles.find_by_id(parent_id) | |
54 | - message = "" | |
55 | - if !article.nil? && article.kind_of?(WorkAssignmentPlugin::WorkAssignment) | |
56 | - message = article.default_email + "<br>" | |
57 | - end | |
58 | - uploaded_files.each do |file| | |
59 | - file_url = "http://#{file.url[:host]}:#{file.url[:port]}/#{file.url[:profile]}/#{file.path}" | |
60 | - message += "<br><a href='#{file_url}'>#{file_url}</a>" | |
61 | - end | |
62 | - self.message = message | |
63 | - end | |
64 | - | |
65 | -end |
plugins/work_assignment/lib/ext/uploaded_file.rb
... | ... | @@ -1,18 +0,0 @@ |
1 | -require_dependency 'article' | |
2 | -require_dependency 'uploaded_file' | |
3 | - | |
4 | -class UploadedFile < Article | |
5 | - before_validation do |uploaded_file| | |
6 | - if uploaded_file.parent.kind_of?(WorkAssignmentPlugin::WorkAssignment) | |
7 | - author_folder = uploaded_file.parent.find_or_create_author_folder(uploaded_file.author) | |
8 | - uploaded_file.name = WorkAssignmentPlugin::WorkAssignment.versioned_name(uploaded_file, author_folder) | |
9 | - uploaded_file.parent = author_folder | |
10 | - end | |
11 | - end | |
12 | - | |
13 | - after_validation do |uploaded_file| | |
14 | - if uploaded_file.parent && uploaded_file.parent.parent && uploaded_file.parent.parent.kind_of?(WorkAssignmentPlugin::WorkAssignment) | |
15 | - uploaded_file.published = uploaded_file.parent.published | |
16 | - end | |
17 | - end | |
18 | -end |
plugins/work_assignment/lib/work_assignment_plugin.rb
... | ... | @@ -56,8 +56,8 @@ class WorkAssignmentPlugin < Noosfero::Plugin |
56 | 56 | if request.post? && params[:uploaded_files] |
57 | 57 | email_notification = params[:article_email_notification] |
58 | 58 | unless !email_notification || email_notification.empty? |
59 | - email_contact = EmailContact.new(:subject => @parent.name, :receiver => email_notification, :sender => user) | |
60 | - email_contact.build_mail_message!(environment, @uploaded_files, @parent.id) | |
59 | + email_contact = WorkAssignmentPlugin::EmailContact.new(:subject => @parent.name, :receiver => email_notification, :sender => user) | |
60 | + WorkAssignmentPlugin::EmailContact::EmailSender.build_mail_message(email_contact, @uploaded_files) | |
61 | 61 | if email_contact.deliver |
62 | 62 | session[:notice] = _('Notification successfully sent') |
63 | 63 | else | ... | ... |
plugins/work_assignment/lib/work_assignment_plugin/email_contact.rb
0 → 100644
... | ... | @@ -0,0 +1,64 @@ |
1 | +class WorkAssignmentPlugin::EmailContact | |
2 | + | |
3 | + include ActiveModel::Validations | |
4 | + | |
5 | + def initialize(attributes = nil) | |
6 | + if attributes | |
7 | + attributes.each do |attr,value| | |
8 | + self.send("#{attr}=", value) | |
9 | + end | |
10 | + end | |
11 | + end | |
12 | + | |
13 | + attr_accessor :name | |
14 | + attr_accessor :subject | |
15 | + attr_accessor :message | |
16 | + attr_accessor :email | |
17 | + attr_accessor :receive_a_copy | |
18 | + attr_accessor :sender | |
19 | + attr_accessor :receiver | |
20 | + | |
21 | + N_('Subject'); N_('Message'); N_('e-Mail'); N_('Name') | |
22 | + | |
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 | + | |
26 | + def deliver | |
27 | + return false unless self.valid? | |
28 | + WorkAssignmentPlugin::EmailContact::EmailSender.notification(self).deliver | |
29 | + end | |
30 | + | |
31 | + class EmailSender < ActionMailer::Base | |
32 | + | |
33 | + def notification(email_contact) | |
34 | + name = email_contact.sender.name | |
35 | + email = email_contact.sender.email | |
36 | + message = email_contact.message | |
37 | + target = email_contact.receiver | |
38 | + | |
39 | + options = { | |
40 | + content_type: 'text/html', | |
41 | + to: target, | |
42 | + reply_to: email, | |
43 | + subject: email_contact.subject, | |
44 | + body: message, | |
45 | + from: "#{email_contact.sender.environment.name} <#{email_contact.sender.environment.contact_email}>", | |
46 | + } | |
47 | + | |
48 | + mail(options) | |
49 | + end | |
50 | + | |
51 | + def build_mail_message(email_contact, uploaded_files) | |
52 | + message = "" | |
53 | + if uploaded_files && uploaded_files.first && uploaded_files.first.parent && uploaded_files.first.parent.parent | |
54 | + article = uploaded_files.first.parent.parent | |
55 | + message = article.default_email + "<br>" | |
56 | + uploaded_files.each do |file| | |
57 | + url = url_for(file.url) | |
58 | + message += "<br><a href='#{url}'>#{url}</a>" | |
59 | + end | |
60 | + end | |
61 | + email_contact.message = message | |
62 | + end | |
63 | + end | |
64 | +end | ... | ... |