| @@ -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" | |||
| @@ -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], | |||
| @@ -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 | |||
| @@ -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 | |||
| @@ -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 | |||
| end | |||
| @@ -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? | |||
| @@ -1,3 +1,2 @@ | |||
| json.partial! "commons/success" | |||
| json.branches @all_branches | |||
| json.issue_chosen @issue_chosen | |||
| json.issue_chosen @issue_chosen | |||