]> source.dussan.org Git - redmine.git/commitdiff
Adds a "visible" option on User and Project custom fields (#1738).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 7 Nov 2010 14:15:01 +0000 (14:15 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 7 Nov 2010 14:15:01 +0000 (14:15 +0000)
If set to false, the custom field won't be display on user profile/project overview.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4382 e93f8b46-1217-0410-a6f0-8f06a7374b81

15 files changed:
app/controllers/users_controller.rb
app/models/custom_value.rb
app/views/custom_fields/_form.rhtml
app/views/projects/index.xml.builder
app/views/projects/show.rhtml
app/views/projects/show.xml.builder
app/views/users/show.rhtml
config/locales/en.yml
config/locales/fr.yml
db/migrate/20101107130441_add_custom_fields_visible.rb [new file with mode: 0644]
test/fixtures/custom_values.yml
test/functional/projects_controller_test.rb
test/functional/users_controller_test.rb
test/integration/api_test/projects_test.rb
vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb

index 66979d5e23624a5ad7e74d77d0939f07d6ab7012..bf38f87fd171d98a2e1f371aae272441249b1769 100644 (file)
@@ -51,7 +51,6 @@ class UsersController < ApplicationController
   
   def show
     @user = User.find(params[:id])
-    @custom_values = @user.custom_values
     
     # show projects based on current user visibility
     @memberships = @user.memberships.all(:conditions => Project.visible_by(User.current))
index 39ba5999482c220320d86dc59e38df957b58a15c..97bd47f9459412d298248a5b5d1dc5ef2d0c10e2 100644 (file)
@@ -34,6 +34,10 @@ class CustomValue < ActiveRecord::Base
     custom_field.editable?
   end
   
+  def visible?
+    custom_field.visible?
+  end
+  
   def required?
     custom_field.is_required?
   end
index 9871567f7fb345473d7b6b4fbe6ee1d0be3bf2f3..a71df87aad127ad4f82e279c080776ece4479077 100644 (file)
@@ -86,10 +86,12 @@ when "IssueCustomField" %>
     
 <% when "UserCustomField" %>
     <p><%= f.check_box :is_required %></p>
+    <p><%= f.check_box :visible %></p>
     <p><%= f.check_box :editable %></p>
 
 <% when "ProjectCustomField" %>
     <p><%= f.check_box :is_required %></p>
+    <p><%= f.check_box :visible %></p>
     <p><%= f.check_box :searchable %></p>
 
 <% when "TimeEntryCustomField" %>
index d5200f6208db5a8fb0e553b0dc8c5a8bb6bd64ef..6ea2a3aa73d45e0d3b87b3f6ce44f30d887bf3ce 100644 (file)
@@ -8,7 +8,7 @@ xml.projects :type => 'array' do
       xml.description project.description
       xml.parent(:id => project.parent_id, :name => project.parent.name) unless project.parent.nil?
       xml.custom_fields do
-        project.custom_field_values.each do |custom_value|
+        project.visible_custom_field_values.each do |custom_value|
           xml.custom_field custom_value.value, :id => custom_value.custom_field_id, :name => custom_value.custom_field.name
         end
       end unless project.custom_field_values.empty?
index 9651651ac9083e270033f288c24c913a778a39fc..414358acaf4188dee81aa1e92feb2d2b596069e8 100644 (file)
@@ -16,7 +16,7 @@
        <li><%=l(:label_subproject_plural)%>:
            <%= @subprojects.collect{|p| link_to(h(p), :action => 'show', :id => p)}.join(", ") %></li>
   <% end %>
-       <% @project.custom_values.each do |custom_value| %>
+       <% @project.visible_custom_field_values.each do |custom_value| %>
        <% if !custom_value.value.blank? %>
           <li><%= custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li>
        <% end %>
index f49d7ee10d1082439257d9e06e785befc03e14f9..d99db8b56486e77fbdedab82647516dfe8a37e24 100644 (file)
@@ -7,7 +7,7 @@ xml.project do
   xml.homepage    @project.homepage
   
   xml.custom_fields do
-    @project.custom_field_values.each do |custom_value|
+    @project.visible_custom_field_values.each do |custom_value|
       xml.custom_field custom_value.value, :id => custom_value.custom_field_id, :name => custom_value.custom_field.name
     end
   end unless @project.custom_field_values.empty?
index afab71110aaac2d6ede58264b092dd73022ba6e5..c100e6ebd060a551deb13e7443f08b3b68b2c121 100644 (file)
@@ -9,7 +9,7 @@
        <% unless @user.pref.hide_mail %>
                <li><%=l(:field_mail)%>: <%= mail_to(h(@user.mail), nil, :encode => 'javascript') %></li>
        <% end %>
-       <% for custom_value in @custom_values %>
+       <% @user.visible_custom_field_values.each do |custom_value| %>
        <% if !custom_value.value.blank? %>
     <li><%=h custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li>
        <% end %>
index 3b4b802583efd23ab54d9cea0ddb2700a7dd6ed8..78654b1fb5d97f72425f27ef03fab6896776e670 100644 (file)
@@ -297,6 +297,7 @@ en:
   field_member_of_group: "Assignee's group"
   field_assigned_to_role: "Assignee's role"
   field_text: Text field
+  field_visible: Visible
   
   setting_app_title: Application title
   setting_app_subtitle: Application subtitle
index 44e048722a459e5507caff6fd3154284297754d0..350c38dbdf65eaaef08ccda636c258efb6cfa9f8 100644 (file)
@@ -303,6 +303,7 @@ fr:
   field_sharing: Partage
   field_active: Actif
   field_parent_issue: Tâche parente
+  field_visible: Visible
   
   setting_app_title: Titre de l'application
   setting_app_subtitle: Sous-titre de l'application
@@ -943,3 +944,4 @@ fr:
   field_member_of_group: Groupe de l'assigné
   field_assigned_to_role: Rôle de l'assigné
   field_start_date: Start date
+  setting_emails_header: Emails header
diff --git a/db/migrate/20101107130441_add_custom_fields_visible.rb b/db/migrate/20101107130441_add_custom_fields_visible.rb
new file mode 100644 (file)
index 0000000..25ef446
--- /dev/null
@@ -0,0 +1,9 @@
+class AddCustomFieldsVisible < ActiveRecord::Migration
+  def self.up
+    add_column :custom_fields, :visible, :boolean, :null => false, :default => true
+  end
+
+  def self.down
+    remove_column :custom_fields, :visible
+  end
+end
index 76ce067a74509d75cea6391a5e27f1b88b92a2cf..58288b39fc3efdacfaf73e3d498e86a236624b51 100644 (file)
@@ -28,7 +28,7 @@ custom_values_003:
   custom_field_id: 4
   customized_id: 2
   id: 3
-  value: ""
+  value: "01 42 50 00 00"
 custom_values_004: 
   customized_type: Issue
   custom_field_id: 2
index 7122f89e22670352e2463703b6af6b447434309f..59d6286a1308ea75b0b12717940c5a3293a48d12 100644 (file)
@@ -284,6 +284,18 @@ class ProjectsControllerTest < ActionController::TestCase
     assert_template 'show'
     assert_not_nil assigns(:project)
     assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)
+    
+    assert_tag 'li', :content => /Development status/
+  end
+
+  def test_show_should_not_display_hidden_custom_fields
+    ProjectCustomField.find_by_name('Development status').update_attribute :visible, false
+    get :show, :id => 'ecookbook'
+    assert_response :success
+    assert_template 'show'
+    assert_not_nil assigns(:project)
+    
+    assert_no_tag 'li', :content => /Development status/
   end
   
   def test_show_should_not_fail_when_custom_values_are_nil
index 5e288d44570a3d020f840aaa4c50b6aa957b6b06..100ec8ded07ba98d90e42504d3a9bf4f4c0b040e 100644 (file)
@@ -24,7 +24,7 @@ class UsersController; def rescue_action(e) raise e end; end
 class UsersControllerTest < ActionController::TestCase
   include Redmine::I18n
   
-  fixtures :users, :projects, :members, :member_roles, :roles, :auth_sources
+  fixtures :users, :projects, :members, :member_roles, :roles, :auth_sources, :custom_fields, :custom_values
   
   def setup
     @controller = UsersController.new
@@ -65,6 +65,19 @@ class UsersControllerTest < ActionController::TestCase
     assert_response :success
     assert_template 'show'
     assert_not_nil assigns(:user)
+    
+    assert_tag 'li', :content => /Phone number/
+  end
+  
+  def test_show_should_not_display_hidden_custom_fields
+    @request.session[:user_id] = nil
+    UserCustomField.find_by_name('Phone number').update_attribute :visible, false
+    get :show, :id => 2
+    assert_response :success
+    assert_template 'show'
+    assert_not_nil assigns(:user)
+    
+    assert_no_tag 'li', :content => /Phone number/
   end
 
   def test_show_should_not_fail_when_custom_values_are_nil
index 7c090a9251d73f2a969bba728dd14c85aae21346..de84daa08c160f9805bd5df45ab3ac8eb1b3451b 100644 (file)
@@ -36,6 +36,15 @@ class ApiTest::ProjectsTest < ActionController::IntegrationTest
     get '/projects/1.xml'
     assert_response :success
     assert_equal 'application/xml', @response.content_type
+    assert_tag 'custom_field', :attributes => {:name => 'Development status'}, :content => 'Stable'
+  end
+    
+  def test_show_should_not_display_hidden_custom_fields
+    ProjectCustomField.find_by_name('Development status').update_attribute :visible, false
+    get '/projects/1.xml'
+    assert_response :success
+    assert_equal 'application/xml', @response.content_type
+    assert_no_tag 'custom_field', :attributes => {:name => 'Development status'}
   end
     
   def test_create
index 01a61bf48664d306ab3baca343f996c283d6c719..03b36f69879b78c9397f83568841bcfeb3ff244f 100644 (file)
@@ -62,6 +62,10 @@ module Redmine
           @custom_field_values ||= available_custom_fields.collect { |x| custom_values.detect { |v| v.custom_field == x } || custom_values.build(:custom_field => x, :value => nil) }
         end
         
+        def visible_custom_field_values
+          custom_field_values.select(&:visible?)
+        end
+        
         def custom_field_values_changed?
           @custom_field_values_changed == true
         end