diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb index 69491282d..7bd533b12 100644 --- a/app/helpers/repositories_helper.rb +++ b/app/helpers/repositories_helper.rb @@ -213,5 +213,13 @@ module RepositoriesHelper def tmp_dir "repo" end - + + def repo_git_submodule_url(owner, repo, path) + unless (path.starts_with?('http://') || path.starts_with?('https://')) + path = File.expand_path(path, "#{base_url}/#{owner&.login}/#{repo&.identifier}") + path = path.split("#{Rails.root}/")[1] + end + + return path + end end diff --git a/app/queries/projects/list_query.rb b/app/queries/projects/list_query.rb index c4c81957b..076ecddfd 100644 --- a/app/queries/projects/list_query.rb +++ b/app/queries/projects/list_query.rb @@ -39,6 +39,15 @@ class Projects::ListQuery < ApplicationQuery collection end + def main_collection + collection = Project.visible + # 增加私有组织中项目过滤 + collection = collection.joins("left join organization_extensions on organization_extensions.organization_id = projects.user_id") + .where("organization_extensions.visibility is null or organization_extensions.visibility in (0,1)") + .where("projects.user_id > 0") + collection + end + def by_search(items) @ids = Projects::ElasticsearchService.call(params[:search]) items = items.where(platform: 'forge') @@ -80,5 +89,14 @@ class Projects::ListQuery < ApplicationQuery relations end end - + + def by_recommend(items) + params[:recommend].to_s == "true" ? items.where(recommend: true) : items + end + + def exclude_fork(items) + return items if params[:exclude_forked].blank? + params[:exclude_forked].to_s == "true" ? items.where("forked_from_project_id is null") : items.where("forked_from_project_id is not null") + end + end diff --git a/app/views/repositories/_simple_entry.json.jbuilder b/app/views/repositories/_simple_entry.json.jbuilder index 8adcaeb83..16bf7cc92 100644 --- a/app/views/repositories/_simple_entry.json.jbuilder +++ b/app/views/repositories/_simple_entry.json.jbuilder @@ -8,6 +8,7 @@ if @project.forge? json.sha entry['sha'] json.path entry['path'] json.type entry['type'] + json.submodule_git_url repo_git_submodule_url(@owner, @repository, entry['submodule_git_url']) json.size entry['size'] is_readme = is_readme?(entry['type'], entry['name']) if is_readme diff --git a/app/views/repositories/entries.json.jbuilder b/app/views/repositories/entries.json.jbuilder index 6dea93b32..310918597 100644 --- a/app/views/repositories/entries.json.jbuilder +++ b/app/views/repositories/entries.json.jbuilder @@ -51,6 +51,7 @@ if @project.forge? json.path entry['path'] json.sha entry['sha'] json.type entry['type'] + json.submodule_git_url repo_git_submodule_url(@owner, @repository, entry['submodule_git_url']) json.size entry['size'] json.is_readme_file is_readme?(entry['type'], entry['name']) json.content decode64_content(entry, @owner, @repository, @ref, @path)