diff options
| author | Douwe Maan <douwe@selenight.nl> | 2016-03-20 14:57:25 +0100 |
|---|---|---|
| committer | Douwe Maan <douwe@selenight.nl> | 2016-03-20 14:57:25 +0100 |
| commit | 2eb19ea3ea36916bbea72a8ccab3e6d15f602ac9 (patch) | |
| tree | 55c08bbb50e92ce76028f68a5267401a76bc4b02 /app/models/issue.rb | |
| parent | 8b830b8c3b32774e8ccf562b8bc9dbce3ecf3073 (diff) | |
| parent | 01fe50a72513a88f2168c8c0a649661b1382a42b (diff) | |
| download | gitlab-ce-2eb19ea3ea36916bbea72a8ccab3e6d15f602ac9.tar.gz | |
Merge branch 'master' into issue_12658
Diffstat (limited to 'app/models/issue.rb')
| -rw-r--r-- | app/models/issue.rb | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/app/models/issue.rb b/app/models/issue.rb index 5f58c0508fd..5347d4fa1be 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -58,6 +58,13 @@ class Issue < ActiveRecord::Base attributes end + def self.visible_to_user(user) + return where(confidential: false) if user.blank? + return all if user.admin? + + where('issues.confidential = false OR (issues.confidential = true AND (issues.author_id = :user_id OR issues.assignee_id = :user_id OR issues.project_id IN(:project_ids)))', user_id: user.id, project_ids: user.authorized_projects.select(:id)) + end + def self.reference_prefix '#' end @@ -87,11 +94,20 @@ class Issue < ActiveRecord::Base end def referenced_merge_requests(current_user = nil) - Gitlab::ReferenceExtractor.lazily do - [self, *notes].flat_map do |note| - note.all_references(current_user).merge_requests - end - end.sort_by(&:iid) + @referenced_merge_requests ||= {} + @referenced_merge_requests[current_user] ||= begin + Gitlab::ReferenceExtractor.lazily do + [self, *notes].flat_map do |note| + note.all_references(current_user).merge_requests + end + end.sort_by(&:iid).uniq + end + end + + def related_branches + return [] if self.project.empty_repo? + + self.project.repository.branch_names.select { |branch| branch.end_with?("-#{iid}") } end # Reset issue events cache @@ -120,4 +136,15 @@ class Issue < ActiveRecord::Base note.all_references(current_user).merge_requests end.uniq.select { |mr| mr.open? && mr.closes_issue?(self) } end + + def to_branch_name + "#{title.parameterize}-#{iid}" + end + + def can_be_worked_on?(current_user) + !self.closed? && + !self.project.forked? && + self.related_branches.empty? && + self.closed_by_merge_requests(current_user).empty? + end end |
