Project

General

Profile

Feature #6049 ยป redmine_search_archived_aug8.patch

Alex Dergachev, 2012-08-08 17:30

View differences:

app/controllers/application_controller.rb
39 39
  end
40 40

  
41 41
  before_filter :user_setup, :check_if_login_required, :set_localization
42
  before_filter :check_for_search_archived
42 43
  filter_parameter_logging :password
43 44
  protect_from_forgery
44 45

  
......
60 61
    User.current = find_current_user
61 62
  end
62 63

  
64
  def check_for_search_archived
65
    if params[:search_archived]
66
      flash.now[:error] = "Search Archived: suspending access checks for admin user."
67
      $search_archived = params[:search_archived].present?
68
    else
69
      $search_archived = nil
70
    end
71
  end
72

  
63 73
  # Returns the current user or nil if no user is logged in
64 74
  # and starts a session if needed
65 75
  def find_current_user
app/models/project.rb
146 146
  # * :member => limit the condition to the user projects
147 147
  def self.allowed_to_condition(user, permission, options={})
148 148
    base_statement = "#{Project.table_name}.status=#{Project::STATUS_ACTIVE}"
149

  
150
    if $search_archived 
151
      #allow admins access to search_access checkbox
152
      if user.admin?
153
        base_statement = "#{Project.table_name}.status IN (#{Project::STATUS_ARCHIVED},#{Project::STATUS_ACTIVE})"
154
      end
155
    end
156

  
149 157
    if perm = Redmine::AccessControl.permission(permission)
150 158
      unless perm.project_module.nil?
151 159
        # If the permission belongs to a project module, make sure the module is enabled
app/models/user.rb
398 398
  # * nil with options[:global] set : check if user has at least one role allowed for this action, 
399 399
  #   or falls back to Non Member / Anonymous permissions depending if the user is logged
400 400
  def allowed_to?(action, context, options={}, &block)
401
    
402
    # allow admins full access in case of search_archived
403
    if($search_archived)
404
      return true if admin?
405
    end
406

  
401 407
    if context && context.is_a?(Project)
402 408
      # No action allowed on archived projects
403 409
      return false unless context.active?
app/views/search/index.rhtml
9 9
<label><%= check_box_tag 'all_words', 1, @all_words %> <%= l(:label_all_words) %></label>
10 10
<%= hidden_field_tag 'titles_only', '', :id => nil %>
11 11
<label><%= check_box_tag 'titles_only', 1, @titles_only %> <%= l(:label_search_titles_only) %></label>
12
<% # Injects search_archived checkbox, for admins only %>
13
<% if User.current.admin? %>
14
  <label><%= check_box_tag 'search_archived', 1, $search_archived %> Search archived</label>
15
<% end %>
12 16
</p>
13 17
<p>
14 18
<% @object_types.each do |t| %>
......
28 32
    <h3><%= l(:label_result_plural) %> (<%= @results_by_type.values.sum %>)</h3>
29 33
    <dl id="search-results">
30 34
      <% @results.each do |e| %>
31
        <dt class="<%= e.event_type %>"><%= content_tag('span', h(e.project), :class => 'project') unless @project == e.project %> <%= link_to highlight_tokens(truncate(e.event_title, :length => 255), @tokens), e.event_url %></dt>
35
        <% # appends ?search_archived=1 query arg to link url if appropriate %> 
36
        <% search_archived_item_url = !$search_archived ? e.event_url : e.event_url.merge( {"search_archived" => "1" })  %>
37
        <dt class="<%= e.event_type %>"><%= content_tag('span', h(e.project), :class => 'project') unless @project == e.project %> <%= link_to highlight_tokens(truncate(e.event_title, :length => 255), @tokens), search_archived_item_url %></dt>
32 38
        <dd><span class="description"><%= highlight_tokens(e.event_description, @tokens) %></span>
33 39
        <span class="author"><%= format_time(e.event_datetime) %></span></dd>
34 40
      <% end %>
    (1-1/1)