summaryrefslogtreecommitdiff
path: root/lib/banzai/filter/issue_reference_filter.rb
blob: 59c5e89c5466e5f054e58e0f00124d0cfb435235 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
module Banzai
  module Filter
    # HTML filter that replaces issue references with links. References to
    # issues that do not exist are ignored.
    #
    # This filter supports cross-project references.
    class IssueReferenceFilter < AbstractReferenceFilter
      def self.object_class
        Issue
      end

      def self.user_can_see_reference?(user, node, context)
        # It is not possible to check access rights for external issue trackers
        return true if context[:project].try(:external_issue_tracker)
 
        issue = Issue.find(node.attr('data-issue')) rescue nil
        Ability.abilities.allowed?(user, :read_issue, issue)
      end

      def find_object(project, id)
        project.get_issue(id)
      end

      def url_for_object(issue, project)
        IssuesHelper.url_for_issue(issue.iid, project, only_path: context[:only_path])
      end
    end
  end
end