forked from Gitlink/forgeplus
Merge pull request '个人信息完善提醒处理和组织、用户详情接口合并处理' (#135) from yystopf/forgeplus:hh_url_change into develop
This commit is contained in:
commit
784521e58a
|
@ -246,6 +246,14 @@ class ApplicationController < ActionController::Base
|
|||
tip_exception(401, "请登录后再操作") unless User.current.logged?
|
||||
end
|
||||
|
||||
def require_profile_completed
|
||||
tip_exception(411, "请完善资料后再操作") unless User.current.profile_completed
|
||||
end
|
||||
|
||||
def require_user_profile_completed(user)
|
||||
tip_exception(412, "请用户完善资料后再操作") unless user.profile_completed
|
||||
end
|
||||
|
||||
# 异常提醒
|
||||
def tip_exception(status = -1, message)
|
||||
raise Educoder::TipException.new(status, message)
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
class ForksController < ApplicationController
|
||||
before_action :require_login
|
||||
before_action :require_profile_completed, only: [:create]
|
||||
before_action :load_project
|
||||
before_action :authenticate_project!, :authenticate_user!
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
class IssuesController < ApplicationController
|
||||
before_action :require_login, except: [:index, :show, :index_chosen]
|
||||
before_action :require_profile_completed, only: [:create]
|
||||
before_action :load_project
|
||||
before_action :set_user
|
||||
before_action :check_issue_permission
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
class JournalsController < ApplicationController
|
||||
before_action :require_login, except: [:index, :get_children_journals]
|
||||
before_action :require_profile_completed, only: [:create]
|
||||
before_action :set_issue
|
||||
before_action :check_issue_permission
|
||||
before_action :set_journal, only: [:destroy, :edit, :update]
|
||||
|
|
|
@ -2,6 +2,7 @@ class MembersController < ApplicationController
|
|||
before_action :require_login
|
||||
before_action :load_project
|
||||
before_action :find_user_with_id, only: %i[create remove change_role]
|
||||
before_action :check_user_profile_completed, only: [:create]
|
||||
before_action :operate!, except: %i[index]
|
||||
before_action :check_member_exists!, only: %i[create]
|
||||
before_action :check_member_not_exists!, only: %i[remove change_role]
|
||||
|
@ -61,4 +62,8 @@ class MembersController < ApplicationController
|
|||
def check_member_not_exists!
|
||||
return render_error("user_id为#{params[:user_id]}的用户还不是项目成员") unless member_exists?
|
||||
end
|
||||
|
||||
def check_user_profile_completed
|
||||
require_user_profile_completed(@user)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
class Organizations::OrganizationsController < Organizations::BaseController
|
||||
before_action :require_login, except: [:index, :show, :recommend]
|
||||
before_action :require_profile_completed, only: [:create]
|
||||
before_action :convert_image!, only: [:create, :update]
|
||||
before_action :load_organization, only: [:show, :update, :destroy]
|
||||
before_action :check_user_can_edit_org, only: [:update, :destroy]
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
class Organizations::TeamUsersController < Organizations::BaseController
|
||||
before_action :load_organization, :load_team
|
||||
before_action :load_operate_user, only: [:create, :destroy]
|
||||
before_action :check_user_profile_completed, only: [:create]
|
||||
before_action :load_team_user, only: [:destroy]
|
||||
before_action :check_user_can_edit_org, only: [:create, :destroy]
|
||||
|
||||
|
@ -83,4 +84,8 @@ class Organizations::TeamUsersController < Organizations::BaseController
|
|||
tip_exception("组织团队成员不存在") if @team_user.nil?
|
||||
end
|
||||
|
||||
def check_user_profile_completed
|
||||
require_user_profile_completed(@operate_user)
|
||||
end
|
||||
|
||||
end
|
|
@ -1,5 +1,5 @@
|
|||
class OwnersController < ApplicationController
|
||||
before_action :require_login
|
||||
before_action :require_login, only: [:index]
|
||||
|
||||
def index
|
||||
@owners = []
|
||||
|
@ -9,4 +9,53 @@ class OwnersController < ApplicationController
|
|||
teams: {can_create_org_project: true})
|
||||
.distinct
|
||||
end
|
||||
end
|
||||
|
||||
def show
|
||||
@owner = Owner.find_by(login: params[:id]) || Owner.find_by(id: params[:id])
|
||||
return render_not_found unless @owner.present?
|
||||
# 组织
|
||||
if @owner.is_a?(Organization)
|
||||
return render_forbidden("没有查看组织的权限") if org_limited_condition || org_privacy_condition
|
||||
@can_create_project = @owner.can_create_project?(current_user.id)
|
||||
@is_admin = current_user.admin? || @owner.is_owner?(current_user.id)
|
||||
@is_member = @owner.is_member?(current_user.id)
|
||||
# 用户
|
||||
else
|
||||
#待办事项,现在未做
|
||||
if User.current.admin? || User.current.login == @owner.login
|
||||
@waiting_applied_messages = @owner.applied_messages.waiting
|
||||
@common_applied_transfer_projects = AppliedTransferProject.where(owner_id: @owner.id).common + AppliedTransferProject.where(owner_id: Organization.joins(team_users: :team).where(team_users: {user_id: @owner.id}, teams: {authorize: %w(admin owner)} )).common
|
||||
@common_applied_projects = AppliedProject.where(project_id: @owner.full_admin_projects).common
|
||||
@undo_events = @waiting_applied_messages.size + @common_applied_transfer_projects.size + @common_applied_projects.size
|
||||
else
|
||||
@waiting_applied_messages = AppliedMessage.none
|
||||
@common_applied_transfer_projects = AppliedTransferProject.none
|
||||
@common_applied_projects = AppliedProject.none
|
||||
@undo_events = 0
|
||||
end
|
||||
#用户的组织数量
|
||||
# @user_composes_count = @user.composes.size
|
||||
@user_composes_count = 0
|
||||
user_organizations = User.current.logged? ? @owner.organizations.with_visibility(%w(common limited)) + @owner.organizations.with_visibility("privacy").joins(:team_users).where(team_users: {user_id: current_user.id}) : @owner.organizations.with_visibility("common")
|
||||
@user_org_count = user_organizations.size
|
||||
normal_projects = Project.members_projects(@owner.id).to_sql
|
||||
org_projects = Project.joins(team_projects: [team: :team_users]).where(team_users: {user_id: @owner.id}).to_sql
|
||||
projects = Project.from("( #{ normal_projects} UNION #{ org_projects } ) AS projects").distinct
|
||||
user_projects = User.current.logged? && (User.current.admin? || User.current.login == @owner.login) ? projects : projects.visible
|
||||
@projects_common_count = user_projects.common.size
|
||||
@projects_mirrior_count = user_projects.mirror.size
|
||||
@projects_sync_mirrior_count = user_projects.sync_mirror.size
|
||||
puts @owner.as_json
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def org_limited_condition
|
||||
@owner.organization_extension.limited? && !current_user.logged?
|
||||
end
|
||||
|
||||
def org_privacy_condition
|
||||
return false if current_user.admin?
|
||||
@owner.organization_extension.privacy? && @owner.organization_users.where(user_id: current_user.id).blank?
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
class PraiseTreadController < ApplicationController
|
||||
before_action :require_login, except: %i[index]
|
||||
before_action :require_profile_completed, only: [:like]
|
||||
before_action :find_project_with_id
|
||||
|
||||
def index
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
class Projects::AppliedTransferProjectsController < Projects::BaseController
|
||||
before_action :check_auth
|
||||
before_action :check_user_profile_completed, only: [:create]
|
||||
|
||||
def organizations
|
||||
@organizations = Organization.includes(:organization_extension).joins(team_users: :team).where(team_users: {user_id: current_user.id}, teams: {authorize: %w(admin owner)})
|
||||
|
@ -23,4 +24,10 @@ class Projects::AppliedTransferProjectsController < Projects::BaseController
|
|||
def check_auth
|
||||
return render_forbidden unless current_user.admin? ||@project.owner?(current_user)
|
||||
end
|
||||
|
||||
def check_user_profile_completed
|
||||
@owner = Owner.find_by(login: params[:owner_name])
|
||||
return if @owner.is_a?(Organization)
|
||||
require_user_profile_completed(@owner)
|
||||
end
|
||||
end
|
|
@ -1,4 +1,5 @@
|
|||
class Projects::ProjectAppliesController < Projects::BaseController
|
||||
before_action :require_profile_completed, only: [:create]
|
||||
def create
|
||||
project = Projects::ApplyJoinService.call(current_user, create_params)
|
||||
render_ok(project_id: project.id)
|
||||
|
|
|
@ -5,6 +5,7 @@ class ProjectsController < ApplicationController
|
|||
include Acceleratorable
|
||||
|
||||
before_action :require_login, except: %i[index branches group_type_list simple show fork_users praise_users watch_users recommend about menu_list]
|
||||
before_action :require_profile_completed, only: [:create, :migrate]
|
||||
before_action :load_repository, except: %i[index group_type_list migrate create recommend]
|
||||
before_action :authorizate_user_can_edit_project!, only: %i[update]
|
||||
before_action :project_public?, only: %i[fork_users praise_users watch_users]
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
class PullRequestsController < ApplicationController
|
||||
before_action :require_login, except: [:index, :show, :files, :commits]
|
||||
before_action :require_profile_completed, only: [:create]
|
||||
before_action :load_repository
|
||||
before_action :find_pull_request, except: [:index, :new, :create, :check_can_merge,:get_branches,:create_merge_infos, :files, :commits]
|
||||
before_action :load_pull_request, only: [:files, :commits]
|
||||
|
|
|
@ -74,7 +74,7 @@ class UsersController < ApplicationController
|
|||
end
|
||||
|
||||
def update
|
||||
return render_not_found unless @user = User.find_by_id(params[:id]) || User.find_by(login: params[:id])
|
||||
return render_not_found unless @user = User.find_by(login: params[:id]) || User.find_by_id(params[:id])
|
||||
return render_forbidden unless User.current.logged? && (current_user&.admin? || current_user.id == @user.id)
|
||||
Util.write_file(@image, avatar_path(@user)) if user_params[:image].present?
|
||||
@user.attributes = user_params.except(:image)
|
||||
|
|
|
@ -7,7 +7,7 @@ class VersionReleasesController < ApplicationController
|
|||
def index
|
||||
version_releases = Gitea::Versions::ListService.new(@user.gitea_token, @user.try(:login), @repository.try(:identifier)).call
|
||||
@version_releases = version_releases
|
||||
@user_permission = current_user.present? && (current_user == @user || current_user.admin?)
|
||||
@user_permission = current_user.present? && (@repository.project.all_developers.include?(current_user) || current_user.admin?)
|
||||
@forge_releases = @repository.version_releases.select(:id,:version_gid, :created_at).includes(:attachments)
|
||||
end
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
class VersionsController < ApplicationController
|
||||
before_action :require_login, except: [:index, :show]
|
||||
before_action :require_profile_completed, only: [:create]
|
||||
before_action :load_repository
|
||||
before_action :check_issue_permission, except: [:show, :index]
|
||||
before_action :set_version, only: [:edit, :update, :destroy, :show,:update_status]
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
class WatchersController < ApplicationController
|
||||
before_action :require_login, except: %i[index]
|
||||
before_action :require_profile_completed, only: [:follow]
|
||||
# before_action :find_project_with_id
|
||||
before_action :get_target
|
||||
|
||||
|
|
|
@ -186,7 +186,7 @@ class User < Owner
|
|||
:show_email, :show_location, :show_department,
|
||||
:technical_title, :province, :city, :custom_department, to: :user_extension, allow_nil: true
|
||||
|
||||
before_save :update_hashed_password, :set_lastname
|
||||
before_save :update_hashed_password, :set_lastname, :set_profile_completed
|
||||
after_create do
|
||||
SyncTrustieJob.perform_later("user", 1) if allow_sync_to_trustie?
|
||||
end
|
||||
|
@ -783,6 +783,10 @@ class User < Owner
|
|||
def set_lastname
|
||||
self.lastname = self.nickname if changes[:nickname].present?
|
||||
end
|
||||
|
||||
def set_profile_completed
|
||||
self.profile_completed = self.nickname.present? && self.gender.present? && self.mail.present? && self.custom_department.present?
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@ class Projects::ApplyTransferService < ApplicationService
|
|||
raise Error, '仓库标识不正确' if @project.identifier != params[:identifier]
|
||||
raise Error, '该仓库正在迁移' if @project.is_transfering
|
||||
raise Error, '新拥有者不存在' unless @owner.present?
|
||||
raise Error, '新拥有者资料不完善' unless @owner.profile_completed
|
||||
raise Error, '新拥有者已经存在同名仓库!' if Project.where(user_id: @owner.id, identifier: params[:identifier]).present?
|
||||
raise Error, '未拥有转移权限' unless is_permit_owner
|
||||
end
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
json.type @owner.type
|
||||
if @owner.is_a?(Organization)
|
||||
json.partial! "organizations/organizations/detail", organization: @owner
|
||||
json.can_create_project @can_create_project
|
||||
json.is_admin @is_admin
|
||||
json.is_member @is_member
|
||||
else
|
||||
json.partial! 'users/user', locals: { user: @owner }
|
||||
json.undo_messages @waiting_applied_messages.size
|
||||
json.undo_transfer_projects @common_applied_transfer_projects.size
|
||||
json.undo_join_projects @common_applied_projects.size
|
||||
json.undo_events @undo_events
|
||||
json.user_composes_count @user_composes_count
|
||||
json.user_org_count @user_org_count
|
||||
json.common_projects_count @projects_common_count
|
||||
json.mirror_projects_count @projects_mirrior_count
|
||||
json.sync_mirror_projects_count @projects_sync_mirrior_count
|
||||
json.created_time format_time(@owner.created_on)
|
||||
json.email @owner.show_email ? @owner.mail : nil
|
||||
json.province @owner.show_location ? @owner.province : nil
|
||||
json.city @owner.show_location ? @owner.city : nil
|
||||
json.custom_department @owner.show_department ? @owner.custom_department : nil
|
||||
json.description @owner.description
|
||||
end
|
|
@ -1,20 +1,20 @@
|
|||
json.user_id user.id
|
||||
json.name user.full_name
|
||||
json.username @user.full_name
|
||||
json.real_name @user.real_name
|
||||
json.username user.full_name
|
||||
json.real_name user.real_name
|
||||
json.grade user.grade
|
||||
json.gender @user.gender
|
||||
json.login @user.login
|
||||
json.user_id @user.id
|
||||
json.image_url url_to_avatar(@user)
|
||||
json.admin @user.admin?
|
||||
json.user_identity @user.identity
|
||||
json.is_watch current_user&.watched?(@user)
|
||||
json.watched_count @user.fan_count #粉丝
|
||||
json.watching_count @user.follow_count #关注数
|
||||
json.created_time format_time(@user.created_on)
|
||||
json.email @user.show_email ? @user.mail : nil
|
||||
json.province @user.show_location ? @user.province : nil
|
||||
json.city @user.show_location ? @user.city : nil
|
||||
json.custom_department @user.show_department ? @user.custom_department : nil
|
||||
json.description @user.description
|
||||
json.gender user.gender
|
||||
json.login user.login
|
||||
json.user_id user.id
|
||||
json.image_url url_to_avatar(user)
|
||||
json.admin user.admin?
|
||||
json.user_identity user.identity
|
||||
json.is_watch current_user&.watched?(user)
|
||||
json.watched_count user.fan_count #粉丝
|
||||
json.watching_count user.follow_count #关注数
|
||||
json.created_time format_time(user.created_on)
|
||||
json.email user.show_email ? user.mail : nil
|
||||
json.province user.show_location ? user.province : nil
|
||||
json.city user.show_location ? user.city : nil
|
||||
json.custom_department user.show_department ? user.custom_department : nil
|
||||
json.description user.description
|
|
@ -4,5 +4,6 @@ json.array! users do |user|
|
|||
json.login user.login
|
||||
json.user_id user.id
|
||||
json.image_url url_to_avatar(user)
|
||||
json.profile_completed user.profile_completed
|
||||
end
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
json.username @user.full_name
|
||||
json.real_name @user.real_name
|
||||
json.nickname @user.nickname
|
||||
json.gender @user.gender
|
||||
json.login @user.login
|
||||
json.user_id @user.id
|
||||
|
|
|
@ -107,7 +107,7 @@ Rails.application.routes.draw do
|
|||
put 'commons/unhidden', to: 'commons#unhidden'
|
||||
delete 'commons/delete', to: 'commons#delete'
|
||||
|
||||
resources :owners, only: [:index]
|
||||
resources :owners, only: [:index, :show]
|
||||
|
||||
scope module: :organizations do
|
||||
resources :organizations, except: [:edit, :new] do
|
||||
|
|
Loading…
Reference in New Issue