2017-05-22 23:54:30 +08:00
|
|
|
class RepositoriesController < ApplicationController
|
2017-06-07 21:50:22 +08:00
|
|
|
before_action :load_vars, except: :repository_table_index
|
2017-05-22 23:54:30 +08:00
|
|
|
before_action :check_view_all_permissions, only: :index
|
2017-06-05 16:02:16 +08:00
|
|
|
before_action :check_edit_and_destroy_permissions, only:
|
|
|
|
%(destroy destroy_modal rename_modal update)
|
2017-06-06 17:10:55 +08:00
|
|
|
before_action :check_create_permissions, only:
|
|
|
|
%(create_new_modal create)
|
2017-05-22 23:54:30 +08:00
|
|
|
|
|
|
|
def index
|
|
|
|
render('repositories/index')
|
|
|
|
end
|
|
|
|
|
2017-06-06 21:50:43 +08:00
|
|
|
def create_modal
|
|
|
|
@repository = Repository.new
|
2017-05-24 15:29:44 +08:00
|
|
|
respond_to do |format|
|
2017-06-06 19:33:57 +08:00
|
|
|
format.json do
|
2017-05-24 15:29:44 +08:00
|
|
|
render json: {
|
2017-06-06 19:33:57 +08:00
|
|
|
html: render_to_string(
|
2017-06-06 21:50:43 +08:00
|
|
|
partial: 'create_repository_modal.html.erb'
|
2017-06-06 19:33:57 +08:00
|
|
|
)
|
2017-05-24 15:29:44 +08:00
|
|
|
}
|
2017-06-06 19:33:57 +08:00
|
|
|
end
|
2017-05-24 15:29:44 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def create
|
|
|
|
@repository = Repository.new(
|
|
|
|
team: @team,
|
|
|
|
created_by: current_user
|
|
|
|
)
|
|
|
|
@repository.assign_attributes(repository_params)
|
|
|
|
|
|
|
|
respond_to do |format|
|
2017-06-06 19:33:57 +08:00
|
|
|
format.json do
|
|
|
|
if @repository.save
|
|
|
|
flash[:success] = t('repositories.index.modal_create.success_flash',
|
|
|
|
name: @repository.name)
|
2017-06-06 17:10:55 +08:00
|
|
|
render json: { url: team_repositories_path(repository: @repository) },
|
2017-05-24 15:29:44 +08:00
|
|
|
status: :ok
|
2017-06-06 19:33:57 +08:00
|
|
|
else
|
2017-05-24 15:29:44 +08:00
|
|
|
render json: @repository.errors,
|
|
|
|
status: :unprocessable_entity
|
2017-06-06 19:33:57 +08:00
|
|
|
end
|
2017-05-24 15:29:44 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-05-30 21:11:28 +08:00
|
|
|
def destroy_modal
|
|
|
|
@repository = Repository.find(params[:repository_id])
|
|
|
|
respond_to do |format|
|
|
|
|
format.json do
|
|
|
|
render json: {
|
|
|
|
html: render_to_string(
|
|
|
|
partial: 'delete_repository_modal.html.erb'
|
|
|
|
)
|
|
|
|
}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-05-30 21:09:09 +08:00
|
|
|
def destroy
|
2017-06-02 23:38:46 +08:00
|
|
|
@repository = Repository.find(params[:id])
|
|
|
|
flash[:success] = t('repositories.index.delete_flash',
|
|
|
|
name: @repository.name)
|
|
|
|
@repository.destroy
|
2017-06-05 23:56:09 +08:00
|
|
|
redirect_to team_repositories_path
|
2017-06-01 01:24:38 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
def rename_modal
|
|
|
|
@repository = Repository.find(params[:repository_id])
|
|
|
|
respond_to do |format|
|
|
|
|
format.json do
|
|
|
|
render json: {
|
|
|
|
html: render_to_string(
|
|
|
|
partial: 'rename_repository_modal.html.erb'
|
|
|
|
)
|
|
|
|
}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def update
|
2017-06-02 23:38:46 +08:00
|
|
|
@repository = Repository.find(params[:id])
|
|
|
|
old_name = @repository.name
|
|
|
|
@repository.update_attributes(repository_params)
|
2017-05-30 21:09:09 +08:00
|
|
|
|
|
|
|
respond_to do |format|
|
2017-06-01 01:24:38 +08:00
|
|
|
format.json do
|
2017-06-02 23:38:46 +08:00
|
|
|
if @repository.save
|
2017-06-01 01:24:38 +08:00
|
|
|
flash[:success] = t('repositories.index.rename_flash',
|
2017-06-02 23:38:46 +08:00
|
|
|
old_name: old_name, new_name: @repository.name)
|
2017-06-03 01:08:51 +08:00
|
|
|
render json: {
|
2017-06-05 23:56:09 +08:00
|
|
|
url: team_repositories_path(repository: @repository)
|
2017-06-03 01:08:51 +08:00
|
|
|
}, status: :ok
|
2017-06-01 01:24:38 +08:00
|
|
|
else
|
2017-06-02 23:38:46 +08:00
|
|
|
render json: @repository.errors, status: :unprocessable_entity
|
2017-06-01 01:24:38 +08:00
|
|
|
end
|
|
|
|
end
|
2017-05-30 21:09:09 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-06-06 23:35:29 +08:00
|
|
|
# AJAX actions
|
|
|
|
def repository_table_index
|
|
|
|
@repository = Repository.find_by_id(params[:repository_id])
|
|
|
|
if @repository.nil? || !can_view_repository(@repository)
|
|
|
|
render_403
|
|
|
|
else
|
|
|
|
respond_to do |format|
|
|
|
|
format.html
|
|
|
|
format.json do
|
|
|
|
render json: ::RepositoryDatatable.new(view_context,
|
|
|
|
@repository,
|
|
|
|
nil,
|
|
|
|
current_user)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-05-22 23:54:30 +08:00
|
|
|
private
|
|
|
|
|
|
|
|
def load_vars
|
|
|
|
@team = Team.find_by_id(params[:team_id])
|
|
|
|
render_404 unless @team
|
2017-05-25 16:06:48 +08:00
|
|
|
@repositories = @team.repositories.order(created_at: :asc)
|
2017-05-22 23:54:30 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
def check_view_all_permissions
|
|
|
|
render_403 unless can_view_team_repositories(@team)
|
|
|
|
end
|
2017-06-01 01:24:38 +08:00
|
|
|
|
2017-05-24 15:29:44 +08:00
|
|
|
def check_create_permissions
|
2017-06-06 21:50:43 +08:00
|
|
|
render_403 unless can_create_repository(@team)
|
2017-05-24 15:29:44 +08:00
|
|
|
end
|
|
|
|
|
2017-06-05 16:02:16 +08:00
|
|
|
def check_edit_and_destroy_permissions
|
2017-06-05 23:25:05 +08:00
|
|
|
render_403 unless can_edit_and_destroy_repository(@repository)
|
2017-06-01 02:56:05 +08:00
|
|
|
end
|
|
|
|
|
2017-06-01 01:24:38 +08:00
|
|
|
def repository_params
|
|
|
|
params.require(:repository).permit(:name)
|
|
|
|
end
|
2017-05-22 23:54:30 +08:00
|
|
|
end
|