diff --git a/app/controllers/organizations/clas_controller.rb b/app/controllers/organizations/clas_controller.rb index 531dc3c5d..953cc9d5c 100644 --- a/app/controllers/organizations/clas_controller.rb +++ b/app/controllers/organizations/clas_controller.rb @@ -1,11 +1,15 @@ class Organizations::ClasController < Organizations::BaseController before_action :load_organization before_action :load_cla, only: [:show, :update, :destroy] + def index @cla = @organization.cla end - def show + def show + @is_admin = can_edit_org? + @is_member = @organization.is_member?(current_user.id) + @is_sign = @organization.is_sign?(current_user.id) end def create @@ -15,7 +19,7 @@ class Organizations::ClasController < Organizations::BaseController return tip_exception("组织已存在CLA!") else Organizations::CreateClaForm.new(cla_params).validate! - @cla = Cla.build(cla_params) + @cla = Cla.build(cla_params,@organization.id) end end rescue Exception => e @@ -47,7 +51,7 @@ class Organizations::ClasController < Organizations::BaseController private def cla_params - params.permit(:name, :key, :content, :organization_id, :pr_need) + params.permit(:name, :key, :content, :pr_need) end def load_organization @@ -57,7 +61,7 @@ class Organizations::ClasController < Organizations::BaseController end def load_cla - @cla = Cla.find_by!(organization:params[:organization_id], key: params[:id]) + @cla = Cla.find_by!(organization:@organization, key: params[:id]) end end diff --git a/app/controllers/users/clas_controller.rb b/app/controllers/users/clas_controller.rb index e3a4de0c2..d5e93436e 100644 --- a/app/controllers/users/clas_controller.rb +++ b/app/controllers/users/clas_controller.rb @@ -8,6 +8,7 @@ class Users::ClasController < Users::BaseController ActiveRecord::Base.transaction do Users::UserClaForm.new(user_cla_params).validate! @user_cla = UserCla.build(user_cla_params, @_observed_user.id) + render_ok end rescue Exception => e uid_logger_error(e.message) diff --git a/app/forms/organizations/create_cla_form.rb b/app/forms/organizations/create_cla_form.rb index 47499088f..ce20a23ce 100644 --- a/app/forms/organizations/create_cla_form.rb +++ b/app/forms/organizations/create_cla_form.rb @@ -1,6 +1,6 @@ class Organizations::CreateClaForm < BaseForm KEY_REGEX = /^(?!_)(?!.*?_$)[a-zA-Z0-9_-]+$/ #只含有数字、字母、下划线不能以下划线开头和结尾 - attr_accessor :name, :key, :content, :organization_id, :pr_need - validates :name, :organization_id , :key, presence: true + attr_accessor :name, :key, :content, :pr_need + validates :name , :key, presence: true validates :key, format: { with: KEY_REGEX, multiline: true, message: "只能含有数字、字母、下划线且不能以下划线开头和结尾" } end \ No newline at end of file diff --git a/app/models/cla.rb b/app/models/cla.rb index d42726658..11f86dcd6 100644 --- a/app/models/cla.rb +++ b/app/models/cla.rb @@ -27,12 +27,17 @@ class Cla < ApplicationRecord self.key.parameterize end - def self.build(params) - self.create!(organization_id: params[:organization_id], + def self.build(params,org_id) + self.create!(organization_id: org_id, name: params[:name], key: params[:key], content: params[:content], pr_need: params[:pr_need] ) end + + + def fresh_count + update(count:self.users.count) + end end diff --git a/app/models/organization.rb b/app/models/organization.rb index e76f0aa6a..f3df5da18 100644 --- a/app/models/organization.rb +++ b/app/models/organization.rb @@ -107,6 +107,11 @@ class Organization < Owner organization_users.where(user_id: user_id).present? end + def is_sign?(user_id) + return false if cla.nil? + cla.user_clas.where(user_id: user_id).present? + end + def is_owner?(user_id) team_users.joins(:team).where(user_id: user_id, teams: {authorize: %w(owner)}).present? end diff --git a/app/models/user_cla.rb b/app/models/user_cla.rb index a1accb41e..005533ce7 100644 --- a/app/models/user_cla.rb +++ b/app/models/user_cla.rb @@ -22,6 +22,9 @@ class UserCla < ApplicationRecord belongs_to :cla # identity 0: 教师教授 1: 学生, 2: 专业人士, 3: 开发者 enum state: { deafult: 0, signed: 1, failed: 2} + after_create do + cla.fresh_count + end def self.build(params,user_id) self.create!(user_id: user_id, diff --git a/app/views/organizations/clas/_detail.json.jbuilder b/app/views/organizations/clas/_detail.json.jbuilder index 39c4e6a33..b9d50183b 100644 --- a/app/views/organizations/clas/_detail.json.jbuilder +++ b/app/views/organizations/clas/_detail.json.jbuilder @@ -3,3 +3,4 @@ json.content cla.content json.key cla.key json.name cla.name json.pr_need cla.pr_need +json.count cla.count \ No newline at end of file diff --git a/app/views/organizations/clas/show.json.jbuilder b/app/views/organizations/clas/show.json.jbuilder index 4fa0db18c..1660b4d07 100644 --- a/app/views/organizations/clas/show.json.jbuilder +++ b/app/views/organizations/clas/show.json.jbuilder @@ -1,5 +1,6 @@ json.partial! "detail", cla: @cla, organization: @organization json.is_admin @is_admin +json.is_sign @is_sign json.is_member @is_member json.organization do json.partial! "organizations/organizations/simple", organization: @organization