Merge remote-tracking branch 'origin/standalone_develop' into standalone_develop

This commit is contained in:
“xxq250” 2022-10-21 09:42:27 +08:00
commit 4cc4ed5864
16 changed files with 389 additions and 319 deletions

View File

@ -205,3 +205,9 @@ input.form-control {
font-size: 1rem; font-size: 1rem;
} }
} }
.table th, .table td {
padding: 0.75rem 0.1rem;
vertical-align: top;
border-top: 1px solid #dee2e6;
}

View File

@ -1,6 +1,6 @@
class Admins::ProjectIgnoresController < Admins::BaseController class Admins::ProjectIgnoresController < Admins::BaseController
before_action :set_ignore, only: [:edit,:update, :destroy,:show] before_action :set_ignore, only: [:edit,:update, :destroy,:show]
before_action :validate_params, only: [:create, :update] # before_action :validate_params, only: [:create, :update]
def index def index
sort_by = Ignore.column_names.include?(params[:sort_by]) ? params[:sort_by] : 'created_at' sort_by = Ignore.column_names.include?(params[:sort_by]) ? params[:sort_by] : 'created_at'
@ -31,12 +31,12 @@ class Admins::ProjectIgnoresController < Admins::BaseController
# } # }
@project_ignore = Ignore.new(ignore_params) @project_ignore = Ignore.new(ignore_params)
if @project_ignore.save! if @project_ignore.save
redirect_to admins_project_ignores_path redirect_to admins_project_ignores_path
flash[:success] = "创建成功" flash[:success] = "创建成功"
else else
render :new redirect_to admins_project_ignores_path
flash[:danger] = "创建失败" flash[:danger] = @project_ignore.errors.full_messages.join(",")
end end
end end
@ -58,8 +58,8 @@ class Admins::ProjectIgnoresController < Admins::BaseController
redirect_to admins_project_ignores_path redirect_to admins_project_ignores_path
flash[:success] = "更新成功" flash[:success] = "更新成功"
else else
render :edit redirect_to admins_project_ignores_path
flash[:danger] = "更新失败" flash[:danger] = @project_ignore.errors.full_messages.join(",")
end end
end end
@ -98,23 +98,23 @@ class Admins::ProjectIgnoresController < Admins::BaseController
params.require(:ignore).permit(:name,:content) params.require(:ignore).permit(:name,:content)
end end
def validate_params # def validate_params
name = params[:ignore][:name] # name = params[:ignore][:name]
if name.blank? # if name.blank?
flash[:danger] = "名称不允许为空" # flash[:danger] = "名称不允许为空"
redirect_to admins_project_ignores_path # redirect_to admins_project_ignores_path
elsif check_ignore_present?(name) && @project_ignore.blank? # elsif check_ignore_present?(name) && @project_ignore.blank?
flash[:danger] = "创建失败:名称已存在" # flash[:danger] = "创建失败:名称已存在"
redirect_to admins_project_ignores_path # redirect_to admins_project_ignores_path
end # end
end # end
def check_ignore_present?(name) # def check_ignore_present?(name)
return true if name.blank? # return true if name.blank?
name_downcase = name.downcase # name_downcase = name.downcase
name_upcase = name.upcase # name_upcase = name.upcase
name_first_big = name.capitalize # name_first_big = name.capitalize
Ignore.exists?(name: name_downcase) || Ignore.exists?(name: name_upcase) || Ignore.exists?(name: name_first_big) # Ignore.exists?(name: name_downcase) || Ignore.exists?(name: name_upcase) || Ignore.exists?(name: name_first_big)
end # end
end end

View File

@ -27,17 +27,18 @@ class Admins::ProjectLanguagesController < Admins::BaseController
flash[:success] = '创建成功' flash[:success] = '创建成功'
else else
redirect_to admins_project_languages_path redirect_to admins_project_languages_path
flash[:danger] = '创建失败' flash[:danger] = @project_language.errors.full_messages.join(",")
end end
end end
def update def update
if @project_language.update_attribute(:name, @name) @project_language.attributes = {name: @name}
if @project_language.save
redirect_to admins_project_languages_path redirect_to admins_project_languages_path
flash[:success] = '更新成功' flash[:success] = '更新成功'
else else
redirect_to admins_project_languages_path redirect_to admins_project_languages_path
flash[:success] = '更新失败' flash[:danger] = @project_language.errors.full_messages.join(",")
end end
end end

View File

@ -1,6 +1,6 @@
class Admins::ProjectLicensesController < Admins::BaseController class Admins::ProjectLicensesController < Admins::BaseController
before_action :set_license, only: [:edit,:update, :destroy,:show] before_action :set_license, only: [:edit,:update, :destroy,:show]
before_action :validate_params, only: [:create, :update] # before_action :validate_params, only: [:create, :update]
def index def index
sort_by = License.column_names.include?(params[:sort_by]) ? params[:sort_by] : 'created_at' sort_by = License.column_names.include?(params[:sort_by]) ? params[:sort_by] : 'created_at'
@ -30,13 +30,12 @@ class Admins::ProjectLicensesController < Admins::BaseController
# position: max_position # position: max_position
# } # }
@project_license = License.new(license_params) @project_license = License.new(license_params)
if @project_license.save
if @project_license.save!
redirect_to admins_project_licenses_path redirect_to admins_project_licenses_path
flash[:success] = "创建成功" flash[:success] = "创建成功"
else else
render :new redirect_to admins_project_licenses_path
flash[:danger] = "创建失败" flash[:danger] = @project_license.errors.full_messages.join(",")
end end
end end
@ -54,12 +53,13 @@ class Admins::ProjectLicensesController < Admins::BaseController
# permissions: permissions.to_s, # permissions: permissions.to_s,
# limitations: limitations.to_s # limitations: limitations.to_s
# } # }
if @project_license.update_attributes(license_params) @project_license.attributes = license_params
if @project_license.save
redirect_to admins_project_licenses_path redirect_to admins_project_licenses_path
flash[:success] = "更新成功" flash[:success] = "更新成功"
else else
render :edit render admins_project_licenses_path
flash[:danger] = "更新失败" flash[:danger] = @project_license.errors.full_messages.join(",")
end end
end end
@ -98,23 +98,23 @@ class Admins::ProjectLicensesController < Admins::BaseController
params.require(:license).permit(:name,:content) params.require(:license).permit(:name,:content)
end end
def validate_params # def validate_params
name = params[:license][:name] # name = params[:license][:name]
if name.blank? # if name.blank?
flash[:danger] = "名称不允许为空" # flash[:danger] = "名称不允许为空"
redirect_to admins_project_licenses_path # redirect_to admins_project_licenses_path
elsif check_license_present?(name) && @project_license.blank? # elsif check_license_present?(name) && @project_license.blank?
flash[:danger] = "创建失败:名称已存在" # flash[:danger] = "创建失败:名称已存在"
redirect_to admins_project_licenses_path # redirect_to admins_project_licenses_path
end # end
end # end
def check_license_present?(name) # def check_license_present?(name)
return true if name.blank? # return true if name.blank?
name_downcase = name.downcase # name_downcase = name.downcase
name_upcase = name.upcase # name_upcase = name.upcase
name_first_big = name.capitalize # name_first_big = name.capitalize
License.exists?(name: name_downcase) || License.exists?(name: name_upcase) || License.exists?(name: name_first_big) # License.exists?(name: name_downcase) || License.exists?(name: name_upcase) || License.exists?(name: name_first_big)
end # end
end end

View File

@ -711,11 +711,17 @@ class ApplicationController < ActionController::Base
# logger.info "###########This is AnonymousUser" # logger.info "###########This is AnonymousUser"
# @project = nil if !@project.is_public? # @project = nil if !@project.is_public?
# render_forbidden and return # render_forbidden and return
else
if @project.present?
logger.info "########### has project and but can't read project"
@project = nil
render_forbidden and return
else else
logger.info "###########project not found" logger.info "###########project not found"
@project = nil @project = nil
render_not_found and return render_not_found and return
end end
end
@project @project
end end

View File

@ -220,7 +220,7 @@ class AttachmentsController < ApplicationController
candown = course.member?(current_user) || course.is_public candown = course.member?(current_user) || course.is_public
elsif @file.container.is_a?(Journal) elsif @file.container.is_a?(Journal)
course = @file.container.issue.project course = @file.container.issue.project
candown = course.member?(current_user) candown = course.member?(current_user) || course.is_public
else else
course = nil course = nil
end end

View File

@ -65,13 +65,13 @@ class MembersController < ApplicationController
def check_member_exists! def check_member_exists!
@current_user_header_team = Team.joins(:team_users, :team_projects).where(team_projects: {project_id: @project.id}, team_users: {user_id: current_user.id}).order(authorize: :desc).take @current_user_header_team = Team.joins(:team_users, :team_projects).where(team_projects: {project_id: @project.id}, team_users: {user_id: current_user.id}).order(authorize: :desc).take
return render_error("user_id为#{params[:user_id]}的用户已经是项目成员") if member_exists? || (params[:user_id].to_i == current_user.id && @current_user_header_team.present?) return render_error("#{@user&.nickname}已经是项目成员") if member_exists? || (params[:user_id].to_i == current_user.id && @current_user_header_team.present?)
end end
def check_member_not_exists! def check_member_not_exists!
@current_user_header_team = Team.joins(:team_users, :team_projects).where(team_projects: {project_id: @project.id}, team_users: {user_id: current_user.id}).order(authorize: :desc).take @current_user_header_team = Team.joins(:team_users, :team_projects).where(team_projects: {project_id: @project.id}, team_users: {user_id: current_user.id}).order(authorize: :desc).take
return render_error("用户为组织成员,请到组织下操作!") if (params[:user_id].to_i == current_user.id && @current_user_header_team.present?) && !member_exists? return render_error("用户为组织成员,请到组织下操作!") if (params[:user_id].to_i == current_user.id && @current_user_header_team.present?) && !member_exists?
return render_error("user_id为#{params[:user_id]}的用户还不是项目成员") unless member_exists? return render_error("#{@user&.nickname}还不是项目成员") unless member_exists?
end end
def check_user_profile_completed def check_user_profile_completed

View File

@ -11,4 +11,7 @@
class Ignore < ApplicationRecord class Ignore < ApplicationRecord
include Projectable include Projectable
validates :name, :content, presence: true
validates :name, uniqueness: { case_sensitive: false }
end end

View File

@ -11,4 +11,8 @@
class License < ApplicationRecord class License < ApplicationRecord
include Projectable include Projectable
validates :name, :content, presence: true
validates :name, uniqueness: { case_sensitive: false }
end end

View File

@ -13,7 +13,7 @@
# #
class MessageTemplate < ApplicationRecord class MessageTemplate < ApplicationRecord
self.inheritance_column = nil # self.inheritance_column = nil
PLATFORM = 'GitLink' PLATFORM = 'GitLink'
def self.build_init_data def self.build_init_data

View File

@ -12,4 +12,6 @@
class ProjectLanguage < ApplicationRecord class ProjectLanguage < ApplicationRecord
include Projectable include Projectable
validates :name, uniqueness: true
end end

View File

@ -70,4 +70,15 @@ class Team < ApplicationRecord
end end
end end
def to_gitea_hash
{
can_create_org_repo: self.can_create_org_project,
description: self.description || "",
includes_all_repositories: self.includes_all_project,
name: self.name,
permission: self.authorize,
units: self.team_units.pluck(:unit_type).map{|i| "repo.#{i}"}
}
end
end end

View File

@ -21,6 +21,7 @@
</label> </label>
<%= p.number_field :pinned_index,class: "form-control input-lg",placeholder: "精选等级",required: true%> <%= p.number_field :pinned_index,class: "form-control input-lg",placeholder: "精选等级",required: true%>
</div> </div>
<%if false%>
<div class="logo-item"> <div class="logo-item">
<% logo_img = @project_category.logo_url %> <% logo_img = @project_category.logo_url %>
<div class="logo-item-left mr-3 <%= logo_img ? 'has-img' : '' %>"> <div class="logo-item-left mr-3 <%= logo_img ? 'has-img' : '' %>">
@ -34,6 +35,7 @@
<div>尺寸高度38px以内宽等比例缩放</div> <div>尺寸高度38px以内宽等比例缩放</div>
</div> </div>
</div> </div>
<% end %>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button> <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>

View File

@ -2,7 +2,7 @@
<thead class="thead-light"> <thead class="thead-light">
<tr> <tr>
<th width="4%">序号</th> <th width="4%">序号</th>
<th width="8%" class="text-left">真实姓名</th> <th width="8%" class="text-left">昵称</th>
<th width="13%">邮件地址</th> <th width="13%">邮件地址</th>
<th width="10%">手机号码</th> <th width="10%">手机号码</th>
<th width="7%">角色</th> <th width="7%">角色</th>

View File

@ -223,6 +223,12 @@ zh-CN:
platform: '直播平台' platform: '直播平台'
live_time: '开播时间' live_time: '开播时间'
duration: '直播时长' duration: '直播时长'
license:
name: '许可证名称'
content: '许可证内容'
ignore:
name: 'git忽略文件名称'
content: 'git忽略文件内容'
close_pr: 合并请求 close_pr: 合并请求
roles: roles:
Developer: 开发者 Developer: 开发者

View File

@ -4,6 +4,35 @@ desc "初始化数据同步到gitea平台"
# 再同步项目及项目成员 # 再同步项目及项目成员
namespace :sync_data_to_gitea do namespace :sync_data_to_gitea do
desc "同步组织数据"
# 同步组织成员,并仅保留最高权限
task organizations: :environment do
Organization.includes(:organization_users, teams: [:team_users, :team_projects]).find_each do |org|
ActiveRecord::Base.transaction do
org.teams.each do |team|
if team.gtid.blank?
gteam = $gitea_client.post_orgs_teams_by_org(org.login, {body: team.to_gitea_hash.to_json}) rescue nil
team.update_attributes!({gtid: gteam["id"]}) unless gteam.nil?
end
team.team_users.each do |teamuser|
userlogin = teamuser&.user&.login
next if ($gitea_client.get_teams_members_by_id_username(team.gtid, userlogin) rescue nil)
tu_result = $gitea_client.put_teams_members_by_id_username(team.gtid, userlogin) rescue nil
raise ActiveRecord::Rollback if tu_result.nil?
end
team.team_projects.each do |teamp|
tp_result = $gitea_client.put_teams_repos_by_id_org_repo(team.gtid, org.login, teamp&.project.identifier) rescue nil
raise ActiveRecord::Rollback if tp_result.nil?
end
end
org.organization_users.each do |user|
next if ($gitea_client.get_orgs_members_by_org_username(org.login, user.login) rescue nil)
user.destroy!
end
end
end
end
desc "同步用户" desc "同步用户"
task users: :environment do task users: :environment do
users = User.where.not(mail: [nil, ""], type: 'Anonymous').or(User.where.not(login: [nil, ""])).distinct users = User.where.not(mail: [nil, ""], type: 'Anonymous').or(User.where.not(login: [nil, ""])).distinct