projects_helper.rb 4.89 KB
Newer Older
randx's avatar
randx committed
1
module ProjectsHelper
2 3
  def remove_from_project_team_message(project, user)
    "You are going to remove #{user.name} from #{project.name} project team. Are you sure?"
4
  end
5 6

  def link_to_project project
7
    link_to project do
8
      title = content_tag(:span, project.name, class: 'projet-name')
9 10

      if project.namespace
11
        namespace = content_tag(:span, "#{project.namespace.human_name} / ", class: 'namespace-name')
12 13 14 15 16
        title = namespace + title
      end

      title
    end
17
  end
18

19
  def link_to_member(project, author, opts = {})
20
    default_opts = { avatar: true, name: true, size: 16 }
21 22
    opts = default_opts.merge(opts)

23 24
    return "(deleted)" unless author

25 26
    author_html =  ""

27
    # Build avatar image tag
28
    author_html << image_tag(avatar_icon(author.try(:email), opts[:size]), width: opts[:size], class: "avatar avatar-inline #{"s#{opts[:size]}" if opts[:size]}", alt:'') if opts[:avatar]
29

30
    # Build name span tag
31
    author_html << content_tag(:span, sanitize(author.name), class: 'author') if opts[:name]
32

33
    author_html = author_html.html_safe
34

35 36 37 38 39
    if opts[:name]
      link_to(author_html, user_path(author), class: "author_link").html_safe
    else
      link_to(author_html, user_path(author), class: "author_link has_tooltip", data: { :'original-title' => sanitize(author.name) } ).html_safe
    end
40
  end
41 42 43

  def project_title project
    if project.group
44
      content_tag :span do
45
        link_to(simple_sanitize(project.group.name), group_path(project.group)) + " / " + project.name
46
      end
47
    else
48 49 50 51
      owner = project.namespace.owner
      content_tag :span do
        link_to(simple_sanitize(owner.name), user_path(owner)) + " / " + project.name
      end
52 53
    end
  end
54 55 56 57

  def remove_project_message(project)
    "You are going to remove #{project.name_with_namespace}.\n Removed project CANNOT be restored!\n Are you ABSOLUTELY sure?"
  end
58 59 60 61 62 63 64 65 66

  def project_nav_tabs
    @nav_tabs ||= get_project_nav_tabs(@project, current_user)
  end

  def project_nav_tab?(name)
    project_nav_tabs.include? name
  end

67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
  def project_filter_path(options={})
    exist_opts = {
      state: params[:state],
      scope: params[:scope],
      label_name: params[:label_name],
      milestone_id: params[:milestone_id],
    }

    options = exist_opts.merge(options)

    path = request.path
    path << "?#{options.to_param}"
    path
  end

  def project_active_milestones
83
    @project.milestones.active.order("due_date, title ASC").all
84 85
  end

86
  def project_issues_trackers(current_tracker = nil)
87 88 89 90 91 92 93 94
    values = Project.issues_tracker.values.map do |tracker_key|
      if tracker_key.to_sym == :gitlab
        ['GitLab', tracker_key]
      else
        [Gitlab.config.issues_tracker[tracker_key]['title'] || tracker_key, tracker_key]
      end
    end

95
    options_for_select(values, current_tracker)
96 97
  end

98 99 100 101 102
  private

  def get_project_nav_tabs(project, current_user)
    nav_tabs = [:home]

103
    if !project.empty_repo? && can?(current_user, :download_code, project)
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
      nav_tabs << [:files, :commits, :network, :graphs]
    end

    if project.repo_exists? && project.merge_requests_enabled
      nav_tabs << :merge_requests
    end

    if can?(current_user, :admin_project, project)
      nav_tabs << :settings
    end

    [:issues, :wiki, :wall, :snippets].each do |feature|
      nav_tabs << feature if project.send :"#{feature}_enabled"
    end

    nav_tabs.flatten
  end
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136

  def git_user_name
    if current_user
      current_user.name
    else
      "Your name"
    end
  end

  def git_user_email
    if current_user
      current_user.email
    else
      "your@email.com"
    end
  end
137 138 139 140 141 142 143 144 145

  def repository_size
    "#{@project.repository.size} MB"
  rescue
    # In order to prevent 500 error
    # when application cannot allocate memory
    # to calculate repo size - just show 'Unknown'
    'unknown'
  end
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179

  def project_head_title
    title = @project.name_with_namespace

    title = if current_controller?(:tree)
              "#{@project.path}\/#{@path} at #{@ref} - " + title
            elsif current_controller?(:issues)
              if current_action?(:show)
                "Issue ##{@issue.iid} - " + title
              else
                "Issues - " + title
              end
            elsif current_controller?(:blob)
              "#{@project.path}\/#{@blob.path} at #{@ref} - " + title
            elsif current_controller?(:commits)
              "Commits - " + title
            elsif current_controller?(:merge_requests)
              if current_action?(:show)
                "Merge request ##{@merge_request.iid} - " + title
              else
                "Merge requests - " + title
              end
            elsif current_controller?(:wikis)
              "Wiki - " + title
            elsif current_controller?(:network)
              "Network graph - " + title
            elsif current_controller?(:graphs)
              "Graphs - " + title
            else
              title
            end

    title
  end
randx's avatar
randx committed
180
end