Commit 4fe9e656de8f1516d6efdb53b1bf3cd24cfdf39d
1 parent
99c763b5
Exists in
master
and in
22 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
| @@ -422,6 +422,7 @@ class Noosfero::Plugin | @@ -422,6 +422,7 @@ class Noosfero::Plugin | ||
| 422 | def article_extra_fields(article) | 422 | def article_extra_fields(article) |
| 423 | nil | 423 | nil |
| 424 | end | 424 | end |
| 425 | + | ||
| 425 | # -> Adds fields to the signup form | 426 | # -> Adds fields to the signup form |
| 426 | # returns = proc that creates html code | 427 | # returns = proc that creates html code |
| 427 | def signup_extra_contents | 428 | def signup_extra_contents |
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 @@ | @@ -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 | \ No newline at end of file | 20 | \ No newline at end of file |
plugins/work_assignment/lib/ext/email_contact.rb
| @@ -15,13 +15,13 @@ class EmailContact | @@ -15,13 +15,13 @@ class EmailContact | ||
| 15 | attr_accessor :message | 15 | attr_accessor :message |
| 16 | attr_accessor :email | 16 | attr_accessor :email |
| 17 | attr_accessor :receive_a_copy | 17 | attr_accessor :receive_a_copy |
| 18 | - attr_accessor :receiver | ||
| 19 | attr_accessor :sender | 18 | attr_accessor :sender |
| 19 | + attr_accessor :receiver | ||
| 20 | 20 | ||
| 21 | N_('Subject'); N_('Message'); N_('e-Mail'); N_('Name') | 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 | def deliver | 26 | def deliver |
| 27 | return false unless self.valid? | 27 | return false unless self.valid? |
| @@ -31,29 +31,25 @@ class EmailContact | @@ -31,29 +31,25 @@ class EmailContact | ||
| 31 | class EmailSender < ActionMailer::Base | 31 | class EmailSender < ActionMailer::Base |
| 32 | 32 | ||
| 33 | def notification(email_contact) | 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 | @message = email_contact.message | 36 | @message = email_contact.message |
| 37 | @target = email_contact.receiver | 37 | @target = email_contact.receiver |
| 38 | 38 | ||
| 39 | options = { | 39 | options = { |
| 40 | content_type: 'text/html', | 40 | content_type: 'text/html', |
| 41 | - to: email_contact.receiver, | ||
| 42 | - reply_to: email_contact.email, | 41 | + to: @target, |
| 42 | + reply_to: @email, | ||
| 43 | subject: email_contact.subject, | 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 | mail(options) | 48 | mail(options) |
| 53 | end | 49 | end |
| 54 | end | 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 | @article = environment.articles.find_by_id(parent_id) | 53 | @article = environment.articles.find_by_id(parent_id) |
| 58 | @message = "" | 54 | @message = "" |
| 59 | if !@article.nil? && @article.type == "WorkAssignmentPlugin::WorkAssignment" | 55 | if !@article.nil? && @article.type == "WorkAssignmentPlugin::WorkAssignment" |
| @@ -63,7 +59,7 @@ class EmailContact | @@ -63,7 +59,7 @@ class EmailContact | ||
| 63 | @real_file_url = "http://#{file.url[:host]}:#{file.url[:port]}/#{file.url[:profile]}/#{file.path}" | 59 | @real_file_url = "http://#{file.url[:host]}:#{file.url[:port]}/#{file.url[:profile]}/#{file.path}" |
| 64 | @message += "<br><a href='#{@real_file_url}'>#{@real_file_url}</a>" | 60 | @message += "<br><a href='#{@real_file_url}'>#{@real_file_url}</a>" |
| 65 | end | 61 | end |
| 66 | - @message | 62 | + self.message = @message |
| 67 | end | 63 | end |
| 68 | 64 | ||
| 69 | end | 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,7 +10,19 @@ class WorkAssignmentPlugin < Noosfero::Plugin | ||
| 10 | 10 | ||
| 11 | def self.can_download_submission?(user, submission) | 11 | def self.can_download_submission?(user, submission) |
| 12 | work_assignment = submission.parent.parent | 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 | end | 26 | end |
| 15 | 27 | ||
| 16 | def self.is_submission?(content) | 28 | def self.is_submission?(content) |
| @@ -55,9 +67,9 @@ class WorkAssignmentPlugin < Noosfero::Plugin | @@ -55,9 +67,9 @@ class WorkAssignmentPlugin < Noosfero::Plugin | ||
| 55 | block = proc do | 67 | block = proc do |
| 56 | if request.post? && params[:uploaded_files] | 68 | if request.post? && params[:uploaded_files] |
| 57 | @email_notification = params[:article_email_notification] | 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 | if @email_contact.deliver | 73 | if @email_contact.deliver |
| 62 | session[:notice] = _('Notification successfully sent') | 74 | session[:notice] = _('Notification successfully sent') |
| 63 | else | 75 | else |
| @@ -75,11 +87,11 @@ class WorkAssignmentPlugin < Noosfero::Plugin | @@ -75,11 +87,11 @@ class WorkAssignmentPlugin < Noosfero::Plugin | ||
| 75 | 87 | ||
| 76 | def article_extra_fields(article) | 88 | def article_extra_fields(article) |
| 77 | proc do | 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 | end | 94 | end |
| 83 | end | 95 | end |
| 84 | 96 | ||
| 85 | -end | ||
| 86 | \ No newline at end of file | 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,11 +15,14 @@ module WorkAssignmentPlugin::Helper | ||
| 15 | 15 | ||
| 16 | def display_author_folder(author_folder, user) | 16 | def display_author_folder(author_folder, user) |
| 17 | return if author_folder.children.empty? | 17 | return if author_folder.children.empty? |
| 18 | + only_friends = author_folder.parent.only_friends | ||
| 19 | + action = 'toggle_friends_permission' | ||
| 18 | content_tag('tr', | 20 | content_tag('tr', |
| 19 | content_tag('td', link_to_last_submission(author_folder, user)) + | 21 | content_tag('td', link_to_last_submission(author_folder, user)) + |
| 20 | content_tag('td', time_format(author_folder.children.last.created_at)) + | 22 | content_tag('td', time_format(author_folder.children.last.created_at)) + |
| 21 | content_tag('td', author_folder.children.count, :style => 'text-align: center') + | 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 | ).html_safe + | 26 | ).html_safe + |
| 24 | author_folder.children.map {|submission| display_submission(submission, user)}.join("\n").html_safe | 27 | author_folder.children.map {|submission| display_submission(submission, user)}.join("\n").html_safe |
| 25 | end | 28 | end |
plugins/work_assignment/lib/work_assignment_plugin/work_assignment.rb
| @@ -2,9 +2,11 @@ class WorkAssignmentPlugin::WorkAssignment < Folder | @@ -2,9 +2,11 @@ class WorkAssignmentPlugin::WorkAssignment < Folder | ||
| 2 | 2 | ||
| 3 | settings_items :publish_submissions, :type => :boolean, :default => false | 3 | settings_items :publish_submissions, :type => :boolean, :default => false |
| 4 | settings_items :default_email, :type => :string, :default => "" | 4 | settings_items :default_email, :type => :string, :default => "" |
| 5 | + settings_items :only_friends, :type => Array, :default => [] | ||
| 5 | 6 | ||
| 6 | attr_accessible :publish_submissions | 7 | attr_accessible :publish_submissions |
| 7 | attr_accessible :default_email | 8 | attr_accessible :default_email |
| 9 | + attr_accessible :only_friends | ||
| 8 | 10 | ||
| 9 | def self.icon_name(article = nil) | 11 | def self.icon_name(article = nil) |
| 10 | 'work-assignment' | 12 | 'work-assignment' |
| @@ -37,7 +39,7 @@ class WorkAssignmentPlugin::WorkAssignment < Folder | @@ -37,7 +39,7 @@ class WorkAssignmentPlugin::WorkAssignment < Folder | ||
| 37 | end | 39 | end |
| 38 | 40 | ||
| 39 | def find_or_create_author_folder(author) | 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 | end | 43 | end |
| 42 | 44 | ||
| 43 | def submissions | 45 | def submissions |
| @@ -47,6 +49,5 @@ class WorkAssignmentPlugin::WorkAssignment < Folder | @@ -47,6 +49,5 @@ class WorkAssignmentPlugin::WorkAssignment < Folder | ||
| 47 | def cache_key_with_person(params = {}, user = nil, language = 'en') | 49 | def cache_key_with_person(params = {}, user = nil, language = 'en') |
| 48 | cache_key_without_person + (user && profile.members.include?(user) ? "-#{user.identifier}" : '') | 50 | cache_key_without_person + (user && profile.members.include?(user) ? "-#{user.identifier}" : '') |
| 49 | end | 51 | end |
| 50 | - alias_method_chain :cache_key, :person | ||
| 51 | - | 52 | + alias_method_chain :cache_key, :person |
| 52 | end | 53 | end |
plugins/work_assignment/public/text_field_css.js
| @@ -1,22 +0,0 @@ | @@ -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 | require 'cms_controller' | 2 | require 'cms_controller' |
| 3 | 3 | ||
| 4 | # Re-raise errors caught by the controller. | 4 | # Re-raise errors caught by the controller. |
| @@ -22,7 +22,7 @@ class CmsControllerTest < ActionController::TestCase | @@ -22,7 +22,7 @@ class CmsControllerTest < ActionController::TestCase | ||
| 22 | 22 | ||
| 23 | get :upload_files, :profile => organization.identifier, :parent_id => work_assignment.id | 23 | get :upload_files, :profile => organization.identifier, :parent_id => work_assignment.id |
| 24 | assert_response :forbidden | 24 | assert_response :forbidden |
| 25 | - assert_template 'access_denied.rhtml' | 25 | + assert_template 'access_denied' |
| 26 | 26 | ||
| 27 | organization.add_member(person) | 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 | require 'content_viewer_controller' | 2 | require 'content_viewer_controller' |
| 3 | 3 | ||
| 4 | # Re-raise errors caught by the controller. | 4 | # Re-raise errors caught by the controller. |
| @@ -31,7 +31,7 @@ class ContentViewerControllerTest < ActionController::TestCase | @@ -31,7 +31,7 @@ class ContentViewerControllerTest < ActionController::TestCase | ||
| 31 | 31 | ||
| 32 | get :view_page, :profile => organization.identifier, :page => submission.explode_path | 32 | get :view_page, :profile => organization.identifier, :page => submission.explode_path |
| 33 | assert_response :forbidden | 33 | assert_response :forbidden |
| 34 | - assert_template 'access_denied.rhtml' | 34 | + assert_template 'access_denied' |
| 35 | 35 | ||
| 36 | WorkAssignmentPlugin.stubs(:can_download_submission?).returns(true) | 36 | WorkAssignmentPlugin.stubs(:can_download_submission?).returns(true) |
| 37 | 37 |
plugins/work_assignment/views/cms/_notify_text_field.html.erb
| 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> | 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 | \ No newline at end of file | 5 | \ No newline at end of file |