90 lines
2.0 KiB
Ruby
90 lines
2.0 KiB
Ruby
class DirectoriesController < ApplicationController
|
|
before_action :set_project
|
|
before_action :build_directory, only: [:new, :create]
|
|
before_action :set_directory, except: [:new, :create]
|
|
|
|
layout "project"
|
|
|
|
breadcrumb -> { t("shared.files") }, -> { @project }, match: :exact
|
|
breadcrumb -> { @directory.name.titleize }, -> { [@project, @directory] }, match: :exact, except: [:new, :create]
|
|
|
|
def new
|
|
end
|
|
|
|
def create
|
|
@directory.attributes = directory_params_with_user
|
|
|
|
if @directory.save
|
|
log_create_analytics
|
|
redirect_to [@project, @directory], notice: "The folder has been created"
|
|
else
|
|
render :new
|
|
end
|
|
end
|
|
|
|
def show
|
|
@files = filtered_files.paginate(page: params[:page])
|
|
end
|
|
|
|
def edit
|
|
end
|
|
|
|
def update
|
|
if @directory.update(directory_params)
|
|
redirect_to [@project, @directory], notice: t(".notice")
|
|
else
|
|
render :edit
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
@directory.destroy
|
|
redirect_to @project, alert: t(".alert")
|
|
end
|
|
|
|
def new_file
|
|
end
|
|
|
|
def destroy_file
|
|
file = ActiveStorage::Attachment.find(params[:file_id])
|
|
file.purge
|
|
redirect_to [@project, @directory], alert: t(".alert")
|
|
end
|
|
|
|
private
|
|
|
|
def filtered_files
|
|
results = @directory.files
|
|
|
|
if params[:query].present?
|
|
results = @directory.search_files(params[:query])
|
|
end
|
|
|
|
results
|
|
end
|
|
|
|
def set_project
|
|
@project = policy_scope(Project).find(params[:project_id])
|
|
end
|
|
|
|
def set_directory
|
|
@directory = authorize policy_scope(Directory).find(params[:id])
|
|
end
|
|
|
|
def build_directory
|
|
@directory = authorize @project.directories.build
|
|
end
|
|
|
|
def directory_params_with_user
|
|
directory_params.merge(user: current_user)
|
|
end
|
|
|
|
def directory_params
|
|
params.require(:directory).permit(:name, :category, :permissions, files: [])
|
|
end
|
|
|
|
def log_create_analytics
|
|
TrackAnalyticsJob.perform_later(Current.user, Current.account, :track_create_custom_folder, user_agent: request.user_agent, user_ip: request.remote_ip)
|
|
end
|
|
end
|