application_helper.rb 4.67 KB
Newer Older
gitlabhq's avatar
gitlabhq committed
1
require 'digest/md5'
Robert Speicher's avatar
Robert Speicher committed
2

gitlabhq's avatar
gitlabhq committed
3
module ApplicationHelper
4

5 6
  # Check if a particular controller is the current one
  #
7 8
  # args - One or more controller names to check
  #
9 10 11
  # Examples
  #
  #   # On TreeController
12 13 14 15 16
  #   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 }
17 18
  end

Robert Speicher's avatar
Robert Speicher committed
19 20 21 22 23 24 25 26 27 28 29 30 31 32
  # 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

33
  def gravatar_icon(user_email = '', size = 40)
34 35 36 37 38 39 40
    if Gitlab.config.disable_gravatar? || user_email.blank?
      'no_avatar.png'
    else
      gravatar_prefix = request.ssl? ? "https://secure" : "http://www"
      user_email.strip!
      "#{gravatar_prefix}.gravatar.com/avatar/#{Digest::MD5.hexdigest(user_email.downcase)}?s=#{size}&d=identicon"
    end
gitlabhq's avatar
gitlabhq committed
41 42
  end

43 44 45 46 47
  def request_protocol
    request.ssl? ? "https" : "http"
  end

  def web_app_url
48
    "#{request_protocol}://#{Gitlab.config.web_host}/"
49 50
  end

gitlabhq's avatar
gitlabhq committed
51
  def last_commit(project)
Nihad Abbasov's avatar
Nihad Abbasov committed
52
    if project.repo_exists?
gitlabhq's avatar
gitlabhq committed
53
      time_ago_in_words(project.commit.committed_date) + " ago"
Nihad Abbasov's avatar
Nihad Abbasov committed
54
    else
gitlabhq's avatar
gitlabhq committed
55 56
      "Never"
    end
57
  rescue
gitlabhq's avatar
gitlabhq committed
58
    "Never"
gitlabhq's avatar
gitlabhq committed
59 60
  end

gitlabhq's avatar
gitlabhq committed
61
  def grouped_options_refs(destination = :tree)
gitlabhq's avatar
gitlabhq committed
62
    options = [
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
63 64
      ["Branch", @project.branch_names ],
      [ "Tag", @project.tag_names ]
gitlabhq's avatar
gitlabhq committed
65 66
    ]

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

Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
74
    grouped_options_for_select(options, @ref || @project.default_branch)
gitlabhq's avatar
gitlabhq committed
75 76
  end

gitlabhq's avatar
gitlabhq committed
77
  def search_autocomplete_source
78
    projects = current_user.projects.map{ |p| { label: p.name, url: project_path(p) } }
79

gitlabhq's avatar
gitlabhq committed
80
    default_nav = [
81 82 83 84
      { 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
85 86
    ]

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

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

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

115 116 117
  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
118
    Emoji.names.to_s
119 120
  end

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

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

  def show_last_push_widget?(event)
130
    event &&
randx's avatar
randx committed
131 132
      event.last_push_to_non_root? &&
      !event.rm_ref? &&
133
      event.project &&
randx's avatar
randx committed
134
      event.project.merge_requests_enabled
randx's avatar
randx committed
135
  end
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
136

137 138 139
  def hexdigest(string)
    Digest::SHA1.hexdigest string
  end
140 141 142 143 144 145 146 147 148

  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
149

Florian Unglaub's avatar
Florian Unglaub committed
150
  def authbutton(provider, size = 64)
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
151 152 153
    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
154
  end
gitlabhq's avatar
gitlabhq committed
155
end