Adds a "visible" option on User and Project custom fields (#1738).
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
This commit is contained in:
parent
3b01ea9fa4
commit
475530e59f
|
@ -51,7 +51,6 @@ class UsersController < ApplicationController
|
||||||
|
|
||||||
def show
|
def show
|
||||||
@user = User.find(params[:id])
|
@user = User.find(params[:id])
|
||||||
@custom_values = @user.custom_values
|
|
||||||
|
|
||||||
# show projects based on current user visibility
|
# show projects based on current user visibility
|
||||||
@memberships = @user.memberships.all(:conditions => Project.visible_by(User.current))
|
@memberships = @user.memberships.all(:conditions => Project.visible_by(User.current))
|
||||||
|
|
|
@ -34,6 +34,10 @@ class CustomValue < ActiveRecord::Base
|
||||||
custom_field.editable?
|
custom_field.editable?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def visible?
|
||||||
|
custom_field.visible?
|
||||||
|
end
|
||||||
|
|
||||||
def required?
|
def required?
|
||||||
custom_field.is_required?
|
custom_field.is_required?
|
||||||
end
|
end
|
||||||
|
|
|
@ -86,10 +86,12 @@ when "IssueCustomField" %>
|
||||||
|
|
||||||
<% when "UserCustomField" %>
|
<% when "UserCustomField" %>
|
||||||
<p><%= f.check_box :is_required %></p>
|
<p><%= f.check_box :is_required %></p>
|
||||||
|
<p><%= f.check_box :visible %></p>
|
||||||
<p><%= f.check_box :editable %></p>
|
<p><%= f.check_box :editable %></p>
|
||||||
|
|
||||||
<% when "ProjectCustomField" %>
|
<% when "ProjectCustomField" %>
|
||||||
<p><%= f.check_box :is_required %></p>
|
<p><%= f.check_box :is_required %></p>
|
||||||
|
<p><%= f.check_box :visible %></p>
|
||||||
<p><%= f.check_box :searchable %></p>
|
<p><%= f.check_box :searchable %></p>
|
||||||
|
|
||||||
<% when "TimeEntryCustomField" %>
|
<% when "TimeEntryCustomField" %>
|
||||||
|
|
|
@ -8,7 +8,7 @@ xml.projects :type => 'array' do
|
||||||
xml.description project.description
|
xml.description project.description
|
||||||
xml.parent(:id => project.parent_id, :name => project.parent.name) unless project.parent.nil?
|
xml.parent(:id => project.parent_id, :name => project.parent.name) unless project.parent.nil?
|
||||||
xml.custom_fields do
|
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
|
xml.custom_field custom_value.value, :id => custom_value.custom_field_id, :name => custom_value.custom_field.name
|
||||||
end
|
end
|
||||||
end unless project.custom_field_values.empty?
|
end unless project.custom_field_values.empty?
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
<li><%=l(:label_subproject_plural)%>:
|
<li><%=l(:label_subproject_plural)%>:
|
||||||
<%= @subprojects.collect{|p| link_to(h(p), :action => 'show', :id => p)}.join(", ") %></li>
|
<%= @subprojects.collect{|p| link_to(h(p), :action => 'show', :id => p)}.join(", ") %></li>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% @project.custom_values.each do |custom_value| %>
|
<% @project.visible_custom_field_values.each do |custom_value| %>
|
||||||
<% if !custom_value.value.blank? %>
|
<% if !custom_value.value.blank? %>
|
||||||
<li><%= custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li>
|
<li><%= custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
|
@ -7,7 +7,7 @@ xml.project do
|
||||||
xml.homepage @project.homepage
|
xml.homepage @project.homepage
|
||||||
|
|
||||||
xml.custom_fields do
|
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
|
xml.custom_field custom_value.value, :id => custom_value.custom_field_id, :name => custom_value.custom_field.name
|
||||||
end
|
end
|
||||||
end unless @project.custom_field_values.empty?
|
end unless @project.custom_field_values.empty?
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<% unless @user.pref.hide_mail %>
|
<% unless @user.pref.hide_mail %>
|
||||||
<li><%=l(:field_mail)%>: <%= mail_to(h(@user.mail), nil, :encode => 'javascript') %></li>
|
<li><%=l(:field_mail)%>: <%= mail_to(h(@user.mail), nil, :encode => 'javascript') %></li>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% for custom_value in @custom_values %>
|
<% @user.visible_custom_field_values.each do |custom_value| %>
|
||||||
<% if !custom_value.value.blank? %>
|
<% if !custom_value.value.blank? %>
|
||||||
<li><%=h custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li>
|
<li><%=h custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
|
@ -297,6 +297,7 @@ en:
|
||||||
field_member_of_group: "Assignee's group"
|
field_member_of_group: "Assignee's group"
|
||||||
field_assigned_to_role: "Assignee's role"
|
field_assigned_to_role: "Assignee's role"
|
||||||
field_text: Text field
|
field_text: Text field
|
||||||
|
field_visible: Visible
|
||||||
|
|
||||||
setting_app_title: Application title
|
setting_app_title: Application title
|
||||||
setting_app_subtitle: Application subtitle
|
setting_app_subtitle: Application subtitle
|
||||||
|
|
|
@ -303,6 +303,7 @@ fr:
|
||||||
field_sharing: Partage
|
field_sharing: Partage
|
||||||
field_active: Actif
|
field_active: Actif
|
||||||
field_parent_issue: Tâche parente
|
field_parent_issue: Tâche parente
|
||||||
|
field_visible: Visible
|
||||||
|
|
||||||
setting_app_title: Titre de l'application
|
setting_app_title: Titre de l'application
|
||||||
setting_app_subtitle: Sous-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_member_of_group: Groupe de l'assigné
|
||||||
field_assigned_to_role: Rôle de l'assigné
|
field_assigned_to_role: Rôle de l'assigné
|
||||||
field_start_date: Start date
|
field_start_date: Start date
|
||||||
|
setting_emails_header: Emails header
|
||||||
|
|
|
@ -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
|
|
@ -28,7 +28,7 @@ custom_values_003:
|
||||||
custom_field_id: 4
|
custom_field_id: 4
|
||||||
customized_id: 2
|
customized_id: 2
|
||||||
id: 3
|
id: 3
|
||||||
value: ""
|
value: "01 42 50 00 00"
|
||||||
custom_values_004:
|
custom_values_004:
|
||||||
customized_type: Issue
|
customized_type: Issue
|
||||||
custom_field_id: 2
|
custom_field_id: 2
|
||||||
|
|
|
@ -284,6 +284,18 @@ class ProjectsControllerTest < ActionController::TestCase
|
||||||
assert_template 'show'
|
assert_template 'show'
|
||||||
assert_not_nil assigns(:project)
|
assert_not_nil assigns(:project)
|
||||||
assert_equal Project.find_by_identifier('ecookbook'), 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
|
end
|
||||||
|
|
||||||
def test_show_should_not_fail_when_custom_values_are_nil
|
def test_show_should_not_fail_when_custom_values_are_nil
|
||||||
|
|
|
@ -24,7 +24,7 @@ class UsersController; def rescue_action(e) raise e end; end
|
||||||
class UsersControllerTest < ActionController::TestCase
|
class UsersControllerTest < ActionController::TestCase
|
||||||
include Redmine::I18n
|
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
|
def setup
|
||||||
@controller = UsersController.new
|
@controller = UsersController.new
|
||||||
|
@ -65,6 +65,19 @@ class UsersControllerTest < ActionController::TestCase
|
||||||
assert_response :success
|
assert_response :success
|
||||||
assert_template 'show'
|
assert_template 'show'
|
||||||
assert_not_nil assigns(:user)
|
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
|
end
|
||||||
|
|
||||||
def test_show_should_not_fail_when_custom_values_are_nil
|
def test_show_should_not_fail_when_custom_values_are_nil
|
||||||
|
|
|
@ -36,6 +36,15 @@ class ApiTest::ProjectsTest < ActionController::IntegrationTest
|
||||||
get '/projects/1.xml'
|
get '/projects/1.xml'
|
||||||
assert_response :success
|
assert_response :success
|
||||||
assert_equal 'application/xml', @response.content_type
|
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
|
end
|
||||||
|
|
||||||
def test_create
|
def test_create
|
||||||
|
|
|
@ -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) }
|
@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
|
end
|
||||||
|
|
||||||
|
def visible_custom_field_values
|
||||||
|
custom_field_values.select(&:visible?)
|
||||||
|
end
|
||||||
|
|
||||||
def custom_field_values_changed?
|
def custom_field_values_changed?
|
||||||
@custom_field_values_changed == true
|
@custom_field_values_changed == true
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue