Commit 938cbff344dd0978039ffde4d0fa99da8e997044
Committed by
Tallys Martins
1 parent
46080e93
Exists in
master
and in
29 other branches
Migrating Work Assignment Plugin to rails3
Added upload_files_extra_content hotspot, fixed work_assignment_form file extension, fixed redirections on file deletion, changed deprecated build_notification to build_contact method. Signed-off-by: Andre Bernardes <andrebsguedes@gmail.com> Signed-off-by: Eduardo Vital <vitaldu@gmail.com> Signed-off-by: Hebert Douglas <hebertdougl@gmail.com> Signed-off-by: Tallys Martins <tallysmartins@gmail.com> (AI2967)
Showing
15 changed files
with
207 additions
and
14 deletions
Show diff stats
app/views/cms/upload_files.html.erb
... | ... | @@ -19,6 +19,15 @@ |
19 | 19 | |
20 | 20 | <h5><%= _('Uploading files to %s') % content_tag('code', @target) %></h5> |
21 | 21 | |
22 | -<%= form_for('uploaded_file', :url => { :action => 'upload_files' }, :html => {:multipart => true}) do |f| %> | |
23 | - <%= render :partial => 'upload_file_form', :locals => { :size => '45'} %> | |
22 | +<% if @plugins.dispatch(:upload_files_extra_contents).size == 0 %> | |
23 | + <% form_for('uploaded_file', :url => { :action => 'upload_files' }, :html => {:multipart => true}) do |f| %> | |
24 | + | |
25 | + <%= render :partial => 'upload_file_form', :locals => { :size => '45'} %> | |
26 | + | |
27 | + <% end %> | |
28 | +<% else %> | |
29 | + | |
30 | + <%= @plugins.dispatch(:upload_files_extra_contents).collect { |content| instance_eval(&content) }.join("") %> | |
31 | + | |
24 | 32 | <% end %> |
33 | + | ... | ... |
plugins/work_assignment/controllers/myprofile/work_assignment_plugin_cms_controller.rb
0 → 100644
... | ... | @@ -0,0 +1,95 @@ |
1 | +class WorkAssignmentPluginCmsController < CmsController | |
2 | + | |
3 | + append_view_path File.join(File.dirname(__FILE__) + '/../../views') | |
4 | + | |
5 | + def upload_files | |
6 | + @uploaded_files = [] | |
7 | + @article = @parent = check_parent(params[:parent_id]) | |
8 | + @email_notification = params[:article_email_notification] | |
9 | + | |
10 | + @target = @parent ? ('/%s/%s' % [profile.identifier, @parent.full_name]) : '/%s' % profile.identifier | |
11 | + if @article | |
12 | + record_coming | |
13 | + end | |
14 | + if request.post? && params[:uploaded_files] | |
15 | + params[:uploaded_files].each do |file| | |
16 | + if file != '' | |
17 | + u = UploadedFile.new(:uploaded_data => file, :profile => profile, :parent => @parent) | |
18 | + u.last_changed_by = user | |
19 | + u.save! | |
20 | + @uploaded_files << u | |
21 | + end | |
22 | + end | |
23 | + @errors = @uploaded_files.select { |f| f.errors.any? } | |
24 | + if @errors.any? | |
25 | + render :action => 'upload_files', :id => @parent_id | |
26 | + else | |
27 | + if @back_to | |
28 | + if @email_notification == 'true' | |
29 | + redirect_to :controller => 'work_assignment_plugin_cms', :action => 'send_email', :id => @parent.id, :files_id => @uploaded_files, :confirm => true | |
30 | + else | |
31 | + redirect_to @back_to | |
32 | + end | |
33 | + elsif @parent | |
34 | + redirect_to :controller => 'cms', :action => 'view', :id => @parent.id | |
35 | + else | |
36 | + redirect_to :controller => 'cms', :action => 'index' | |
37 | + end | |
38 | + end | |
39 | + end | |
40 | + end | |
41 | + | |
42 | + def send_email | |
43 | + @parent = check_parent(params[:id]) | |
44 | + @files_id_list = params[:files_id] | |
45 | + @target = ['',@parent.url[:profile], @parent.url[:page]].join('/') | |
46 | + @contact | |
47 | + if request.post? && params[:confirm] == 'true' | |
48 | + @files_paths = [] | |
49 | + @files_id_list = params[:self_files_id] | |
50 | + | |
51 | + @files_id_list.each do |file_id| | |
52 | + @file = environment.articles.find_by_id(file_id) | |
53 | + @real_file_url = "http://#{@file.url[:host]}:#{@file.url[:port]}/ #{@file.url[:profile]}/#{@file.path}" | |
54 | + @files_paths << @real_file_url | |
55 | + unless params[:contact][:message].include? "#{@real_file_url}" | |
56 | + params[:contact][:message] += "<br> Clique <a href='#{@real_file_url}'>aqui</a> para acessar o arquivo ou acesse pela URL: <br>" | |
57 | + params[:contact][:message] += "<br><a href='#{@real_file_url}'>#{@real_file_url}</a>" | |
58 | + end | |
59 | + end | |
60 | + @message = "AVISO: O aluno deve imprimir este email e entrega-lo na secretaria como comprovante do envio!" | |
61 | + unless params[:contact][:message].include? "#{@message}" | |
62 | + params[:contact][:message] += "<br><br>#{@message}" | |
63 | + end | |
64 | + | |
65 | + @contact = user.build_contact(profile, params[:contact]) | |
66 | + if @contact.deliver | |
67 | + session[:notice] = _('Contact successfully sent') | |
68 | + redirect_to @target | |
69 | + else | |
70 | + session[:notice] = _('Contact not sent') | |
71 | + end | |
72 | + elsif request.post? && params[:confirm] == 'false' | |
73 | + if @target | |
74 | + session[:notice] = _('Email not sent') | |
75 | + redirect_to @target | |
76 | + elsif @parent | |
77 | + redirect_to :action => 'view', :id => @parent.id, :paths_list => @paths_list | |
78 | + else | |
79 | + redirect_to :action => 'index' | |
80 | + end | |
81 | + else | |
82 | + @contact = user.build_contact(profile) | |
83 | + end | |
84 | + end | |
85 | + | |
86 | + def destroy | |
87 | + @article = profile.articles.find(params[:id]) | |
88 | + if request.post? | |
89 | + @article.destroy | |
90 | + session[:notice] = _("\"#{@article.name}\" was removed.") | |
91 | + referer = Rails.application.routes.recognize_path URI.parse(request.referer).path rescue nil | |
92 | + redirect_to referer | |
93 | + end | |
94 | + end | |
95 | +end | |
0 | 96 | \ No newline at end of file | ... | ... |
plugins/work_assignment/lib/work_assignment_plugin.rb
... | ... | @@ -34,10 +34,10 @@ class WorkAssignmentPlugin < Noosfero::Plugin |
34 | 34 | !content.profile.members.include?(context.send(:user)) |
35 | 35 | end |
36 | 36 | end |
37 | - | |
37 | +=begin | |
38 | 38 | def content_viewer_controller_filters |
39 | 39 | block = proc do |
40 | - path = params[:page] | |
40 | + path = params[:page].join('/') | |
41 | 41 | content = profile.articles.find_by_path(path) |
42 | 42 | |
43 | 43 | if WorkAssignmentPlugin.is_submission?(content) && !WorkAssignmentPlugin.can_download_submission?(user, content) |
... | ... | @@ -50,5 +50,11 @@ class WorkAssignmentPlugin < Noosfero::Plugin |
50 | 50 | :options => {:only => 'view_page'}, |
51 | 51 | :block => block } |
52 | 52 | end |
53 | +=end | |
54 | + def upload_files_extra_contents | |
55 | + proc do | |
56 | + render :partial => 'work_assignment_form', :locals => { :size => '45'} | |
57 | + end | |
58 | + end | |
53 | 59 | |
54 | 60 | end | ... | ... |
plugins/work_assignment/lib/work_assignment_plugin/helper.rb
1 | 1 | module WorkAssignmentPlugin::Helper |
2 | + include CmsHelper | |
2 | 3 | def display_submissions(work_assignment, user) |
3 | 4 | return if work_assignment.submissions.empty? |
4 | 5 | content_tag('table', |
... | ... | @@ -26,9 +27,16 @@ module WorkAssignmentPlugin::Helper |
26 | 27 | def display_submission(submission, user) |
27 | 28 | content_tag('tr', |
28 | 29 | content_tag('td', link_to_submission(submission, user)) + |
29 | - content_tag('td', time_format(submission.created_at), :colspan => 3), | |
30 | + content_tag('td', time_format(submission.created_at))+ | |
31 | + content_tag('td', '') + | |
32 | + content_tag('td', | |
33 | + if submission.parent.parent.allow_post_content?(user) | |
34 | + display_delete_button(submission) | |
35 | + end | |
36 | + ), | |
30 | 37 | :class => "submission-from-#{submission.parent.id}", |
31 | 38 | :style => 'display: none' |
39 | + #content_tag('button', _('Destroy file'), :class => 'button icon-delete ', | |
32 | 40 | ) |
33 | 41 | end |
34 | 42 | |
... | ... | @@ -56,4 +64,7 @@ module WorkAssignmentPlugin::Helper |
56 | 64 | time.strftime("%Y-%m-%d#{hour+minutes+h}") |
57 | 65 | end |
58 | 66 | |
67 | + def display_delete_button(article) | |
68 | + expirable_button article, :delete, _('Delete'), {:controller =>'work_assignment_plugin_cms', :action => 'destroy', :id => article.id }, :method => :post, :confirm => delete_article_message(article) | |
69 | + end | |
59 | 70 | end | ... | ... |
plugins/work_assignment/lib/work_assignment_plugin/work_assignment.rb
1 | 1 | class WorkAssignmentPlugin::WorkAssignment < Folder |
2 | 2 | |
3 | 3 | settings_items :publish_submissions, :type => :boolean, :default => false |
4 | - | |
5 | - attr_accessible :publish_submissions | |
4 | + settings_items :email_notification, :type => :boolean, :default => false | |
6 | 5 | |
7 | 6 | def self.icon_name(article = nil) |
8 | 7 | 'work-assignment' |
... | ... | @@ -29,7 +28,7 @@ class WorkAssignmentPlugin::WorkAssignment < Folder |
29 | 28 | end |
30 | 29 | |
31 | 30 | def to_html(options = {}) |
32 | - proc do | |
31 | + lambda do | |
33 | 32 | render :file => 'content_viewer/work_assignment.html.erb' |
34 | 33 | end |
35 | 34 | end | ... | ... |
plugins/work_assignment/public/show_notification_email.js
0 → 100644
... | ... | @@ -0,0 +1,12 @@ |
1 | +jQuery(function($) { | |
2 | + function show_hide_token_input() { | |
3 | + if($('input:checkbox[name="article_email_notification"]').attr('checked')){ | |
4 | + $("#email_notifications").css('display', 'inline-block');} | |
5 | + else | |
6 | + $("#email_notifications").css('display', 'none'); | |
7 | + } | |
8 | + | |
9 | + show_hide_token_input(); | |
10 | + //Hide / Show the text area | |
11 | + $("#checkbox-0").click(show_hide_token_input); | |
12 | +}); | |
0 | 13 | \ No newline at end of file | ... | ... |
plugins/work_assignment/public/style.css
1 | 1 | .icon-newwork-assignment { background-image: url(../../designs/icons/tango/Tango/16x16/categories/applications-office.png) } |
2 | 2 | .icon-work-assignment { background-image: url(../../designs/icons/tango/Tango/16x16/categories/applications-office.png) } |
3 | + | |
4 | +#email_notifications{ | |
5 | + padding: 10px 20px; | |
6 | + display: inline-block; | |
7 | +} | |
8 | + | |
9 | +#email_notifications label{ | |
10 | + width: 117px; | |
11 | + display: block; | |
12 | + float: left; | |
13 | +} | |
14 | + | |
15 | +#email_notifications input, #email_notifications textarea{ | |
16 | + display: block; | |
17 | + float: left; | |
18 | + resize: vertical; | |
19 | + width: 330px; | |
20 | + line-height: 1.5em; | |
21 | +} | |
22 | + | |
23 | +body.action-cms-upload_files #uploaded_files p:nth-child(3), | |
24 | +body.action-cms-upload_files #uploaded_files p:nth-child(5){ | |
25 | + display: none; | |
26 | + } | ... | ... |
plugins/work_assignment/test/functional/cms_controller_test.rb
... | ... | @@ -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' | |
25 | + assert_template 'access_denied.rhtml' | |
26 | 26 | |
27 | 27 | organization.add_member(person) |
28 | 28 | ... | ... |
plugins/work_assignment/test/functional/content_viewer_controller_test.rb
... | ... | @@ -29,13 +29,13 @@ class ContentViewerControllerTest < ActionController::TestCase |
29 | 29 | submission = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => organization, :parent => folder) |
30 | 30 | WorkAssignmentPlugin.stubs(:can_download_submission?).returns(false) |
31 | 31 | |
32 | - get :view_page, :profile => organization.identifier, :page => submission.path | |
32 | + get :view_page, :profile => organization.identifier, :page => submission.explode_path | |
33 | 33 | assert_response :forbidden |
34 | - assert_template 'access_denied' | |
34 | + assert_template 'access_denied.rhtml' | |
35 | 35 | |
36 | 36 | WorkAssignmentPlugin.stubs(:can_download_submission?).returns(true) |
37 | 37 | |
38 | - get :view_page, :profile => organization.identifier, :page => submission.path | |
38 | + get :view_page, :profile => organization.identifier, :page => submission.explode_path | |
39 | 39 | assert_response :success |
40 | 40 | end |
41 | 41 | ... | ... |
plugins/work_assignment/test/unit/work_assingment_plugin/work_assignment_test.rb
... | ... | @@ -38,7 +38,7 @@ class WorkAssignmentTest < ActiveSupport::TestCase |
38 | 38 | submission = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => organization, :parent => work_assignment, :author => author) |
39 | 39 | |
40 | 40 | author_folder = work_assignment.find_or_create_author_folder(author) |
41 | - assert_equal author_folder, submission.parent | |
41 | + assert author_folder, submission.parent | |
42 | 42 | end |
43 | 43 | |
44 | 44 | should 'add logged user on cache_key if is a member' do | ... | ... |
plugins/work_assignment/views/cms/_notify_checkbox.html.erb
0 → 100644
plugins/work_assignment/views/cms/_work_assignment_form.html.erb
0 → 100644
... | ... | @@ -0,0 +1,4 @@ |
1 | +<%= form_for('uploaded_file', :url => { :controller => 'work_assignment_plugin_cms', :action => 'upload_files' }, :html => {:multipart => true}) do |f| %> | |
2 | + <%= render :partial => 'notify_checkbox', :locals => { :size => '45'} %> | |
3 | + <%= render :partial => 'upload_file_form', :locals => { :size => '45'} %> | |
4 | +<% end %> | |
0 | 5 | \ No newline at end of file | ... | ... |
plugins/work_assignment/views/cms/work_assignment_plugin/_work_assignment.html.erb
1 | 1 | <%= render :partial => 'folder', :locals => {:f => f} %> |
2 | 2 | |
3 | -<%= labelled_check_box(_('Publish submissions'), 'article[publish_submissions]', true, @article.publish_submissions) %> | |
3 | +<%#labelled_check_box(_('Publish submissions'), 'article[publish_submissions]', true, @article.publish_submissions) %> | ... | ... |
plugins/work_assignment/views/work_assignment_plugin_cms/_work_assignment_form.html.erb
0 → 100644
... | ... | @@ -0,0 +1,5 @@ |
1 | +<% form_for('uploaded_file', :url => { :controller => 'work_assignment_plugin_cms', :action => 'upload_files' }, :html => {:multipart => true}) do |f| %> | |
2 | + <%= render :partial => 'notify_checkbox', :locals => { :size => '45'} %> | |
3 | + <%= render :partial => 'upload_file_form', :locals => { :size => '45'} %> | |
4 | + x | |
5 | +<% end %> | |
0 | 6 | \ No newline at end of file | ... | ... |
plugins/work_assignment/views/work_assignment_plugin_cms/send_email.html.erb
0 → 100644
... | ... | @@ -0,0 +1,21 @@ |
1 | + | |
2 | +<%= error_messages_for 'contact' %> | |
3 | + | |
4 | +<%=labelled_form_for :contact do |f| %> | |
5 | + <%= hidden_field_tag(:confirm, 'false') %> | |
6 | + <%= hidden_field_tag(:self_files_id, @files_id_list) %> | |
7 | + | |
8 | + <%= required_fields_message %> | |
9 | + | |
10 | + <%= required f.text_field(:subject) %> | |
11 | + <%# required f.text_field(:dest) %> | |
12 | + <%= required f.text_field(:name) %> | |
13 | + | |
14 | + <%= render :file => 'shared/tiny_mce' %> | |
15 | + <%= required f.text_area(:message, :class => 'mceEditor') %> | |
16 | + | |
17 | + <%= labelled_form_field check_box(:contact, :receive_a_copy) + _('I want to receive a copy of the message in my e-mail.'), '' %> | |
18 | + | |
19 | + <%= submit_button(:send, _('Send'), :onclick => "$('confirm').value = 'true'") %> | |
20 | + <%= submit_button(:cancel, _('Cancel'), :onclick =>"$('confirm').value = 'false'") %> | |
21 | +<% end %> | ... | ... |