Feature #242 ยป SearchAndEditUsers.patch
| app/controllers/my_controller.rb (working copy) | ||
|---|---|---|
| 17 | 17 | |
| 18 | 18 |
class MyController < ApplicationController |
| 19 | 19 |
helper :issues |
| 20 |
helper :custom_fields |
|
| 21 |
include CustomFieldsHelper |
|
| 20 | 22 |
|
| 21 | 23 |
layout 'base' |
| 22 | 24 |
before_filter :require_login |
| ... | ... | |
| 52 | 54 |
def account |
| 53 | 55 |
@user = User.current |
| 54 | 56 |
@pref = @user.pref |
| 57 |
if request.get? |
|
| 58 |
@custom_values = UserCustomField.find(:all, :order => "#{CustomField.table_name}.position").collect { |x| @user.custom_values.find_by_custom_field_id(x.id) || CustomValue.new(:custom_field => x) }
|
|
| 59 |
else |
|
| 60 |
@custom_values = UserCustomField.find(:all, :order => "#{CustomField.table_name}.position").collect { |x| CustomValue.new(:custom_field => x, :customized => @user, :value => params["custom_fields"][x.id.to_s]) }
|
|
| 61 |
@user.custom_values = @custom_values |
|
| 62 |
end |
|
| 55 | 63 |
if request.post? |
| 56 | 64 |
@user.attributes = params[:user] |
| 57 | 65 |
@user.mail_notification = (params[:notification_option] == 'all') |
| app/controllers/search_controller.rb (working copy) | ||
|---|---|---|
| 43 | 43 |
|
| 44 | 44 |
if @project |
| 45 | 45 |
# only show what the user is allowed to view |
| 46 |
@object_types = %w(issues news documents changesets wiki_pages messages) |
|
| 46 |
@object_types = %w(issues news documents changesets wiki_pages messages users)
|
|
| 47 | 47 |
@object_types = @object_types.select {|o| User.current.allowed_to?("view_#{o}".to_sym, @project)}
|
| 48 |
|
|
| 48 |
@object_types += %w(users) #this is probably better fixed in User.current.allowed_to |
|
| 49 | 49 |
@scope = @object_types.select {|t| params[t]}
|
| 50 | 50 |
@scope = @object_types if @scope.empty? |
| 51 | 51 |
else |
| 52 |
@object_types = @scope = %w(projects) |
|
| 52 |
@object_types = @scope = %w(projects users)
|
|
| 53 | 53 |
end |
| 54 | 54 |
|
| 55 | 55 |
# extract tokens from the question |
| ... | ... | |
| 94 | 94 |
:limit => limit, |
| 95 | 95 |
:conditions => [ (["(#{Project.visible_by(User.current)}) AND (LOWER(name) like ? OR LOWER(description) like ?)"] * like_tokens.size).join(operator), * (like_tokens * 2).sort]
|
| 96 | 96 |
) if @scope.include? 'projects' |
| 97 |
# if only one project is found, user is redirected to its overview |
|
| 98 |
redirect_to :controller => 'projects', :action => 'show', :id => @results.first and return if @results.size == 1 |
|
| 97 |
@projectCount = @results.size |
|
| 98 |
@results += User.find(:all, |
|
| 99 |
:limit => limit, |
|
| 100 |
:conditions => [ (["(LOWER(firstname) like ? OR LOWER(lastname) like ?)"] * like_tokens.size).join(operator), * (like_tokens * 2).sort] |
|
| 101 |
) if @scope.include? 'users' |
|
| 102 |
@userCount = @results.size - @projectCount |
|
| 103 |
# if only one project/user is found, user is redirected to its overview |
|
| 104 |
redirect_to :controller => 'projects', :action => 'show', :id => @results.first and return if @results.size == 1 and @projectCount == 1 |
|
| 105 |
redirect_to :controller => 'users', :action => 'show', :id => @results.first and return if @results.size == 1 and @userCount == 1 |
|
| 99 | 106 |
end |
| 100 | 107 |
else |
| 101 | 108 |
@question = "" |
| app/controllers/users_controller.rb (working copy) | ||
|---|---|---|
| 48 | 48 | |
| 49 | 49 |
render :action => "list", :layout => false if request.xhr? |
| 50 | 50 |
end |
| 51 |
|
|
| 52 |
def show |
|
| 53 |
@user = User.find(params[:id]) |
|
| 54 |
@custom_values = @user.custom_values.find(:all, :include => :custom_field) |
|
| 55 |
|
|
| 56 |
# show only public projects and private projects that the logged in user is also a member of |
|
| 57 |
@memberships = @user.memberships.select do |membership| |
|
| 58 |
membership.project.is_public? || (User.current.role_for_project(membership.project)) |
|
| 59 |
end |
|
| 60 |
rescue ActiveRecord::RecordNotFound |
|
| 61 |
render_404 |
|
| 62 |
end |
|
| 51 | 63 | |
| 52 | 64 |
def add |
| 53 | 65 |
if request.get? |
| app/models/user.rb (working copy) | ||
|---|---|---|
| 32 | 32 |
has_one :rss_token, :dependent => :destroy, :class_name => 'Token', :conditions => "action='feeds'" |
| 33 | 33 |
belongs_to :auth_source |
| 34 | 34 |
|
| 35 |
acts_as_searchable :columns => ['firstname', 'lastname'], |
|
| 36 |
:include => :memberships, |
|
| 37 |
:include => :projects, |
|
| 38 |
:project_key => "#{Project.table_name}.id"
|
|
| 39 |
acts_as_event :title => Proc.new {|o| "#{l(:field_name)}: #{o.firstname} #{o.lastname}"},
|
|
| 40 |
:description => :mail, |
|
| 41 |
:url => Proc.new {|o| {:controller => 'users', :action => 'show', :id => o.id}}
|
|
| 42 |
|
|
| 35 | 43 |
attr_accessor :password, :password_confirmation |
| 36 | 44 |
attr_accessor :last_before_login_on |
| 37 | 45 |
# Prevents unauthorized assignments |
| app/views/my/account.rhtml (working copy) | ||
|---|---|---|
| 20 | 20 |
<p><%= pref_fields.select :time_zone, TimeZone.all.collect {|z| [ z.to_s, z.name ]}, :include_blank => true %></p>
|
| 21 | 21 |
<p><%= pref_fields.check_box :hide_mail %></p> |
| 22 | 22 |
<% end %> |
| 23 | ||
| 24 |
<% for @custom_value in @custom_values %> |
|
| 25 |
<p><%= custom_field_tag_with_label @custom_value %></p> |
|
| 26 |
<% end if @custom_values%> |
|
| 23 | 27 |
</div> |
| 24 | 28 | |
| 25 | 29 |
<%= submit_tag l(:button_save) %> |
| app/views/users/show.rhtml (revision 0) | ||
|---|---|---|
| 1 |
<h2><%=h @user.name %></h2> |
|
| 2 |
|
|
| 3 |
<p> |
|
| 4 |
<%=l(:field_name)%>: <%= @user.firstname %> <%= @user.lastname%><br/> |
|
| 5 |
<%=l(:field_mail)%>: <%= mail_to @user.mail unless @user.pref.hide_mail %><br/> |
|
| 6 |
<%=l(:label_registered_on)%>: <%= format_date(@user.created_on) %><br/> |
|
| 7 |
</p> |
|
| 8 |
|
|
| 9 |
<p> |
|
| 10 |
<% for custom_value in @custom_values %> |
|
| 11 |
<% if !custom_value.value.empty? %> |
|
| 12 |
<%= custom_value.custom_field.name%>: <%=h show_value(custom_value) %><br/> |
|
| 13 |
<% end %> |
|
| 14 |
<% end %> |
|
| 15 |
</p> |
|
| 16 |
|
|