/
folders_controller.rb
87 lines (73 loc) · 2.48 KB
/
folders_controller.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
class FoldersController < ApplicationController
before_action :require_existing_folder, :only => [:show, :edit, :update, :destroy]
before_action :require_existing_target_folder, :only => [:new, :create]
before_action :require_folder_isnt_root_folder, :only => [:edit, :update, :destroy]
before_action :require_create_permission, :only => [:new, :create]
before_action :require_read_permission, :only => :show
before_action :require_update_permission, :only => [:edit, :update]
before_action :require_delete_permission, :only => :destroy
def index
redirect_to Folder.root
end
# Note: @folder is set in require_existing_folder
def show
end
# Note: @target_folder is set in require_existing_target_folder
def new
@folder = @target_folder.children.build
end
# Note: @target_folder is set in require_existing_target_folder
def create
@folder = @target_folder.children.build(permitted_params.folder)
if @folder.save
redirect_to @target_folder
else
render :action => 'new'
end
end
# Note: @folder is set in require_existing_folder
def edit
end
# Note: @folder is set in require_existing_folder
def update
if @folder.update_attributes(permitted_params.folder)
redirect_to edit_folder_url(@folder), :notice => t(:your_changes_were_saved)
else
render :action => 'edit'
end
end
# Note: @folder is set in require_existing_folder
def destroy
target_folder = @folder.parent
@folder.destroy
redirect_to target_folder
end
private
# get_folder_or_redirect is defined in ApplicationController
def require_existing_folder
@folder = get_folder_or_redirect(params[:id])
end
def require_folder_isnt_root_folder
if @folder.is_root?
redirect_to Folder.root, :alert => t(:cannot_delete_root_folder)
end
end
# Overrides require_delete_permission in ApplicationController
def require_delete_permission
unless @folder.is_root? || current_user.can_delete(@folder)
redirect_to @folder.parent, :alert => t(:no_permissions_for_this_type, :method => t(:delete), :type =>t(:this_folder))
else
require_delete_permissions_for(@folder.children)
end
end
def require_delete_permissions_for(folders)
folders.each do |folder|
unless current_user.can_delete(folder)
redirect_to @folder.parent, :alert => t(:no_delete_permissions_for_subfolder)
else
# Recursive...
require_delete_permissions_for(folder.children)
end
end
end
end