107 lines
3.4 KiB
Ruby
107 lines
3.4 KiB
Ruby
module ProjectsHelper
|
|
def options_for_filters(all_projects, groups, owners)
|
|
projects_count_by_groups = all_projects.where(owner_id: groups, owner_type: 'Group').
|
|
group(:owner_id).count
|
|
projects_count_by_owners = all_projects.where(owner_id: owners, owner_type: 'User').
|
|
group(:owner_id).count
|
|
(groups + owners).map do |o|
|
|
class_name = o.class.name
|
|
{
|
|
class_name: class_name.downcase,
|
|
id: o.id,
|
|
uname: o.uname,
|
|
count: o.is_a?(User) ? projects_count_by_owners[o.id] : projects_count_by_groups[o.id]
|
|
}
|
|
end.sort_by{ |f| f[:uname] }
|
|
end
|
|
|
|
def available_project_to_repositories(project)
|
|
project.project_to_repositories.includes(repository: :platform).select do |p_to_r|
|
|
p_to_r.repository.publish_without_qa ? true : policy(p_to_r.repository.platform).local_admin_manage?
|
|
end.sort_by do |p_to_r|
|
|
"#{p_to_r.repository.platform.name}/#{p_to_r.repository.name}"
|
|
end.map do |p_to_r|
|
|
{
|
|
repository_name: "#{p_to_r.repository.platform.name}/#{p_to_r.repository.name}",
|
|
repository_path: platform_repository_path(p_to_r.repository.platform, p_to_r.repository),
|
|
auto_publish: p_to_r.auto_publish?,
|
|
enabled: p_to_r.enabled?,
|
|
repository_id: p_to_r.repository_id
|
|
}
|
|
end.to_a.to_json
|
|
end
|
|
|
|
def mass_import_repositories_for_group_select
|
|
groups = {}
|
|
PlatformPolicy::Scope.new(current_user, Platform).related.order(:name).each do |platform|
|
|
next unless policy(platform).local_admin_manage?
|
|
groups[platform.name] = Repository.custom_sort(platform.repositories).map{ |r| [r.name, r.id] }
|
|
end
|
|
groups.to_a
|
|
end
|
|
|
|
def git_repo_url(name)
|
|
if current_user
|
|
"#{request.protocol}#{current_user.uname}@#{request.host_with_port}/#{name}.git"
|
|
else
|
|
"#{request.protocol}#{request.host_with_port}/#{name}.git"
|
|
end
|
|
end
|
|
|
|
def git_ssh_repo_url(name)
|
|
"git@#{request.host}:#{name}.git"
|
|
end
|
|
|
|
def options_for_collaborators_roles_select
|
|
Relation::ROLES.map do |role|
|
|
[t("layout.collaborators.role_names.#{ role }"), role]
|
|
end
|
|
end
|
|
|
|
def visibility_icon(visibility)
|
|
visibility == 'open' ? 'unlock.png' : 'lock.png'
|
|
end
|
|
|
|
def participant_class(alone_member, project)
|
|
c = alone_member ? 'fa-user text-primary' : 'fa-group text-primary'
|
|
c = 'fa-user text-success' if project.owner == current_user
|
|
c = 'fa-group text-success' if project.owner.in? current_user.groups
|
|
return c
|
|
end
|
|
|
|
def alone_member?(project)
|
|
Rails.cache.fetch(['ProjectsHelper#alone_member?', project, current_user]) do
|
|
Relation.by_target(project).by_actor(current_user).exists?
|
|
end
|
|
end
|
|
|
|
def participant_path(participant)
|
|
participant.kind_of?(User) ? user_path(participant) : group_path(participant)
|
|
end
|
|
|
|
def fa_visibility_icon(project)
|
|
return nil unless project
|
|
image, color = project.public? ? ['unlock-alt', 'text-success fa-fw'] : ['lock', 'text-danger fa-fw']
|
|
fa_icon(image, class: color)
|
|
end
|
|
|
|
def project_ownership_options
|
|
[
|
|
[ I18n.t('activerecord.attributes.project.who_owns.me'), 'me' ],
|
|
[ I18n.t('activerecord.attributes.project.who_owns.group'), 'group' ]
|
|
]
|
|
end
|
|
|
|
def project_visibility_options
|
|
Project::VISIBILITIES.map do |v|
|
|
[ I18n.t("activerecord.attributes.project.visibilities.#{v}"), v ]
|
|
end
|
|
end
|
|
|
|
def project_owner_groups_options
|
|
Group.can_own_project(current_user).map do |g|
|
|
[ g.name, g.id ]
|
|
end
|
|
end
|
|
end
|