2012-09-07 16:57:13 +00:00
module ProjectsHelper
2015-04-10 13:14:14 +00:00
def remove_from_project_team_message ( project , member )
if member . user
" You are going to remove #{ member . user . name } from #{ project . name } project team. Are you sure? "
else
2015-04-14 10:25:16 +00:00
" You are going to revoke the invitation for #{ member . invite_email } to join #{ project . name } project team. Are you sure? "
2015-04-10 13:14:14 +00:00
end
2012-09-10 06:13:45 +00:00
end
2012-10-01 13:39:19 +00:00
2014-09-25 22:07:40 +00:00
def link_to_project ( project )
2015-01-24 18:02:58 +00:00
link_to [ project . namespace . becomes ( Namespace ) , project ] do
2014-04-11 22:00:58 +00:00
title = content_tag ( :span , project . name , class : 'project-name' )
2012-12-09 08:56:15 +00:00
if project . namespace
2013-10-10 07:53:49 +00:00
namespace = content_tag ( :span , " #{ project . namespace . human_name } / " , class : 'namespace-name' )
2012-12-09 08:56:15 +00:00
title = namespace + title
end
title
end
2012-10-01 13:39:19 +00:00
end
2012-10-29 21:45:11 +00:00
2013-01-17 20:35:45 +00:00
def link_to_member ( project , author , opts = { } )
2015-07-30 12:45:54 +00:00
default_opts = { avatar : true , name : true , size : 16 , author_class : 'author' }
2013-01-17 20:35:45 +00:00
opts = default_opts . merge ( opts )
2012-12-13 03:14:05 +00:00
return " (deleted) " unless author
2013-01-17 20:35:45 +00:00
author_html = " "
2012-12-13 03:14:05 +00:00
# Build avatar image tag
2015-10-12 15:22:22 +00:00
author_html << image_tag ( avatar_icon ( author , opts [ :size ] ) , width : opts [ :size ] , class : " avatar avatar-inline #{ " s #{ opts [ :size ] } " if opts [ :size ] } " , alt : '' ) if opts [ :avatar ]
2012-12-13 03:14:05 +00:00
2013-01-11 19:16:37 +00:00
# Build name span tag
2015-07-30 12:45:54 +00:00
author_html << content_tag ( :span , sanitize ( author . name ) , class : opts [ :author_class ] ) if opts [ :name ]
2012-12-13 03:14:05 +00:00
2013-01-17 20:35:45 +00:00
author_html = author_html . html_safe
2012-12-13 03:14:05 +00:00
2013-07-24 21:09:56 +00:00
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
2012-10-29 21:45:11 +00:00
end
2012-12-12 10:02:29 +00:00
2015-09-14 17:46:58 +00:00
def project_title ( project , name = nil , url = nil )
namespace_link =
if project . group
link_to ( simple_sanitize ( project . group . name ) , group_path ( project . group ) )
else
owner = project . namespace . owner
link_to ( simple_sanitize ( owner . name ) , user_path ( owner ) )
2013-11-04 13:18:55 +00:00
end
2015-09-14 17:46:58 +00:00
project_link = link_to ( simple_sanitize ( project . name ) , project_path ( project ) )
full_title = namespace_link + ' / ' + project_link
full_title += ' · ' . html_safe + link_to ( simple_sanitize ( name ) , url ) if name
content_tag :span do
full_title
2012-12-12 10:02:29 +00:00
end
end
2013-05-20 11:22:18 +00:00
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
2013-06-13 19:58:27 +00:00
2014-10-08 10:57:54 +00:00
def transfer_project_message ( project )
" You are going to transfer #{ project . name_with_namespace } to another owner. Are you ABSOLUTELY sure? "
end
2015-10-13 10:24:44 +00:00
def remove_fork_project_message ( project )
" You are going to remove the fork relationship to the source project from #{ @project . forked_from_project . namespace . try ( :name ) } . Are you ABSOLUTELY sure? "
end
2013-06-13 19:58:27 +00:00
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
2013-08-10 17:25:53 +00:00
def project_active_milestones
2013-12-10 10:08:40 +00:00
@project . milestones . active . order ( " due_date, title ASC " )
2013-08-10 17:25:53 +00:00
end
2015-04-03 10:22:44 +00:00
def project_for_deploy_key ( deploy_key )
if deploy_key . projects . include? ( @project )
@project
else
deploy_key . projects . find { | project | can? ( current_user , :read_project , project ) }
end
end
2015-07-06 12:38:43 +00:00
def can_change_visibility_level? ( project , current_user )
return false unless can? ( current_user , :change_visibility_level , project )
if project . forked?
project . forked_from_project . visibility_level > Gitlab :: VisibilityLevel :: PRIVATE
else
true
end
end
2013-06-13 19:58:27 +00:00
private
def get_project_nav_tabs ( project , current_user )
nav_tabs = [ :home ]
2013-06-23 18:39:46 +00:00
if ! project . empty_repo? && can? ( current_user , :download_code , project )
2013-06-13 19:58:27 +00:00
nav_tabs << [ :files , :commits , :network , :graphs ]
end
2015-05-25 14:42:41 +00:00
if project . repo_exists? && can? ( current_user , :read_merge_request , project )
2013-06-13 19:58:27 +00:00
nav_tabs << :merge_requests
end
2015-10-14 10:15:03 +00:00
if can? ( current_user , :read_build , project )
nav_tabs << :builds
end
2013-06-13 19:58:27 +00:00
if can? ( current_user , :admin_project , project )
nav_tabs << :settings
end
2015-05-25 14:42:41 +00:00
if can? ( current_user , :read_issue , project )
nav_tabs << :issues
2013-06-13 19:58:27 +00:00
end
2015-05-25 14:42:41 +00:00
if can? ( current_user , :read_wiki , project )
nav_tabs << :wiki
end
if can? ( current_user , :read_project_snippet , project )
nav_tabs << :snippets
end
2015-07-19 18:58:59 +00:00
if can? ( current_user , :read_label , project )
nav_tabs << :labels
end
2015-05-25 14:42:41 +00:00
if can? ( current_user , :read_milestone , project )
2015-07-19 18:58:59 +00:00
nav_tabs << :milestones
2015-03-23 15:48:50 +00:00
end
2013-06-13 19:58:27 +00:00
nav_tabs . flatten
end
2013-09-24 19:14:28 +00:00
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
2013-10-10 08:05:49 +00:00
2015-09-21 12:57:33 +00:00
def repository_size ( project = @project )
" #{ project . repository_size } MB "
2013-10-10 08:05:49 +00:00
rescue
# In order to prevent 500 error
# when application cannot allocate memory
# to calculate repo size - just show 'Unknown'
'unknown'
end
2013-11-13 08:28:15 +00:00
2014-01-08 03:03:27 +00:00
def default_url_to_repo ( project = nil )
project = project || @project
current_user ? project . url_to_repo : project . http_url_to_repo
2013-12-04 02:13:19 +00:00
end
2013-12-27 10:13:30 +00:00
2013-12-04 02:13:19 +00:00
def default_clone_protocol
current_user ? " ssh " : " http "
end
2013-12-29 11:55:45 +00:00
def project_last_activity ( project )
if project . last_activity_at
2015-06-17 18:04:14 +00:00
time_ago_with_tooltip ( project . last_activity_at , placement : 'bottom' , html_class : 'last_activity_time_ago' )
2013-12-29 11:55:45 +00:00
else
" Never "
end
end
2014-07-15 12:34:06 +00:00
2015-07-30 13:12:57 +00:00
def add_contribution_guide_path ( project )
if project && ! project . repository . contribution_guide
namespace_project_new_blob_path (
project . namespace ,
project ,
project . default_branch ,
file_name : " CONTRIBUTING.md " ,
commit_message : " Add contribution guide "
)
end
end
def add_changelog_path ( project )
if project && ! project . repository . changelog
namespace_project_new_blob_path (
project . namespace ,
project ,
project . default_branch ,
file_name : " CHANGELOG " ,
commit_message : " Add changelog "
)
end
end
def add_license_path ( project )
if project && ! project . repository . license
namespace_project_new_blob_path (
project . namespace ,
project ,
project . default_branch ,
file_name : " LICENSE " ,
commit_message : " Add license "
)
end
end
def contribution_guide_path ( project )
2015-03-17 17:37:50 +00:00
if project && contribution_guide = project . repository . contribution_guide
2015-01-24 18:02:58 +00:00
namespace_project_blob_path (
project . namespace ,
project ,
tree_join ( project . default_branch ,
2015-03-17 17:37:50 +00:00
contribution_guide . name )
)
end
end
2015-07-22 01:30:27 +00:00
def readme_path ( project )
filename_path ( project , :readme )
end
2015-07-30 13:12:57 +00:00
def changelog_path ( project )
2015-07-22 01:30:27 +00:00
filename_path ( project , :changelog )
2015-03-17 17:37:50 +00:00
end
2015-07-30 13:12:57 +00:00
def license_path ( project )
2015-07-22 01:30:27 +00:00
filename_path ( project , :license )
2015-03-17 17:37:50 +00:00
end
2015-07-30 13:12:57 +00:00
def version_path ( project )
2015-07-22 01:30:27 +00:00
filename_path ( project , :version )
2014-07-15 12:34:06 +00:00
end
2014-08-26 07:11:11 +00:00
def hidden_pass_url ( original_url )
result = URI ( original_url )
2014-08-28 16:57:39 +00:00
result . password = '*****' unless result . password . nil?
2014-08-26 07:11:11 +00:00
result
2014-08-28 16:57:39 +00:00
rescue
original_url
2014-08-26 07:11:11 +00:00
end
2015-01-06 08:50:37 +00:00
def project_wiki_path_with_version ( proj , page , version , is_newest )
url_params = is_newest ? { } : { version_id : version }
2015-01-24 18:02:58 +00:00
namespace_project_wiki_path ( proj . namespace , proj , page , url_params )
2015-01-06 08:50:37 +00:00
end
2015-01-13 18:35:16 +00:00
2014-12-31 13:07:48 +00:00
def project_status_css_class ( status )
case status
when " started "
" active "
when " failed "
" danger "
when " finished "
" success "
end
end
2015-03-12 17:10:19 +00:00
2015-05-29 14:23:36 +00:00
def user_max_access_in_project ( user , project )
level = project . team . max_member_access ( user )
if level
Gitlab :: Access . options_with_owner . key ( level )
end
end
def leave_project_message ( project )
" Are you sure you want to leave \" #{ project . name } \" project? "
end
2015-07-08 11:41:03 +00:00
def new_readme_path
ref = @repository . root_ref if @repository
ref || = 'master'
namespace_project_new_blob_path ( @project . namespace , @project , tree_join ( ref ) , file_name : 'README.md' )
end
2015-07-08 21:21:35 +00:00
def last_push_event
if current_user
current_user . recent_push ( @project . id )
end
end
2015-07-09 12:47:28 +00:00
def readme_cache_key
2015-07-24 06:52:21 +00:00
sha = @project . commit . try ( :sha ) || 'nil'
2015-10-02 20:03:51 +00:00
[ @project . path_with_namespace , sha , " readme " ] . join ( '-' )
2015-07-09 12:47:28 +00:00
end
2015-07-17 13:22:56 +00:00
def round_commit_count ( project )
count = project . commit_count
if count > 10000
'10000+'
elsif count > 5000
'5000+'
elsif count > 1000
'1000+'
else
count
end
end
2015-07-22 01:30:27 +00:00
2015-09-14 18:23:01 +00:00
def current_ref
@ref || @repository . try ( :root_ref )
end
2015-09-14 17:46:58 +00:00
2015-07-22 01:30:27 +00:00
private
def filename_path ( project , filename )
if project && blob = project . repository . send ( filename )
namespace_project_blob_path (
project . namespace ,
project ,
tree_join ( project . default_branch ,
blob . name )
)
end
end
2012-09-07 16:57:13 +00:00
end