93 lines
2 KiB
Ruby
93 lines
2 KiB
Ruby
|
class Groups::LabelsController < Groups::ApplicationController
|
||
|
before_action :label, only: [:edit, :update, :destroy]
|
||
|
before_action :authorize_admin_labels!, only: [:new, :create, :edit, :update, :destroy]
|
||
|
before_action :save_previous_label_path, only: [:edit]
|
||
|
|
||
|
respond_to :html
|
||
|
|
||
|
def index
|
||
|
respond_to do |format|
|
||
|
format.html do
|
||
|
@labels = @group.labels.page(params[:page])
|
||
|
end
|
||
|
|
||
|
format.json do
|
||
|
available_labels = LabelsFinder.new(current_user, group_id: @group.id).execute
|
||
|
render json: available_labels.as_json(only: [:id, :title, :color])
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def new
|
||
|
@label = @group.labels.new
|
||
|
@previous_labels_path = previous_labels_path
|
||
|
end
|
||
|
|
||
|
def create
|
||
|
@label = @group.labels.create(label_params)
|
||
|
|
||
|
if @label.valid?
|
||
|
redirect_to group_labels_path(@group)
|
||
|
else
|
||
|
render :new
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def edit
|
||
|
@previous_labels_path = previous_labels_path
|
||
|
end
|
||
|
|
||
|
def update
|
||
|
if @label.update_attributes(label_params)
|
||
|
redirect_back_or_group_labels_path
|
||
|
else
|
||
|
render :edit
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def destroy
|
||
|
@label.destroy
|
||
|
|
||
|
respond_to do |format|
|
||
|
format.html do
|
||
|
redirect_to group_labels_path(@group), notice: 'Label was removed'
|
||
|
end
|
||
|
format.js
|
||
|
end
|
||
|
end
|
||
|
|
||
|
protected
|
||
|
|
||
|
def authorize_admin_labels!
|
||
|
return render_404 unless can?(current_user, :admin_label, @group)
|
||
|
end
|
||
|
|
||
|
def authorize_read_labels!
|
||
|
return render_404 unless can?(current_user, :read_label, @group)
|
||
|
end
|
||
|
|
||
|
def label
|
||
|
@label ||= @group.labels.find(params[:id])
|
||
|
end
|
||
|
|
||
|
def label_params
|
||
|
params.require(:label).permit(:title, :description, :color)
|
||
|
end
|
||
|
|
||
|
def redirect_back_or_group_labels_path(options = {})
|
||
|
redirect_to previous_labels_path, options
|
||
|
end
|
||
|
|
||
|
def previous_labels_path
|
||
|
session.fetch(:previous_labels_path, fallback_path)
|
||
|
end
|
||
|
|
||
|
def fallback_path
|
||
|
group_labels_path(@group)
|
||
|
end
|
||
|
|
||
|
def save_previous_label_path
|
||
|
session[:previous_labels_path] = URI(request.referer || '').path
|
||
|
end
|
||
|
end
|