FIX merge develop branch

This commit is contained in:
jasder 2021-04-13 10:18:35 +08:00
commit 3af75e1a1c
20 changed files with 142 additions and 87 deletions

View File

@ -21,7 +21,7 @@ class Organizations::BaseController < ApplicationController
end end
def team_not_found_condition def team_not_found_condition
@team.team_users.where(user_id: current_user.id).blank? && !@organization.is_owner?(current_user.id) !current_user&.admin? && @team.team_users.where(user_id: current_user.id).blank? && !@organization.is_owner?(current_user.id)
end end
def user_mark def user_mark
@ -31,4 +31,4 @@ class Organizations::BaseController < ApplicationController
def project_mark def project_mark
params[:repo_name] || params[:id] params[:repo_name] || params[:id]
end end
end end

View File

@ -36,8 +36,10 @@ class Organizations::OrganizationsController < Organizations::BaseController
def update def update
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
login = @organization.login login = @organization.login
@organization.update!(login: organization_params[:name]) if organization_params[:name].present? @organization.login = organization_params[:name] if organization_params[:name].present?
@organization.organization_extension.update_attributes!(organization_params.except(:name)) @organization.nickname = organization_params[:nickname] if organization_params[:nickname].present?
@organization.save!
@organization.organization_extension.update_attributes!(organization_params.except(:name, :nickname))
Gitea::Organization::UpdateService.call(@organization.gitea_token, login, @organization.reload) Gitea::Organization::UpdateService.call(@organization.gitea_token, login, @organization.reload)
Util.write_file(@image, avatar_path(@organization)) if params[:image].present? Util.write_file(@image, avatar_path(@organization)) if params[:image].present?
end end
@ -82,7 +84,7 @@ class Organizations::OrganizationsController < Organizations::BaseController
def organization_params def organization_params
params.permit(:name, :description, :website, :location, params.permit(:name, :description, :website, :location,
:repo_admin_change_team_access, :visibility, :repo_admin_change_team_access, :visibility,
:max_repo_creation) :max_repo_creation, :nickname)
end end
def password def password

View File

@ -16,6 +16,7 @@ class ProjectsController < ApplicationController
menu.append(menu_hash_by_name("pulls")) if @project.has_menu_permission("pulls") menu.append(menu_hash_by_name("pulls")) if @project.has_menu_permission("pulls")
menu.append(menu_hash_by_name("devops")) if @project.has_menu_permission("devops") menu.append(menu_hash_by_name("devops")) if @project.has_menu_permission("devops")
menu.append(menu_hash_by_name("versions")) if @project.has_menu_permission("versions") menu.append(menu_hash_by_name("versions")) if @project.has_menu_permission("versions")
menu.append(menu_hash_by_name("resources")) if @project.has_menu_permission("resources")
menu.append(menu_hash_by_name("activity")) menu.append(menu_hash_by_name("activity"))
menu.append(menu_hash_by_name("setting")) if current_user.admin? || @project.manager?(current_user) menu.append(menu_hash_by_name("setting")) if current_user.admin? || @project.manager?(current_user)
@ -182,7 +183,7 @@ class ProjectsController < ApplicationController
private private
def project_params def project_params
params.permit(:user_id, :name, :description, :repository_name, :website, params.permit(:user_id, :name, :description, :repository_name, :website, :lesson_url,
:project_category_id, :project_language_id, :license_id, :ignore_id, :private) :project_category_id, :project_language_id, :license_id, :ignore_id, :private)
end end

View File

@ -4,7 +4,7 @@ class UsersController < ApplicationController
before_action :load_user, only: [:show, :homepage_info, :sync_token, :sync_gitea_pwd, :projects, :watch_users, :fan_users] before_action :load_user, only: [:show, :homepage_info, :sync_token, :sync_gitea_pwd, :projects, :watch_users, :fan_users]
before_action :check_user_exist, only: [:show, :homepage_info,:projects, :watch_users, :fan_users] before_action :check_user_exist, only: [:show, :homepage_info,:projects, :watch_users, :fan_users]
before_action :require_login, only: %i[me list] before_action :require_login, only: %i[me list sync_user_info]
before_action :connect_to_ci_db, only: [:get_user_info] before_action :connect_to_ci_db, only: [:get_user_info]
skip_before_action :check_sign, only: [:attachment_show] skip_before_action :check_sign, only: [:attachment_show]
@ -233,6 +233,26 @@ class UsersController < ApplicationController
render_ok render_ok
end end
def sync_user_info
user = User.find_by_login params[:login]
return render_forbidden unless user === current_user
sync_params = {
email: params[:email],
password: params[:password]
}
Users::UpdateInfoForm.new(sync_params.merge(login: params[:login])).validate!
interactor = Gitea::User::UpdateInteractor.call(user.login, sync_params)
if interactor.success?
user.update!(password: params[:password], mail: params[:email], status: User::STATUS_EDIT_INFO)
render_ok
else
render_error(interactor.error)
end
end
private private
def load_user def load_user
@user = User.find_by_login(params[:id]) || User.find_by(id: params[:id]) @user = User.find_by_login(params[:id]) || User.find_by(id: params[:id])

View File

@ -0,0 +1,9 @@
class Users::UpdateInfoForm
include ActiveModel::Model
attr_accessor :email, :password, :login
validates :email, presence: true, format: { with: CustomRegexp::EMAIL }
validates :password, presence: true
validates :login, presence: true
end

View File

@ -1,7 +1,6 @@
module RepositoriesHelper module RepositoriesHelper
def render_permission(user, project) def render_permission(user, project)
return "Admin" if user&.admin? return "Admin" if user&.admin?
return "Owner" if user === project.owner
project.get_premission(user) project.get_premission(user)
end end

View File

@ -78,8 +78,8 @@ class Organization < Owner
scope :with_visibility, ->(visibility) { joins(:organization_extension).where(organization_extensions: {visibility: visibility}) if visibility.present? } scope :with_visibility, ->(visibility) { joins(:organization_extension).where(organization_extensions: {visibility: visibility}) if visibility.present? }
def self.build(name, gitea_token=nil) def self.build(name, nickname, gitea_token=nil)
self.create!(login: name, gitea_token: gitea_token) self.create!(login: name, nickname: nickname, gitea_token: gitea_token)
end end
def can_create_project?(user_id) def can_create_project?(user_id)
@ -113,7 +113,9 @@ class Organization < Owner
end end
def real_name def real_name
login name = lastname + firstname
name = name.blank? ? (nickname.blank? ? login : nickname) : name
name.gsub(/\s+/, '').strip #6.11 -hs
end end
def show_real_name def show_real_name

View File

@ -1,67 +1,74 @@
# == Schema Information # == Schema Information
# #
# Table name: projects # Table name: projects
# #
# id :integer not null, primary key # id :integer not null, primary key
# name :string(255) default(""), not null # name :string(255) default(""), not null
# description :text(65535) # description :text(4294967295)
# homepage :string(255) default("") # homepage :string(255) default("")
# is_public :boolean default("1"), not null # is_public :boolean default("1"), not null
# parent_id :integer # parent_id :integer
# created_on :datetime # created_on :datetime
# updated_on :datetime # updated_on :datetime
# identifier :string(255) # identifier :string(255)
# status :integer default("1"), not null # status :integer default("1"), not null
# lft :integer # lft :integer
# rgt :integer # rgt :integer
# inherit_members :boolean default("0"), not null # inherit_members :boolean default("0"), not null
# project_type :integer default("0") # project_type :integer default("0")
# hidden_repo :boolean default("0"), not null # hidden_repo :boolean default("0"), not null
# attachmenttype :integer default("1") # attachmenttype :integer default("1")
# user_id :integer # user_id :integer
# dts_test :integer default("0") # dts_test :integer default("0")
# enterprise_name :string(255) # enterprise_name :string(255)
# organization_id :integer # organization_id :integer
# project_new_type :integer # project_new_type :integer
# gpid :integer # gpid :integer
# forked_from_project_id :integer # forked_from_project_id :integer
# forked_count :integer default("0") # forked_count :integer default("0")
# publish_resource :integer default("0") # publish_resource :integer default("0")
# visits :integer default("0") # visits :integer default("0")
# hot :integer default("0") # hot :integer default("0")
# invite_code :string(255) # invite_code :string(255)
# qrcode :string(255) # qrcode :string(255)
# qrcode_expiretime :integer default("0") # qrcode_expiretime :integer default("0")
# script :text(65535) # script :text(65535)
# training_status :integer default("0") # training_status :integer default("0")
# rep_identifier :string(255) # rep_identifier :string(255)
# project_category_id :integer # project_category_id :integer
# project_language_id :integer # project_language_id :integer
# license_id :integer # license_id :integer
# ignore_id :integer # ignore_id :integer
# praises_count :integer default("0") # praises_count :integer default("0")
# watchers_count :integer default("0") # watchers_count :integer default("0")
# issues_count :integer default("0") # issues_count :integer default("0")
# pull_requests_count :integer default("0") # pull_requests_count :integer default("0")
# # language :string(255)
# Indexes # versions_count :integer default("0")
# # issue_tags_count :integer default("0")
# index_projects_on_forked_from_project_id (forked_from_project_id) # closed_issues_count :integer default("0")
# index_projects_on_identifier (identifier) # open_devops :boolean default("0")
# index_projects_on_is_public (is_public) # gitea_webhook_id :integer
# index_projects_on_lft (lft) # open_devops_count :integer default("0")
# index_projects_on_name (name) # recommend :boolean default("0")
# index_projects_on_platform (platform) # platform :integer default("0")
# index_projects_on_project_type (project_type) # default_branch :string(255) default("master")
# index_projects_on_recommend (recommend) # website :string(255)
# index_projects_on_rgt (rgt) #
# index_projects_on_status (status) # Indexes
# index_projects_on_updated_on (updated_on) #
# # index_projects_on_forked_from_project_id (forked_from_project_id)
# index_projects_on_identifier (identifier)
# index_projects_on_is_public (is_public)
# index_projects_on_lft (lft)
# index_projects_on_name (name)
# index_projects_on_platform (platform)
# index_projects_on_project_type (project_type)
# index_projects_on_recommend (recommend)
# index_projects_on_rgt (rgt)
# index_projects_on_status (status)
# index_projects_on_updated_on (updated_on)
#
class Project < ApplicationRecord class Project < ApplicationRecord
include Matchable include Matchable
@ -231,10 +238,12 @@ class Project < ApplicationRecord
end end
def get_premission user def get_premission user
permission = "Reporter" return "Owner" if owner?(user)
member = members.find_by(user: user) return "Manager" if manager?(user)
return "Developer" if develper?(user)
return "Reporter" if reporter?(user)
member&.roles&.last&.name || permission return ""
end end
def fork_project def fork_project

View File

@ -16,7 +16,7 @@
class ProjectUnit < ApplicationRecord class ProjectUnit < ApplicationRecord
belongs_to :project belongs_to :project
enum unit_type: {code: 1, issues: 2, pulls: 3, devops: 4, versions: 5} enum unit_type: {code: 1, issues: 2, pulls: 3, devops: 4, versions: 5, resources: 6}
validates :unit_type, uniqueness: { scope: :project_id} validates :unit_type, uniqueness: { scope: :project_id}

View File

@ -25,7 +25,7 @@ class Ci::Builds::ListQuery < ApplicationQuery
scope scope
end end
builds = scope.by_branch(params[:branch]) if params[:branch] builds = builds.by_branch(params[:branch]) if params[:branch]
custom_sort(builds, params[:sort_by], params[:sort_direction]) custom_sort(builds, params[:sort_by], params[:sort_direction])
end end

View File

@ -47,7 +47,7 @@ class Organizations::CreateService < ApplicationService
end end
def create_org_and_extension def create_org_and_extension
@organization = Organization.build(params[:name], user.gitea_token) @organization = Organization.build(params[:name], params[:nickname], user.gitea_token)
org_extension = OrganizationExtension.build(organization.id, description, website, org_extension = OrganizationExtension.build(organization.id, description, website,
location, repo_admin_change_team_access, location, repo_admin_change_team_access,
visibility, max_repo_creation) visibility, max_repo_creation)

View File

@ -24,6 +24,8 @@ class Projects::ForkService < ApplicationService
new_repository.identifier = @project.identifier new_repository.identifier = @project.identifier
new_repository.save! new_repository.save!
ProjectUnit.init_types(clone_project.id)
result = Gitea::Repository::ForkService.new(@project.owner, @target_owner, @project.identifier, @organization).call result = Gitea::Repository::ForkService.new(@project.owner, @target_owner, @project.identifier, @organization).call
@project.update_column('forked_count', @project&.forked_count.to_i + 1) @project.update_column('forked_count', @project&.forked_count.to_i + 1)

View File

@ -1,5 +1,6 @@
json.id organization.id json.id organization.id
json.name organization.login json.name organization.login
json.nickname organization.nickname
json.description organization.description json.description organization.description
json.website organization.website json.website organization.website
json.location organization.location json.location organization.location

View File

@ -25,6 +25,7 @@ json.projects @projects do |project|
json.image_url render_educoder_avatar_url(project.project_educoder) json.image_url render_educoder_avatar_url(project.project_educoder)
else else
user = project.owner user = project.owner
json.type user.type
json.name user.try(:show_real_name) json.name user.try(:show_real_name)
json.login user.login json.login user.login
json.image_url render_avatar_url(user) json.image_url render_avatar_url(user)

View File

@ -5,4 +5,5 @@ json.description @project.description
json.project_category_id @project.project_category_id json.project_category_id @project.project_category_id
json.project_language_id @project.project_language_id json.project_language_id @project.project_language_id
json.is_public @project.is_public json.is_public @project.is_public
json.website @project.website json.website @project.website
json.lesson_url @project.lesson_url

View File

@ -1,11 +1,11 @@
json.author do json.author do
author = User.find_by(login: commit['Author']['Name']) author = User.find_by(login: commit['Author']['Name'])
json.partial! 'repositories/commit_author', locals: { user: author } json.partial! 'repositories/commit_author', locals: { user: author, name: commit['Committer']['Name'] }
end end
json.committer do json.committer do
author = User.find_by(login: commit['Committer']['Name']) author = User.find_by(login: commit['Committer']['Name'])
json.partial! 'repositories/commit_author', locals: { user: author } json.partial! 'repositories/commit_author', locals: { user: author, name: commit['Committer']['Name'] }
end end
json.timestamp render_unix_time(commit['Committer']['When']) json.timestamp render_unix_time(commit['Committer']['When'])
json.time_from_now time_from_now(commit['Committer']['When']) json.time_from_now time_from_now(commit['Committer']['When'])

View File

@ -1,5 +1,6 @@
json.content @project.content json.content @project.content
json.website @project.website json.website @project.website
json.lesson_url @project.lesson_url
if @result[:readme].blank? if @result[:readme].blank?
json.readme nil json.readme nil
else else

View File

@ -6,4 +6,5 @@ json.project_category_id @project.project_category_id
json.project_language_id @project.project_language_id json.project_language_id @project.project_language_id
json.private !@project.is_public json.private !@project.is_public
json.website @project.website json.website @project.website
json.project_units @project.project_units.pluck(:unit_type) json.project_units @project.project_units.pluck(:unit_type)
json.lesson_url @project.lesson_url

View File

@ -72,12 +72,12 @@ Rails.application.routes.draw do
end end
resources :statistic, only: [:index] do resources :statistic, only: [:index] do
collection do collection do
get :platform_profile get :platform_profile
get :platform_code get :platform_code
get :active_project_rank get :active_project_rank
get :active_developer_rank get :active_developer_rank
end end
end end
resources :sync_forge, only: [:create] do resources :sync_forge, only: [:create] do
collection do collection do
@ -218,6 +218,7 @@ Rails.application.routes.draw do
post :sync_salt post :sync_salt
get :trustie_projects get :trustie_projects
get :trustie_related_projects get :trustie_related_projects
post :sync_user_info
scope '/ci', module: :ci do scope '/ci', module: :ci do
scope do scope do

View File

@ -0,0 +1,5 @@
class AddLessonUrlToProjects < ActiveRecord::Migration[5.2]
def change
add_column :projects, :lesson_url, :string
end
end