From 6c436dd631c8c879607e73770cb06cbb55ea226c Mon Sep 17 00:00:00 2001 From: viletyy Date: Sun, 27 Dec 2020 18:44:03 +0800 Subject: [PATCH] =?UTF-8?q?[ADD]=E5=90=8E=E5=8F=B0=E5=AE=A1=E6=A0=B8?= =?UTF-8?q?=E7=89=B9=E6=AE=8A=E8=AE=B8=E5=8F=AF=E7=94=B3=E8=AF=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api_document.md | 18 ++++---- .../admins/apply_signatures_controller.rb | 30 +++++++++++++ .../projects/add_member_interactor.rb | 19 +++++---- app/models/apply_signature.rb | 4 ++ app/models/concerns/project_operable.rb | 4 +- .../admins/apply_signatures/index.html.erb | 7 ++++ .../apply_signatures/shared/_list.html.erb | 42 +++++++++++++++++++ .../admins/projects/shared/_list.html.erb | 2 + app/views/admins/shared/_sidebar.html.erb | 2 + .../apply_signatures/create.json.jbuilder | 2 +- app/views/members/index.json.jbuilder | 1 + .../group_list.json.jbuilder | 21 ++-------- config/routes.rb | 3 +- 13 files changed, 116 insertions(+), 39 deletions(-) create mode 100644 app/controllers/admins/apply_signatures_controller.rb create mode 100644 app/views/admins/apply_signatures/index.html.erb create mode 100644 app/views/admins/apply_signatures/shared/_list.html.erb diff --git a/api_document.md b/api_document.md index 32f31a67..2cbb2431 100644 --- a/api_document.md +++ b/api_document.md @@ -1171,9 +1171,9 @@ http://localhost:3000/api/projects | jq |language |object|项目语言| |-- id |int|项目语言id| |-- name |string|项目语言名称| -|user_apply_signatures |object|用户申请的项目签名| -|-- id |int|用户申请的项目签名id| -|-- status |int|用户申请的项目签名审核状态, 0: 正在审核,1:已审核| +|user_apply_signatures |object|用户创建的特殊许可申请| +|-- id |int|用户创建的特殊许可申请id| +|-- status |int|用户创建的特殊许可申请审核状态, 'unpassed': 审核未通过,'waiting': 等待审核 'passed':审核通过| @@ -1208,7 +1208,7 @@ http://localhost:3000/api/projects | jq "user_apply_signatures":[ { "id": 1, - "status": 0 + "status": "waiting" } ] }, @@ -4015,9 +4015,9 @@ http://localhost:3000/api/users/Jason/projects.json | jq |language |object|项目语言| |-- id |int|项目语言id| |-- name |string|项目语言名称| -|user_apply_signatures |object|用户申请的项目签名| -|-- id |int|用户申请的项目签名id| -|-- status |int|用户申请的项目签名审核状态, 0: 正在审核,1:已审核| +|user_apply_signatures |object|用户创建的特殊许可申请| +|-- id |int|用户创建的特殊许可申请id| +|-- status |int|用户创建的特殊许可申请审核状态, 'unpassed': 审核未通过,'waiting': 等待审核 'passed':审核通过| 返回值 ```json @@ -4050,7 +4050,7 @@ http://localhost:3000/api/users/Jason/projects.json | jq "user_apply_signatures":[ { "id": 1, - "status": 0 + "status": "waiting" } ] } @@ -4091,7 +4091,7 @@ http://localhost:3000/api/apply_signatures.json | jq { "id": 5, "attachment": { - "name": "timg.jpeg" + "filename": "timg.jpeg" } } ``` diff --git a/app/controllers/admins/apply_signatures_controller.rb b/app/controllers/admins/apply_signatures_controller.rb new file mode 100644 index 00000000..c6b0f4c0 --- /dev/null +++ b/app/controllers/admins/apply_signatures_controller.rb @@ -0,0 +1,30 @@ +class Admins::ApplySignaturesController < Admins::BaseController + + def index + sort_by = params[:sort_by] ||= 'created_on' + sort_direction = params[:sort_direction] ||= 'desc' + + @apply_signatures = paginate ApplySignature.waiting.includes(:attachments) + end + + def update + ActiveRecord::Base.transaction do + begin + apply_signature = ApplySignature.find_by!(id: params[:id]) + apply_signature.update_attributes!(apply_signatures_params) + Projects::AddMemberInteractor.call(apply_signature.project.owner, apply_signature.project, apply_signature.user, "write", true) + redirect_to admins_apply_signatures_path + flash[:success] = "更新成功" + rescue => e + raise ActiveRecord::Rollback + redirect_to admins_apply_signatures_path + flash[:danger] = "更新失败" + end + end + end + + private + def apply_signatures_params + params.permit(:status) + end + end \ No newline at end of file diff --git a/app/interactors/projects/add_member_interactor.rb b/app/interactors/projects/add_member_interactor.rb index a3fe9e33..1e17dc45 100644 --- a/app/interactors/projects/add_member_interactor.rb +++ b/app/interactors/projects/add_member_interactor.rb @@ -1,18 +1,19 @@ module Projects class AddMemberInteractor - def self.call(owner, project, collaborator, permission="write") - interactor = new(owner, project, collaborator, permission) + def self.call(owner, project, collaborator, permission="write", is_apply_signature=false) + interactor = new(owner, project, collaborator, permission, is_apply_signature) interactor.run interactor end attr_reader :error, :result - def initialize(owner, project, collaborator, permission) - @owner = owner - @project = project - @collaborator = collaborator - @permission = permission + def initialize(owner, project, collaborator, permission, is_apply_signature) + @owner = owner + @project = project + @collaborator = collaborator + @permission = permission + @is_apply_signature = is_apply_signature end def success? @@ -23,7 +24,7 @@ module Projects ActiveRecord::Base.transaction do gitea_result = Gitea::Repository::Members::AddService.new(owner, project.identifier, collaborator.login, permission).call if gitea_result.status == 204 - project.add_member!(collaborator.id) + project.add_member!(collaborator.id, 'Developer', is_apply_signature) end fail!(nil) end @@ -32,7 +33,7 @@ module Projects end private - attr_reader :owner, :project, :collaborator, :permission + attr_reader :owner, :project, :collaborator, :permission, :is_apply_signature def fail!(error) @error = error diff --git a/app/models/apply_signature.rb b/app/models/apply_signature.rb index f76bda94..64a9f1f5 100644 --- a/app/models/apply_signature.rb +++ b/app/models/apply_signature.rb @@ -2,5 +2,9 @@ class ApplySignature < ApplicationRecord belongs_to :user belongs_to :project + has_many :attachments, as: :container, dependent: :destroy + scope :with_user_id, -> (user_id) {where(user_id: user_id)} + + enum status: {unpassed: -1, waiting: 0, passed: 1} end diff --git a/app/models/concerns/project_operable.rb b/app/models/concerns/project_operable.rb index f05ed164..8bb11ffd 100644 --- a/app/models/concerns/project_operable.rb +++ b/app/models/concerns/project_operable.rb @@ -10,8 +10,8 @@ module ProjectOperable has_many :writable_members, -> { joins(:roles).where.not(roles: {name: 'Reporter'}) }, class_name: 'Member' end - def add_member!(user_id, role_name='Developer') - member = members.create!(user_id: user_id) + def add_member!(user_id, role_name='Developer', is_apply_signature=false) + member = members.create!(user_id: user_id, is_apply_signature: is_apply_signature) set_developer_role(member) end diff --git a/app/views/admins/apply_signatures/index.html.erb b/app/views/admins/apply_signatures/index.html.erb new file mode 100644 index 00000000..cf63c95d --- /dev/null +++ b/app/views/admins/apply_signatures/index.html.erb @@ -0,0 +1,7 @@ +<% define_admin_breadcrumbs do %> + <% add_admin_breadcrumb('特殊许可申请列表') %> +<% end %> + +
+ <%= render partial: 'admins/apply_signatures/shared/list', locals: { apply_signatures: @apply_signatures } %> +
\ No newline at end of file diff --git a/app/views/admins/apply_signatures/shared/_list.html.erb b/app/views/admins/apply_signatures/shared/_list.html.erb new file mode 100644 index 00000000..af0d5848 --- /dev/null +++ b/app/views/admins/apply_signatures/shared/_list.html.erb @@ -0,0 +1,42 @@ + + + + + + + + + + + + <% if apply_signatures.present? %> + <% apply_signatures.each_with_index do |signature, index| %> + + + + + + + + <% end %> + <% else %> + <%= render 'admins/shared/no_data_for_table' %> + <% end %> + +
序号项目名称申请人申请材料操作
<%= list_index_no((params[:page] || 1).to_i, index) %> + <%= link_to(signature&.project&.name, "/projects/#{signature&.project&.owner.login}/#{signature&.project&.identifier}", target: '_blank') %> + + <%= link_to(signature&.user&.real_name, "/users/#{signature&.user&.login}", target: '_blank') %> + + <% if signature.attachments.present? %> + <% signature.attachments.each do |attachment|%> + <%= image_tag("/api/attachments/#{attachment.id}", width: 40, height: 40, class: 'preview-image auth-image', data: { toggle: 'tooltip', title: '点击预览' }) %> + <% end %> + <% end %> + + + <%= link_to "同意", admins_apply_signature_path(signature.id, status: 1), method: :patch, class: "delete-project-action" %> + <%= link_to "拒绝", admins_apply_signature_path(signature.id, status: -1), method: :patch, class: "delete-project-action" %> +
+ +<%= render partial: 'admins/shared/paginate', locals: { objects: apply_signatures } %> \ No newline at end of file diff --git a/app/views/admins/projects/shared/_list.html.erb b/app/views/admins/projects/shared/_list.html.erb index 98683581..fc2cd52c 100644 --- a/app/views/admins/projects/shared/_list.html.erb +++ b/app/views/admins/projects/shared/_list.html.erb @@ -5,6 +5,7 @@ ID 项目名称 公开 + 特殊协议 issue 资源 版本库 @@ -26,6 +27,7 @@ <%= link_to(project.name, "/projects/#{project.owner.login}/#{project.identifier}", target: '_blank') %> <%= project.is_public ? '√' : '' %> + <%= project.is_secret ? '√' : '' %> <%= project.issues.size %> <%= project.attachments.size %> <%= project&.project_score.try(:changeset_num).to_i %> diff --git a/app/views/admins/shared/_sidebar.html.erb b/app/views/admins/shared/_sidebar.html.erb index de56a547..c72ce593 100644 --- a/app/views/admins/shared/_sidebar.html.erb +++ b/app/views/admins/shared/_sidebar.html.erb @@ -26,6 +26,8 @@
  • <%= sidebar_item(admins_project_categories_path, '分类列表', icon: 'sitemap', controller: 'admins-project_categories') %>
  • <%= sidebar_item(admins_project_licenses_path, '开源许可证', icon: 'file-text-o', controller: 'admins-project_licenses') %>
  • <%= sidebar_item(admins_project_ignores_path, '忽略文件', icon: 'git', controller: 'admins-project_ignores') %>
  • +
  • <%= sidebar_item(admins_apply_signatures_path, '特殊许可申请列表', icon: 'git', controller: 'admins-apply_signatures') %>
  • + <% end %> diff --git a/app/views/apply_signatures/create.json.jbuilder b/app/views/apply_signatures/create.json.jbuilder index acffa1cb..f67d3b39 100644 --- a/app/views/apply_signatures/create.json.jbuilder +++ b/app/views/apply_signatures/create.json.jbuilder @@ -1,4 +1,4 @@ json.id @signature.id json.attachment do - json.name @attachment.filename + json.filename @attachment.filename end diff --git a/app/views/members/index.json.jbuilder b/app/views/members/index.json.jbuilder index 457c5027..40342b52 100644 --- a/app/views/members/index.json.jbuilder +++ b/app/views/members/index.json.jbuilder @@ -5,5 +5,6 @@ json.members @members do |member| json.is_owner @project.owner?(member.user) json.role member.roles.last.name json.role_name t("roles.#{member.roles.last.name}") + json.is_apply_signature member.is_apply_signature end end diff --git a/app/views/project_categories/group_list.json.jbuilder b/app/views/project_categories/group_list.json.jbuilder index 5e0695c1..f13d6ecf 100644 --- a/app/views/project_categories/group_list.json.jbuilder +++ b/app/views/project_categories/group_list.json.jbuilder @@ -1,18 +1,5 @@ -# json.array! @category_group_list do |category,v| -# json.id category[0] -# json.name category[1] -# json.projects_count v -# end - -json.array! @category_group_list do |k,v| - children_category = @project_children_categories.get_children(v) - json.children do - json.array! children_category do |cate| - json.id cate[0] - json.name cate[1] - json.parent_id v - end - end - json.id v - json.name k.to_s +json.array! @project_categories do |category| + json.id category.id + json.name category.name + json.projects_count category.projects_count end diff --git a/config/routes.rb b/config/routes.rb index 2adf361b..4234d2e0 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,5 @@ Rails.application.routes.draw do - + require 'sidekiq/web' require 'admin_constraint' @@ -772,6 +772,7 @@ Rails.application.routes.draw do resources :salesman_customers, only: [:index, :create, :edit, :update, :destroy] do post :batch_add, on: :collection end + resources :apply_signatures, only: [:index, :update] end