From 4de6c173a9118a6968df462b8287dfd3c0e18f16 Mon Sep 17 00:00:00 2001 From: Aurélio A. Heckert Date: Wed, 6 Feb 2013 17:09:46 -0300 Subject: [PATCH] Filter useful folders to upload images and pre-select a gallery --- app/helpers/application_helper.rb | 10 ++++++++++ app/helpers/forms_helper.rb | 15 ++++++++++----- app/views/cms/_text_editor_sidebar.rhtml | 7 ++++++- test/functional/cms_controller_test.rb | 18 ++++++++++++++++++ test/unit/application_helper_test.rb | 32 ++++++++++++++++++++++++++++++++ 5 files changed, 76 insertions(+), 6 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index db14797..b99e5d8 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1423,4 +1423,14 @@ module ApplicationHelper @no_design_blocks = true end + def default_folder_for_image_upload(profile) + default_folder = profile.folders.find_by_type('Gallery') + default_folder = profile.folders.find_by_type('Folder') if default_folder.nil? + default_folder + end + + def content_id_to_str(content) + content.nil? ? '' : content.id.to_s + end + end diff --git a/app/helpers/forms_helper.rb b/app/helpers/forms_helper.rb index 70a9b5b..ef906cb 100644 --- a/app/helpers/forms_helper.rb +++ b/app/helpers/forms_helper.rb @@ -263,23 +263,28 @@ module FormsHelper field_id, options_for_select( [[root, '']] + - collection.collect {|f| [ root + '/' + f.full_name, f.id ] }, - default_value + collection.collect {|f| [ root + '/' + f.full_name, f.id.to_s ] }, + default_value.to_s ), html_options.merge(js_options) ) ) end - def select_profile_folder(label_text, field_id, profile, default_value='', html_options = {}, js_options = {}) + def select_profile_folder(label_text, field_id, profile, default_value='', html_options = {}, js_options = {}, find_options = {}) + if find_options.empty? + folders = profile.folders + else + folders = profile.folders.find :all, find_options + end result = labelled_form_field( label_text, select_tag( field_id, options_for_select( [[profile.identifier, '']] + - profile.folders.collect {|f| [ profile.identifier + '/' + f.full_name, f.id ] }, - default_value + folders.collect {|f| [ profile.identifier + '/' + f.full_name, f.id.to_s ] }, + default_value.to_s ), html_options.merge(js_options) ) diff --git a/app/views/cms/_text_editor_sidebar.rhtml b/app/views/cms/_text_editor_sidebar.rhtml index e67dc5a..751baa6 100644 --- a/app/views/cms/_text_editor_sidebar.rhtml +++ b/app/views/cms/_text_editor_sidebar.rhtml @@ -9,7 +9,12 @@
<% form_tag({ :action => 'media_upload' }, :multipart => true) do %>
- <%= select_profile_folder(_('Choose folder to upload files:'), :parent_id, profile) %> + <% default_folder = content_id_to_str default_folder_for_image_upload(profile) %> + <%= select_profile_folder( + _('Choose folder to upload files:'), + :parent_id, profile, default_folder, {}, {}, + {:conditions => 'type="Folder" or type="Gallery"'} + ) %>

<%= file_field_tag('file1') %>

<%= file_field_tag('file2') %>

diff --git a/test/functional/cms_controller_test.rb b/test/functional/cms_controller_test.rb index 4d9fdbe..1ee5489 100644 --- a/test/functional/cms_controller_test.rb +++ b/test/functional/cms_controller_test.rb @@ -1612,6 +1612,24 @@ class CmsControllerTest < ActionController::TestCase assert_template 'access_denied.rhtml' end + should 'filter profile folders to select' do + env = Environment.default + env.enable 'media_panel' + env.save! + folder = fast_create(Folder, :name=>'a', :profile_id => profile.id) + gallery = fast_create(Gallery, :name=>'b', :profile_id => profile.id) + blog = fast_create(Blog, :name=>'c', :profile_id => profile.id) + article = fast_create(TinyMceArticle, :profile_id => profile.id) + get :edit, :profile => profile.identifier, :id => article.id + assert_template 'edit' + assert_tag :tag => 'select', :attributes => { :name => "parent_id" }, + :descendant => { :tag => "option", + :attributes => { :selected => 'selected', :value => gallery.id.to_s }} + assert_no_tag :tag => 'select', :attributes => { :name => "parent_id" }, + :descendant => { :tag => "option", + :attributes => { :value => blog.id.to_s }} + end + protected # FIXME this is to avoid adding an extra dependency for a proper JSON parser. diff --git a/test/unit/application_helper_test.rb b/test/unit/application_helper_test.rb index 0efbddf..b4c5fc2 100644 --- a/test/unit/application_helper_test.rb +++ b/test/unit/application_helper_test.rb @@ -657,6 +657,38 @@ class ApplicationHelperTest < ActiveSupport::TestCase assert_not_nil add_zoom_to_images end + should 'content_id_to_str return the content id as string' do + article = fast_create(Article, :name => 'my article') + response = content_id_to_str(article) + assert_equal String, response.class + assert !response.empty? + end + + should 'content_id_to_str return empty string when receiving nil' do + assert_equal '', content_id_to_str(nil) + end + + should 'select gallery as default folder for image upload' do + profile = create_user('testuser').person + folder = fast_create(Folder, :profile_id => profile.id) + gallery = fast_create(Gallery, :profile_id => profile.id) + blog = fast_create(Blog, :profile_id => profile.id) + assert_equal gallery, default_folder_for_image_upload(profile) + end + + should 'select generic folder as default folder for image upload when no gallery' do + profile = create_user('testuser').person + folder = fast_create(Folder, :profile_id => profile.id) + blog = fast_create(Blog, :profile_id => profile.id) + assert_equal folder, default_folder_for_image_upload(profile) + end + + should 'return nil as default folder for image upload when no gallery or generic folder' do + profile = create_user('testuser').person + blog = fast_create(Blog, :profile_id => profile.id) + assert_nil default_folder_for_image_upload(profile) + end + protected include NoosferoTestHelper -- libgit2 0.21.2