scinote-web/app/controllers/users/settings/teams_controller.rb

190 lines
4.4 KiB
Ruby
Raw Normal View History

2023-06-14 09:13:33 +08:00
# frozen_string_literal: true
module Users
module Settings
class TeamsController < ApplicationController
2019-11-12 18:26:18 +08:00
include ActionView::Helpers::TextHelper
include ActionView::Helpers::UrlHelper
include ApplicationHelper
include InputSanitizeHelper
2023-06-14 09:13:33 +08:00
before_action :load_user, only: %i(
index
datatable
new
create
show
users_datatable
)
before_action :load_team, only: %i(
show
users_datatable
name_html
description_html
update
destroy
)
2018-01-09 22:28:27 +08:00
before_action :check_create_team_permission,
only: %i(new create)
2023-06-14 09:13:33 +08:00
before_action :set_breadcrumbs_items, only: %i(index show)
layout 'fluid'
def index
@member_of = @user.teams.count
end
def datatable
respond_to do |format|
format.json do
render json: ::TeamsDatatable.new(view_context, @user)
end
end
end
def new
@new_team = Team.new
end
def create
@new_team = Team.new(create_params)
@new_team.created_by = @user
if @new_team.save
# Redirect to new team page
2019-11-24 06:20:38 +08:00
redirect_to team_path(@new_team)
else
render :new
end
end
def show
@user_team = UserTeam.find_by(user: @user, team: @team)
end
def users_datatable
respond_to do |format|
format.json do
render json: ::TeamUsersDatatable.new(view_context, @team, @user)
end
end
end
def name_html
render json: {
html: render_to_string(
partial: 'users/settings/teams/name_modal_body',
locals: { team: @team },
formats: :html
)
}
end
def description_html
render json: {
html: render_to_string(
partial: 'users/settings/teams/description_modal_body',
locals: { team: @team },
formats: :html
)
}
end
def update
respond_to do |format|
if @team.update(update_params)
@team.update(last_modified_by: current_user)
format.json do
render json: {
status: :ok,
2019-11-12 18:26:18 +08:00
html: custom_auto_link(
@team.tinymce_render(:description),
simple_format: false,
tags: %w(img),
team: current_team
)
}
end
else
format.json do
render json: @team.errors,
status: :unprocessable_entity
end
end
end
end
def destroy
@team.destroy
flash[:notice] = I18n.t(
'users.settings.teams.edit.modal_destroy_team.flash_success',
team: @team.name
)
# Redirect back to all teams page
redirect_to action: :index
end
def switch
team = current_user.teams.find_by(id: params[:team_id])
if team && current_user.update(current_team_id: team.id)
flash[:success] = t('users.settings.changed_team_flash',
team: current_user.current_team.name)
render json: { current_team: team.id }
else
render json: { message: t('users.settings.changed_team_error_flash') }, status: :unprocessable_entity
end
end
private
2018-01-09 22:28:27 +08:00
def check_create_team_permission
render_403 unless can_create_teams?
2018-01-09 22:28:27 +08:00
end
def load_user
@user = current_user
end
def load_team
2023-06-14 09:13:33 +08:00
@team = Team.find_by(id: params[:id])
render_403 unless can_manage_team?(@team)
end
def create_params
params.require(:team).permit(
:name,
:description
)
end
def update_params
params.require(:team).permit(
:name,
:description
)
end
2023-06-14 09:13:33 +08:00
def set_breadcrumbs_items
@breadcrumbs_items = []
@breadcrumbs_items.push({
label: t('breadcrumbs.teams'),
url: teams_path
})
if @team
@breadcrumbs_items.push({
label: @team.name,
url: team_path(@team)
})
end
end
end
end
end