Feature #6049 ยป redmine_search_archived_aug8.patch
| 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 %>  |