diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 79ce88d32..a4c17e90d 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -385,11 +385,7 @@ class ApplicationController < ActionController::Base end def current_user - if Rails.env.development? - User.current = User.find 1 - else - User.current - end + User.current end ## 默认输出json @@ -745,7 +741,7 @@ class ApplicationController < ActionController::Base namespace = params[:owner] id = params[:repo] || params[:id] - @project = Project.find_with_namespace(namespace, id) + @project, @owner = Project.find_with_namespace(namespace, id) if @project and current_user.can_read_project?(@project) logger.info "###########: has project and can read project" diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index b95f422d0..d6ee5a56a 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -6,7 +6,6 @@ class IssuesController < ApplicationController before_action :check_project_public, only: [:index ,:show, :copy, :index_chosen, :close_issue] before_action :set_issue, only: [:edit, :update, :destroy, :show, :copy, :close_issue, :lock_issue] - before_action :get_branches, only: [:new, :edit] before_action :check_token_enough, only: [:create, :update] include ApplicationHelper @@ -97,8 +96,7 @@ class IssuesController < ApplicationController end def new - @all_branches = get_branches - @issue_chosen = issue_left_chosen(@project, nil) + @issue_chosen = get_associated_data(@project) end def create @@ -150,7 +148,6 @@ class IssuesController < ApplicationController end def edit - # @all_branches = get_branches # @issue_chosen = issue_left_chosen(@project, @issue.id) @cannot_edit_tags = @issue.issue_type=="2" && @issue.status_id == 5 #悬赏任务已解决且关闭的状态下,不能修改 @issue_attachments = @issue.attachments @@ -439,17 +436,6 @@ class IssuesController < ApplicationController tracker_array end - def get_branches - all_branches = [] - get_all_branches = Gitea::Repository::Branches::ListService.new(@user, @project&.repository.try(:identifier)).call - if get_all_branches && get_all_branches.size > 0 - get_all_branches.each do |b| - all_branches.push(b["name"]) - end - end - all_branches - end - def issue_send_params(params) { subject: params[:subject], diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 7148d53bc..4e13539c3 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -44,7 +44,7 @@ class ProjectsController < ApplicationController end def branches - @branches = @project.forge? ? Gitea::Repository::Branches::ListService.new(@project.owner, @project.identifier).call : [] + @branches = @project.forge? ? Gitea::Repository::Branches::ListService.new(@owner, @project.identifier).call : [] end def group_type_list diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index c67af18f5..c00010b2b 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -30,7 +30,7 @@ module ProjectsHelper def json_response(project, user) # repo = project.repository - repo = Repository.select(:id, :mirror_url).find_by(project: project) + repo = Repository.includes(:mirror).select(:id, :mirror_url).find_by(project: project) tmp_json = {} unless project.common? @@ -41,20 +41,6 @@ module ProjectsHelper first_sync: repo.first_sync? }) end - author = - if project.educoder? - { - login: project.project_educoder.owner, - name: project.project_educoder.owner, - image_url: project.project_educoder.image_url - } - else - { - login: project.owner.login, - name: project.owner.real_name, - image_url: url_to_avatar(project.owner) - } - end tmp_json = tmp_json.merge({ identifier: render_identifier(project), @@ -64,12 +50,28 @@ module ProjectsHelper repo_id: repo.id, open_devops: (user.blank? || user.is_a?(AnonymousUser)) ? false : project.open_devops?, type: project.numerical_for_project_type, - author: author + author: render_owner(project) }).compact render json: tmp_json end + def render_owner(project) + if project.educoder? + { + login: project.project_educoder.owner, + name: project.project_educoder.owner, + image_url: project.project_educoder.image_url + } + else + { + login: @owner.login, + name: @owner.real_name, + image_url: url_to_avatar(@owner) + } + end + end + def render_identifier(project) project.educoder? ? project.project_educoder&.repo_name&.split('/')[1] : project.identifier end diff --git a/app/helpers/tag_chosen_helper.rb b/app/helpers/tag_chosen_helper.rb index 75be474f2..afd51170d 100644 --- a/app/helpers/tag_chosen_helper.rb +++ b/app/helpers/tag_chosen_helper.rb @@ -1,4 +1,143 @@ module TagChosenHelper + def get_associated_data(project) + issue_comment_users_array = [] + cost_time_array = [] + all_issues = [] + { + "assign_user": render_cache_collaborators(project), + "tracker": render_cache_trackers, + "issue_status": render_cache_issue_statuses, + "priority": render_cache_issue_priorities, + "issue_version": render_cache_milestones(project), + "start_date": "", + "due_date": "", + "joins_users": issue_comment_users_array, + "cost_time_users": cost_time_array, + # "total_cost_time": Time.at(all_cost_time).utc.strftime('%H h %M min %S s'), + # "be_depended_issues": be_depended_issues_array, + # "depended_issues":depended_issues_array, + # "estimated_hours": issue_info[7], + "done_ratio": render_complete_percentage, + "issue_tag": render_issue_tags(project), + "issue_type": render_issue_species, + "all_issues": all_issues + } + end + + def render_cache_trackers + cache_key = "all_trackers/#{Tracker.maximum('id')}" + + Rails.cache.fetch(cache_key) do + Tracker.select(:id, :name, :position).collect do |event| + { + id: event.id, + name: event.name, + position: event.position, + is_chosen: '0' + } + end + end + end + + def render_cache_issue_statuses + cache_key = "all_issue_statuses/#{IssueStatus.maximum('id')}" + + Rails.cache.fetch(cache_key) do + IssueStatus.select(:id, :name, :position).collect do |event| + { + id: event.id, + name: event.name, + position: event.position, + is_chosen: '0' + } + end + end + end + + def render_cache_issue_priorities + cache_key = "all_issue_priorities/#{IssuePriority.maximum('id')}" + + Rails.cache.fetch(cache_key) do + IssuePriority.select(:id, :name, :position).collect do |event| + { + id: event.id, + name: event.name, + position: event.position, + is_chosen: '0' + } + end + end + end + + def render_complete_percentage + completion_nums = %w(0 10 20 30 40 50 60 70 80 90 100) + completion_nums.collect do |event| + { + id: event.to_i, + name: event + "%", + is_chosen: '0' + } + end + end + + def render_issue_species + species = %W(普通 悬赏) + + species.collect do |event| + { + id: event.to_i + 1, + token: nil, + is_chosen: '0' + } + end + end + + def render_issue_tags(project) + # project.issue_tags.last&.cache_key + cache_key = "all_issue_tags/#{project.issue_tags.maximum('updated_at')}" + + Rails.cache.fetch(cache_key) do + project.issue_tags.select(:id, :name, :color).collect do |event| + { + id: event.id, + name: event.name, + color: event.color, + is_chosen: '0' + } + end + end + end + + def render_cache_milestones(project) + cache_key = "all_milestones/#{project.versions.maximum('updated_on')}" + + Rails.cache.fetch(cache_key) do + project.versions.select(:id, :name, :status).collect do |event| + { + id: event.id, + name: event.name, + status: event.status, + is_chosen: '0' + } + end + end + end + + def render_cache_collaborators(project) + cache_key = "all_collaborators/#{project.members.maximum('created_on')}" + + Rails.cache.fetch(cache_key) do + project.members.includes(:user).collect do |event| + { + id: event.user&.id, + name: event.user&.show_real_name, + avatar_url: url_to_avatar(event.user), + is_chosen: '0' + } + end + end + end + def issue_left_chosen(project,issue_id) issue_info = Array.new(11) @@ -205,4 +344,4 @@ module TagChosenHelper # be_depended_issues_array # end -end \ No newline at end of file +end diff --git a/app/models/project.rb b/app/models/project.rb index 36a7867f5..096466ab9 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -178,18 +178,13 @@ class Project < ApplicationRecord def self.find_with_namespace(namespace_path, identifier) logger.info "########namespace_path: #{namespace_path} ########identifier: #{identifier} " - project = Project.find_by(identifier: identifier) || Project.find_by(identifier: "#{namespace_path}/#{identifier}") + user = User.find_by_login namespace_path + return nil if user.blank? + project = user.projects.find_by(identifier: identifier) || Project.find_by(identifier: "#{namespace_path}/#{identifier}") return nil if project.blank? - if project.forge? - user = User.find_by_login namespace_path - return nil if user.blank? - - project = user.projects.find_by(identifier: identifier) - return nil if project.blank? - end - project + [project, user] end def ci_reactivate? diff --git a/app/views/issues/new.json.jbuilder b/app/views/issues/new.json.jbuilder index f47ce3e79..03c7608ac 100644 --- a/app/views/issues/new.json.jbuilder +++ b/app/views/issues/new.json.jbuilder @@ -1,3 +1,2 @@ json.partial! "commons/success" -json.branches @all_branches -json.issue_chosen @issue_chosen \ No newline at end of file +json.issue_chosen @issue_chosen