application_helper.rb 5.89 KB
Newer Older
gitlabhq's avatar
gitlabhq committed
1
require 'digest/md5'
Sergey Linnik's avatar
Sergey Linnik committed
2
require 'uri'
Robert Speicher's avatar
Robert Speicher committed
3

gitlabhq's avatar
gitlabhq committed
4
module ApplicationHelper
5

6 7
  # Check if a particular controller is the current one
  #
8 9
  # args - One or more controller names to check
  #
10 11 12
  # Examples
  #
  #   # On TreeController
13 14 15 16 17
  #   current_controller?(:tree)           # => true
  #   current_controller?(:commits)        # => false
  #   current_controller?(:commits, :tree) # => true
  def current_controller?(*args)
    args.any? { |v| v.to_s.downcase == controller.controller_name }
18 19
  end

Robert Speicher's avatar
Robert Speicher committed
20 21 22 23 24 25 26 27 28 29 30 31 32 33
  # Check if a partcular action is the current one
  #
  # args - One or more action names to check
  #
  # Examples
  #
  #   # On Projects#new
  #   current_action?(:new)           # => true
  #   current_action?(:create)        # => false
  #   current_action?(:new, :create)  # => true
  def current_action?(*args)
    args.any? { |v| v.to_s.downcase == action_name }
  end

34 35 36
  def gravatar_icon(user_email = '', size = nil)
    size = 40 if size.nil? || size <= 0

37
    if !Gitlab.config.gravatar.enabled || user_email.blank?
38 39
      'no_avatar.png'
    else
40
      gravatar_url = request.ssl? ? Gitlab.config.gravatar.ssl_url : Gitlab.config.gravatar.plain_url
41
      user_email.strip!
Cyril's avatar
Cyril committed
42
      sprintf gravatar_url, hash: Digest::MD5.hexdigest(user_email.downcase), size: size
43
    end
gitlabhq's avatar
gitlabhq committed
44 45 46
  end

  def last_commit(project)
Nihad Abbasov's avatar
Nihad Abbasov committed
47
    if project.repo_exists?
48
      time_ago_in_words(project.repository.commit.committed_date) + " ago"
Nihad Abbasov's avatar
Nihad Abbasov committed
49
    else
gitlabhq's avatar
gitlabhq committed
50 51
      "Never"
    end
52
  rescue
gitlabhq's avatar
gitlabhq committed
53
    "Never"
gitlabhq's avatar
gitlabhq committed
54 55
  end

gitlabhq's avatar
gitlabhq committed
56
  def grouped_options_refs(destination = :tree)
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
57 58
    repository = @project.repository

gitlabhq's avatar
gitlabhq committed
59
    options = [
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
60 61
      ["Branch", repository.branch_names ],
      [ "Tag", repository.tag_names ]
gitlabhq's avatar
gitlabhq committed
62 63
    ]

Andrey Vakarev's avatar
Andrey Vakarev committed
64
    # If reference is commit id -
65
    # we should add it to branch/tag selectbox
66
    if(@ref && !options.flatten.include?(@ref) &&
67 68 69 70
       @ref =~ /^[0-9a-zA-Z]{6,52}$/)
      options << ["Commit", [@ref]]
    end

Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
71
    grouped_options_for_select(options, @ref || @project.default_branch)
gitlabhq's avatar
gitlabhq committed
72 73
  end

gitlabhq's avatar
gitlabhq committed
74
  def search_autocomplete_source
75
    projects = current_user.authorized_projects.map { |p| { label: "project: #{simple_sanitize(p.name_with_namespace)}", url: project_path(p) } }
76 77
    groups = current_user.authorized_groups.map { |group| { label: "group: #{simple_sanitize(group.name)}", url: group_path(group) } }
    teams = current_user.authorized_teams.map { |team| { label: "team: #{simple_sanitize(team.name)}", url: team_path(team) } }
78

gitlabhq's avatar
gitlabhq committed
79
    default_nav = [
80 81 82 83
      { label: "My Profile", url: profile_path },
      { label: "My SSH Keys", url: keys_path },
      { label: "My Dashboard", url: root_path },
      { label: "Admin Section", url: admin_root_path },
gitlabhq's avatar
gitlabhq committed
84 85
    ]

86
    help_nav = [
87 88 89 90 91 92 93 94 95
      { label: "help: API Help", url: help_api_path },
      { label: "help: Markdown Help", url: help_markdown_path },
      { label: "help: Permissions Help", url: help_permissions_path },
      { label: "help: Public Access Help", url: help_public_access_path },
      { label: "help: Rake Tasks Help", url: help_raketasks_path },
      { label: "help: SSH Keys Help", url: help_ssh_path },
      { label: "help: System Hooks Help", url: help_system_hooks_path },
      { label: "help: Web Hooks Help", url: help_web_hooks_path },
      { label: "help: Workflow Help", url: help_workflow_path },
96
    ]
gitlabhq's avatar
gitlabhq committed
97

98
    project_nav = []
99
    if @project && @project.repository && @project.repository.root_ref
gitlabhq's avatar
gitlabhq committed
100
      project_nav = [
101 102 103 104 105 106 107 108 109
        { label: "#{simple_sanitize(@project.name_with_namespace)} - Issues",   url: project_issues_path(@project) },
        { label: "#{simple_sanitize(@project.name_with_namespace)} - Commits",  url: project_commits_path(@project, @ref || @project.repository.root_ref) },
        { label: "#{simple_sanitize(@project.name_with_namespace)} - Merge Requests", url: project_merge_requests_path(@project) },
        { label: "#{simple_sanitize(@project.name_with_namespace)} - Milestones", url: project_milestones_path(@project) },
        { label: "#{simple_sanitize(@project.name_with_namespace)} - Snippets", url: project_snippets_path(@project) },
        { label: "#{simple_sanitize(@project.name_with_namespace)} - Team",     url: project_team_index_path(@project) },
        { label: "#{simple_sanitize(@project.name_with_namespace)} - Tree",     url: project_tree_path(@project, @ref || @project.repository.root_ref) },
        { label: "#{simple_sanitize(@project.name_with_namespace)} - Wall",     url: wall_project_path(@project) },
        { label: "#{simple_sanitize(@project.name_with_namespace)} - Wiki",     url: project_wikis_path(@project) },
gitlabhq's avatar
gitlabhq committed
110 111 112
      ]
    end

113
    [groups, projects, default_nav, project_nav, help_nav].flatten.to_json
gitlabhq's avatar
gitlabhq committed
114 115
  end

116 117 118
  def emoji_autocomplete_source
    # should be an array of strings
    # so to_s can be called, because it is sufficient and to_json is too slow
Riyad Preukschas's avatar
Riyad Preukschas committed
119
    Emoji.names.to_s
120 121
  end

vsizov's avatar
vsizov committed
122 123 124
  def ldap_enable?
    Devise.omniauth_providers.include?(:ldap)
  end
125

126
  def app_theme
127
    Gitlab::Theme.css_class_by_id(current_user.try(:theme_id))
128
  end
randx's avatar
randx committed
129

130 131 132 133
  def user_color_scheme_class
    current_user.dark_scheme ? :black : :white
  end

randx's avatar
randx committed
134
  def show_last_push_widget?(event)
135
    event &&
randx's avatar
randx committed
136 137
      event.last_push_to_non_root? &&
      !event.rm_ref? &&
138
      event.project &&
139
      event.project.repository &&
randx's avatar
randx committed
140
      event.project.merge_requests_enabled
randx's avatar
randx committed
141
  end
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
142

143 144 145
  def hexdigest(string)
    Digest::SHA1.hexdigest string
  end
146 147 148 149 150 151 152 153 154

  def project_last_activity project
    activity = project.last_activity
    if activity && activity.created_at
      time_ago_in_words(activity.created_at) + " ago"
    else
      "Never"
    end
  end
155

Florian Unglaub's avatar
Florian Unglaub committed
156
  def authbutton(provider, size = 64)
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
157 158 159
    file_name = "#{provider.to_s.split('_').first}_#{size}.png"
    image_tag("authbuttons/#{file_name}",
              alt: "Sign in with #{provider.to_s.titleize}")
Florian Unglaub's avatar
Florian Unglaub committed
160
  end
161

162 163 164 165
  def simple_sanitize str
    sanitize(str, tags: %w(a span))
  end

166
  def image_url(source)
167 168
    # prevent relative_root_path being added twice (it's part of root_url and path_to_image)
    root_url.sub(/#{root_path}$/, path_to_image(source))
169
  end
170

171
  alias_method :url_to_image, :image_url
gitlabhq's avatar
gitlabhq committed
172
end