Commit 525240d0a9ee1ebd1692316642e7e2e144b69925
1 parent
8f28228d
Exists in
master
and in
29 other branches
[work-assignment] Fixing loop with callbacks
* Must fix the class calls commented on Article class
Showing
6 changed files
with
40 additions
and
28 deletions
Show diff stats
app/models/article.rb
@@ -640,16 +640,16 @@ class Article < ActiveRecord::Base | @@ -640,16 +640,16 @@ class Article < ActiveRecord::Base | ||
640 | # Subclasses aren't (re)loaded, and acts_as_solr | 640 | # Subclasses aren't (re)loaded, and acts_as_solr |
641 | # depends on subclasses method to search | 641 | # depends on subclasses method to search |
642 | # see http://stackoverflow.com/questions/4138957/activerecordsubclassnotfound-error-when-using-sti-in-rails/4139245 | 642 | # see http://stackoverflow.com/questions/4138957/activerecordsubclassnotfound-error-when-using-sti-in-rails/4139245 |
643 | - UploadedFile | ||
644 | - TextArticle | ||
645 | - TinyMceArticle | ||
646 | - TextileArticle | ||
647 | - Folder | ||
648 | - EnterpriseHomepage | ||
649 | - Gallery | ||
650 | - Blog | ||
651 | - Forum | ||
652 | - Event | 643 | +# UploadedFile |
644 | +# TextArticle | ||
645 | +# TinyMceArticle | ||
646 | +# TextileArticle | ||
647 | +# Folder | ||
648 | +# EnterpriseHomepage | ||
649 | +# Gallery | ||
650 | +# Blog | ||
651 | +# Forum | ||
652 | +# Event | ||
653 | 653 | ||
654 | def self.f_type_proc(klass) | 654 | def self.f_type_proc(klass) |
655 | klass.constantize.type_name | 655 | klass.constantize.type_name |
@@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
1 | +require_dependency 'uploaded_file' | ||
2 | + | ||
3 | +class UploadedFile < Article | ||
4 | + after_save do |uploaded_file| | ||
5 | + if uploaded_file.parent.kind_of?(WorkAssignmentPlugin::WorkAssignment) | ||
6 | + author_folder = uploaded_file.parent.find_or_create_author_folder(uploaded_file.author) | ||
7 | + uploaded_file.name = WorkAssignmentPlugin::WorkAssignment.versioned_name(uploaded_file, author_folder) | ||
8 | + uploaded_file.parent = author_folder | ||
9 | + logger.info("\n\n==> #{uploaded_file.name}\n\n") | ||
10 | + uploaded_file.save! | ||
11 | + end | ||
12 | + end | ||
13 | +end |
plugins/work_assignment/lib/work_assignment_plugin.rb
plugins/work_assignment/lib/work_assignment_plugin/work_assignment.rb
1 | class WorkAssignmentPlugin::WorkAssignment < Folder | 1 | class WorkAssignmentPlugin::WorkAssignment < Folder |
2 | 2 | ||
3 | - after_save do |work_assignment| | ||
4 | - work_assignment.children.select {|child| child.kind_of?(UploadedFile)}.each do |submission| | ||
5 | - author_folder = work_assignment.find_or_create_author_folder(submission.author) | ||
6 | - submission.name = versioned_name(submission, author_folder) | ||
7 | - submission.parent = author_folder | ||
8 | - submission.save(false) | ||
9 | - end | ||
10 | - end | ||
11 | - | ||
12 | settings_items :publish_submissions, :type => :boolean, :default => false | 3 | settings_items :publish_submissions, :type => :boolean, :default => false |
13 | 4 | ||
14 | def self.icon_name(article = nil) | 5 | def self.icon_name(article = nil) |
@@ -24,9 +15,7 @@ class WorkAssignmentPlugin::WorkAssignment < Folder | @@ -24,9 +15,7 @@ class WorkAssignmentPlugin::WorkAssignment < Folder | ||
24 | end | 15 | end |
25 | 16 | ||
26 | def self.versioned_name(submission, folder) | 17 | def self.versioned_name(submission, folder) |
27 | - return submission.name if submission.name =~ /\(V[0-9]*\)/ | ||
28 | - count = folder.children.include?(submission) ? folder.children.count : folder.children.count + 1 | ||
29 | - "(V#{count}) #{submission.name}" | 18 | + "(V#{folder.children.count + 1}) #{submission.name}" |
30 | end | 19 | end |
31 | 20 | ||
32 | def accept_comments? | 21 | def accept_comments? |
@@ -44,7 +33,7 @@ class WorkAssignmentPlugin::WorkAssignment < Folder | @@ -44,7 +33,7 @@ class WorkAssignmentPlugin::WorkAssignment < Folder | ||
44 | end | 33 | end |
45 | 34 | ||
46 | def find_or_create_author_folder(author) | 35 | def find_or_create_author_folder(author) |
47 | - children.find_by_slug(author.identifier) || Folder.create!(:name => author.name, :slug => author.identifier, :parent => self, :profile => profile) | 36 | + children.find_by_slug(author.identifier.to_slug) || Folder.create!(:name => author.name, :slug => author.identifier.to_slug, :parent => self, :profile => profile) |
48 | end | 37 | end |
49 | 38 | ||
50 | def submissions | 39 | def submissions |
plugins/work_assignment/test/functional/cms_controller_test.rb
@@ -30,5 +30,15 @@ class CmsControllerTest < ActionController::TestCase | @@ -30,5 +30,15 @@ class CmsControllerTest < ActionController::TestCase | ||
30 | assert_response :success | 30 | assert_response :success |
31 | end | 31 | end |
32 | 32 | ||
33 | + should 'upload submission and automatically move it to the author folder' do | ||
34 | + organization = fast_create(Organization) | ||
35 | + work_assignment = WorkAssignmentPlugin::WorkAssignment.create!(:name => 'Work Assignment', :profile => organization) | ||
36 | + organization.add_member(person) | ||
37 | + post :upload_files, :profile => organization.identifier, :parent_id => work_assignment.id, :uploaded_files => [fixture_file_upload('/files/test.txt', 'text/plain')] | ||
38 | + | ||
39 | + submission = UploadedFile.last | ||
40 | + assert_equal work_assignment.find_or_create_author_folder(person), submission.parent | ||
41 | + end | ||
42 | + | ||
33 | end | 43 | end |
34 | 44 |
plugins/work_assignment/test/unit/work_assingment_plugin_test.rb
@@ -9,12 +9,10 @@ class WorkAssignmentPluginTest < ActiveSupport::TestCase | @@ -9,12 +9,10 @@ class WorkAssignmentPluginTest < ActiveSupport::TestCase | ||
9 | work_assignment = WorkAssignmentPlugin::WorkAssignment.create!(:name => 'Work Assignment', :profile => organization) | 9 | work_assignment = WorkAssignmentPlugin::WorkAssignment.create!(:name => 'Work Assignment', :profile => organization) |
10 | content.parent = work_assignment | 10 | content.parent = work_assignment |
11 | content.save! | 11 | content.save! |
12 | - assert !WorkAssignmentPlugin.is_submission?(content) | ||
13 | - | ||
14 | - author_folder = work_assignment.find_or_create_author_folder(fast_create(Person)) | ||
15 | - content.parent = author_folder | ||
16 | - content.save! | ||
17 | assert WorkAssignmentPlugin.is_submission?(content) | 12 | assert WorkAssignmentPlugin.is_submission?(content) |
13 | + | ||
14 | + author_folder = work_assignment.find_or_create_author_folder(content.author) | ||
15 | + assert_equal author_folder, content.parent | ||
18 | end | 16 | end |
19 | 17 | ||
20 | should 'be able to download submission if work_assignment published submissions' do | 18 | should 'be able to download submission if work_assignment published submissions' do |