forgeplus/app/controllers/projects_controller.rb

130 lines
4.0 KiB
Ruby
Raw Normal View History

2020-03-09 00:40:16 +08:00
class ProjectsController < ApplicationController
include ApplicationHelper
include OperateProjectAbilityAble
2020-06-29 16:05:22 +08:00
include ProjectsHelper
before_action :require_login, except: %i[index branches group_type_list simple show fork_users praise_users watch_users]
2020-08-13 17:15:54 +08:00
before_action :load_project, except: %i[index group_type_list migrate create]
2020-03-09 00:40:16 +08:00
before_action :authorizate_user_can_edit_project!, only: %i[update]
before_action :project_public?, only: %i[fork_users praise_users watch_users]
2020-03-09 00:40:16 +08:00
def index
2020-04-23 23:02:37 +08:00
scope = Projects::ListQuery.call(params)
2020-04-22 13:37:15 +08:00
2020-05-09 15:51:40 +08:00
@projects = kaminari_paginate(scope)
@total_count = @projects.total_count
2020-03-09 00:40:16 +08:00
end
def create
ActiveRecord::Base.transaction do
Projects::CreateForm.new(project_params).validate!
@project = Projects::CreateService.new(current_user, project_params).call
2020-03-09 00:40:16 +08:00
end
rescue Exception => e
uid_logger_error(e.message)
tip_exception(e.message)
end
def migrate
2020-06-23 11:57:24 +08:00
Projects::MigrateForm.new(mirror_params).validate!
@project = Projects::MigrateService.new(current_user, mirror_params).call
2020-03-09 00:40:16 +08:00
rescue Exception => e
uid_logger_error(e.message)
tip_exception(e.message)
end
def branches
2020-06-03 11:18:46 +08:00
@branches = Gitea::Repository::Branches::ListService.new(@project.owner, @project.identifier).call
2020-03-09 00:40:16 +08:00
end
def group_type_list
2020-04-22 10:00:47 +08:00
# if current_user&.logged?
2020-04-03 17:00:58 +08:00
# projects = Project.list_user_projects(current_user.id)
# else
# projects = Project.visible
# end
2020-04-22 10:00:47 +08:00
projects = Project.no_anomory_projects.visible
2020-09-11 18:32:42 +08:00
language_lists = projects.joins(:project_language).group("project_languages.name", "project_languages.id").size.keys.sort.to_h
@project_group_list = language_lists.delete_if { |k, v| k.blank? }
2020-03-09 00:40:16 +08:00
end
def update
ActiveRecord::Base.transaction do
# Projects::CreateForm.new(project_params).validate!
private = params[:private]
if [true, false].include? private
new_project_params = project_params.merge(is_public: !private)
Gitea::Repository::UpdateService.new(@project.owner, @project.repository.identifier, {private: private}).call
@project.repository.update_column(:hidden, private)
end
@project.update_attributes!(new_project_params)
end
rescue Exception => e
uid_logger_error(e.message)
tip_exception(e.message)
end
def show
end
def destroy
if current_user.admin? || @project.owner?(current_user)
ActiveRecord::Base.transaction do
Gitea::Repository::DeleteService.new(@project.owner, @project.identifier).call
@project.destroy!
render_ok
end
else
render_forbidden('你没有权限操作')
end
rescue Exception => e
uid_logger_error(e.message)
tip_exception(e.message)
2020-05-07 18:27:19 +08:00
end
2020-03-09 00:40:16 +08:00
def watch_users
2020-06-08 09:55:54 +08:00
watchers = @project.watchers.includes(:user).order("watchers.created_at desc").distinct
@watchers_count = watchers.size
@watchers = paginate(watchers)
end
2020-05-15 17:31:53 +08:00
def praise_users
2020-06-08 09:55:54 +08:00
praises = @project.praise_treads.includes(:user).order("praise_treads.created_at desc").distinct
@praises_count = praises.size
@praises = paginate(praises)
end
2020-06-03 11:18:46 +08:00
def fork_users
2020-06-08 09:55:54 +08:00
fork_users = @project.fork_users.includes(:user, :project).order("fork_users.created_at desc").distinct
@forks_count = fork_users.size
@fork_users = paginate(fork_users)
end
2020-06-29 16:05:22 +08:00
def simple
2020-08-11 23:20:04 +08:00
json_response(@project)
2020-06-29 16:05:22 +08:00
end
2020-08-12 10:38:45 +08:00
2020-03-09 00:40:16 +08:00
private
def project_params
params.permit(:user_id, :name, :description, :repository_name,
:project_category_id, :project_language_id, :license_id, :ignore_id)
end
def mirror_params
params.permit(:user_id, :name, :description, :repository_name, :is_mirror, :auth_username,
:auth_password, :project_category_id, :project_language_id, :clone_addr, :private)
2020-03-09 00:40:16 +08:00
end
2020-06-03 11:18:46 +08:00
def project_public?
2020-08-12 10:58:16 +08:00
return if @project.is_public?
if current_user
return if current_user.admin? || @project.member?(current_user.id)
render_forbidden('你没有权限访问.')
else
render_unauthorized('你还未登录.')
end
end
2020-03-09 00:40:16 +08:00
end