issues_controller.rb 2.6 KB
Newer Older
1
class Projects::IssuesController < Projects::ApplicationController
2
  before_filter :module_enabled
D
Dmitriy Zaporozhets 已提交
3
  before_filter :issue, only: [:edit, :update, :show]
R
randx 已提交
4

D
Dmitriy Zaporozhets 已提交
5
  # Allow read any issue
G
gitlabhq 已提交
6
  before_filter :authorize_read_issue!
D
Dmitriy Zaporozhets 已提交
7 8

  # Allow write(create) issue
9
  before_filter :authorize_write_issue!, only: [:new, :create]
D
Dmitriy Zaporozhets 已提交
10 11

  # Allow modify issue
12
  before_filter :authorize_modify_issue!, only: [:edit, :update]
D
Dmitriy Zaporozhets 已提交
13

G
gitlabhq 已提交
14
  respond_to :js, :html
G
gitlabhq 已提交
15 16

  def index
17 18
    terms = params['issue_search']

19
    @issues = issues_filtered
20
    @issues = @issues.where("title LIKE ?", "%#{terms}%") if terms.present?
D
Dmitriy Zaporozhets 已提交
21
    @issues = @issues.page(params[:page]).per(20)
G
gitlabhq 已提交
22

23
    assignee_id, milestone_id = params[:assignee_id], params[:milestone_id]
24
    @assignee = @project.team.find(assignee_id) if assignee_id.present? && !assignee_id.to_i.zero?
25 26
    @milestone = @project.milestones.find(milestone_id) if milestone_id.present? && !milestone_id.to_i.zero?

G
gitlabhq 已提交
27 28 29
    respond_to do |format|
      format.html # index.html.erb
      format.js
30
      format.atom { render layout: false }
G
gitlabhq 已提交
31 32 33 34
    end
  end

  def new
A
Alex Denisov 已提交
35
    @issue = @project.issues.new(params[:issue])
G
gitlabhq 已提交
36 37 38 39 40 41 42 43
    respond_with(@issue)
  end

  def edit
    respond_with(@issue)
  end

  def show
44
    @note = @project.notes.new(noteable: @issue)
R
Riyad Preukschas 已提交
45 46
    @target_type = :issue
    @target_id = @issue.id
G
gitlabhq 已提交
47

N
Nihad Abbasov 已提交
48
    respond_to do |format|
G
gitlabhq 已提交
49
      format.html
50
      format.js
G
gitlabhq 已提交
51
    end
G
gitlabhq 已提交
52 53 54 55 56
  end

  def create
    @issue = @project.issues.new(params[:issue])
    @issue.author = current_user
V
Valery Sizov 已提交
57
    @issue.save
G
gitlabhq 已提交
58

59
    respond_to do |format|
60
      format.html do
61
        if @issue.valid?
62 63 64 65 66
          redirect_to project_issue_path(@project, @issue)
        else
          render :new
        end
      end
67 68
      format.js
    end
G
gitlabhq 已提交
69 70 71
  end

  def update
72
    @issue.update_attributes(params[:issue].merge(author_id_of_changes: current_user.id))
G
gitlabhq 已提交
73 74 75

    respond_to do |format|
      format.js
76
      format.html do
77 78 79 80 81 82
        if @issue.valid?
          redirect_to [@project, @issue]
        else
          render :edit
        end
      end
G
gitlabhq 已提交
83 84 85
    end
  end

R
randx 已提交
86
  def bulk_update
87
    result = Issues::BulkUpdateContext.new(project, current_user, params).execute
88
    redirect_to :back, notice: "#{result[:count]} issues updated"
R
randx 已提交
89 90
  end

N
Nihad Abbasov 已提交
91
  protected
G
gitlabhq 已提交
92 93

  def issue
94
    @issue ||= @project.issues.find_by_iid!(params[:id])
G
gitlabhq 已提交
95
  end
D
Dmitriy Zaporozhets 已提交
96 97

  def authorize_modify_issue!
98
    return render_404 unless can?(current_user, :modify_issue, @issue)
D
Dmitriy Zaporozhets 已提交
99 100 101
  end

  def authorize_admin_issue!
102
    return render_404 unless can?(current_user, :admin_issue, @issue)
D
Dmitriy Zaporozhets 已提交
103
  end
104 105 106 107

  def module_enabled
    return render_404 unless @project.issues_enabled
  end
108 109

  def issues_filtered
110
    @issues = Issues::ListContext.new(project, current_user, params).execute
R
randx 已提交
111
  end
G
gitlabhq 已提交
112
end