Add author filter for issues & merge requests pages
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
This commit is contained in:
parent
ed2eaf55c1
commit
e0f30c605b
|
@ -29,4 +29,31 @@ class Projects::ApplicationController < ApplicationController
|
||||||
redirect_to project_tree_path(@project, @ref), notice: "This action is not allowed unless you are on top of a branch"
|
redirect_to project_tree_path(@project, @ref), notice: "This action is not allowed unless you are on top of a branch"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def set_filter_variables(collection)
|
||||||
|
params[:sort] ||= 'newest'
|
||||||
|
params[:scope] = 'all' if params[:scope].blank?
|
||||||
|
params[:state] = 'opened' if params[:state].blank?
|
||||||
|
|
||||||
|
@sort = params[:sort].humanize
|
||||||
|
|
||||||
|
assignee_id = params[:assignee_id]
|
||||||
|
author_id = params[:author_id]
|
||||||
|
milestone_id = params[:milestone_id]
|
||||||
|
|
||||||
|
if assignee_id.present? && !assignee_id.to_i.zero?
|
||||||
|
@assignee = @project.team.find(assignee_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
if author_id.present? && !author_id.to_i.zero?
|
||||||
|
@author = @project.team.find(assignee_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
if milestone_id.present? && !milestone_id.to_i.zero?
|
||||||
|
@milestone = @project.milestones.find(milestone_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
@assignees = User.where(id: collection.pluck(:assignee_id))
|
||||||
|
@authors = User.where(id: collection.pluck(:author_id))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -18,18 +18,12 @@ class Projects::IssuesController < Projects::ApplicationController
|
||||||
|
|
||||||
def index
|
def index
|
||||||
terms = params['issue_search']
|
terms = params['issue_search']
|
||||||
|
set_filter_variables(@project.issues)
|
||||||
|
|
||||||
@issues = issues_filtered
|
@issues = IssuesFinder.new.execute(current_user, params.merge(project_id: @project.id))
|
||||||
@issues = @issues.full_search(terms) if terms.present?
|
@issues = @issues.full_search(terms) if terms.present?
|
||||||
@issues = @issues.page(params[:page]).per(20)
|
@issues = @issues.page(params[:page]).per(20)
|
||||||
|
|
||||||
assignee_id, milestone_id = params[:assignee_id], params[:milestone_id]
|
|
||||||
@assignee = @project.team.find(assignee_id) if assignee_id.present? && !assignee_id.to_i.zero?
|
|
||||||
@milestone = @project.milestones.find(milestone_id) if milestone_id.present? && !milestone_id.to_i.zero?
|
|
||||||
sort_param = params[:sort] || 'newest'
|
|
||||||
@sort = sort_param.humanize unless sort_param.empty?
|
|
||||||
@assignees = User.where(id: @project.issues.pluck(:assignee_id)).active
|
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html
|
format.html
|
||||||
format.atom { render layout: false }
|
format.atom { render layout: false }
|
||||||
|
@ -127,12 +121,6 @@ class Projects::IssuesController < Projects::ApplicationController
|
||||||
return render_404 unless @project.issues_enabled
|
return render_404 unless @project.issues_enabled
|
||||||
end
|
end
|
||||||
|
|
||||||
def issues_filtered
|
|
||||||
params[:scope] = 'all' if params[:scope].blank?
|
|
||||||
params[:state] = 'opened' if params[:state].blank?
|
|
||||||
@issues = IssuesFinder.new.execute(current_user, params.merge(project_id: @project.id))
|
|
||||||
end
|
|
||||||
|
|
||||||
# Since iids are implemented only in 6.1
|
# Since iids are implemented only in 6.1
|
||||||
# user may navigate to issue page using old global ids.
|
# user may navigate to issue page using old global ids.
|
||||||
#
|
#
|
||||||
|
|
|
@ -17,18 +17,10 @@ class Projects::MergeRequestsController < Projects::ApplicationController
|
||||||
before_filter :authorize_modify_merge_request!, only: [:close, :edit, :update, :sort]
|
before_filter :authorize_modify_merge_request!, only: [:close, :edit, :update, :sort]
|
||||||
|
|
||||||
def index
|
def index
|
||||||
params[:sort] ||= 'newest'
|
set_filter_variables(@project.merge_requests)
|
||||||
params[:scope] = 'all' if params[:scope].blank?
|
|
||||||
params[:state] = 'opened' if params[:state].blank?
|
|
||||||
|
|
||||||
@merge_requests = MergeRequestsFinder.new.execute(current_user, params.merge(project_id: @project.id))
|
@merge_requests = MergeRequestsFinder.new.execute(current_user, params.merge(project_id: @project.id))
|
||||||
@merge_requests = @merge_requests.page(params[:page]).per(20)
|
@merge_requests = @merge_requests.page(params[:page]).per(20)
|
||||||
|
|
||||||
@sort = params[:sort].humanize
|
|
||||||
assignee_id, milestone_id = params[:assignee_id], params[:milestone_id]
|
|
||||||
@assignee = @project.team.find(assignee_id) if assignee_id.present? && !assignee_id.to_i.zero?
|
|
||||||
@milestone = @project.milestones.find(milestone_id) if milestone_id.present? && !milestone_id.to_i.zero?
|
|
||||||
@assignees = User.where(id: @project.merge_requests.pluck(:assignee_id))
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
|
|
|
@ -33,6 +33,7 @@ class IssuableFinder
|
||||||
items = by_search(items)
|
items = by_search(items)
|
||||||
items = by_milestone(items)
|
items = by_milestone(items)
|
||||||
items = by_assignee(items)
|
items = by_assignee(items)
|
||||||
|
items = by_author(items)
|
||||||
items = by_label(items)
|
items = by_label(items)
|
||||||
items = sort(items)
|
items = sort(items)
|
||||||
end
|
end
|
||||||
|
@ -125,6 +126,14 @@ class IssuableFinder
|
||||||
items
|
items
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def by_author(items)
|
||||||
|
if params[:author_id].present?
|
||||||
|
items = items.where(author_id: (params[:author_id] == '0' ? nil : params[:author_id]))
|
||||||
|
end
|
||||||
|
|
||||||
|
items
|
||||||
|
end
|
||||||
|
|
||||||
def by_label(items)
|
def by_label(items)
|
||||||
if params[:label_name].present?
|
if params[:label_name].present?
|
||||||
label_names = params[:label_name].split(",")
|
label_names = params[:label_name].split(",")
|
||||||
|
|
|
@ -22,6 +22,29 @@
|
||||||
= image_tag avatar_icon(user.email), class: "avatar s16", alt: ''
|
= image_tag avatar_icon(user.email), class: "avatar s16", alt: ''
|
||||||
= user.name
|
= user.name
|
||||||
|
|
||||||
|
.dropdown.inline.prepend-left-10
|
||||||
|
%a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"}
|
||||||
|
%i.fa.fa-user
|
||||||
|
%span.light author:
|
||||||
|
- if @author.present?
|
||||||
|
%strong= @author.name
|
||||||
|
- elsif params[:author_id] == "0"
|
||||||
|
Unassigned
|
||||||
|
- else
|
||||||
|
Any
|
||||||
|
%b.caret
|
||||||
|
%ul.dropdown-menu
|
||||||
|
%li
|
||||||
|
= link_to project_filter_path(author_id: nil) do
|
||||||
|
Any
|
||||||
|
= link_to project_filter_path(author_id: 0) do
|
||||||
|
Unassigned
|
||||||
|
- @authors.sort_by(&:name).each do |user|
|
||||||
|
%li
|
||||||
|
= link_to project_filter_path(author_id: user.id) do
|
||||||
|
= image_tag avatar_icon(user.email), class: "avatar s16", alt: ''
|
||||||
|
= user.name
|
||||||
|
|
||||||
.dropdown.inline.prepend-left-10
|
.dropdown.inline.prepend-left-10
|
||||||
%a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"}
|
%a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"}
|
||||||
%i.fa.fa-clock-o
|
%i.fa.fa-clock-o
|
||||||
|
|
Loading…
Reference in New Issue