tb_core 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/README.md +89 -0
- data/app/assets/javascripts/{spud/admin → admin}/application.js +1 -7
- data/app/assets/javascripts/admin/dashboard.js +9 -0
- data/app/assets/javascripts/admin/split_pane.js +138 -0
- data/app/assets/javascripts/admin/users.js +84 -0
- data/app/assets/stylesheets/{spud/admin/application.css → admin/application.css.scss} +14 -104
- data/app/assets/stylesheets/admin/login.css.scss +49 -0
- data/app/assets/stylesheets/admin/split_pane.css.scss +126 -0
- data/app/assets/stylesheets/admin/users.css.scss +9 -0
- data/app/controllers/{spud/admin → admin}/application_controller.rb +29 -30
- data/app/controllers/admin/dashboard_controller.rb +23 -0
- data/app/controllers/admin/password_resets_controller.rb +51 -0
- data/app/controllers/admin/roles_controller.rb +58 -0
- data/app/controllers/admin/settings_controller.rb +19 -0
- data/app/controllers/admin/setup_controller.rb +24 -0
- data/app/controllers/{spud/admin → admin}/user_sessions_controller.rb +8 -8
- data/app/controllers/admin/users_controller.rb +69 -0
- data/app/controllers/password_resets_controller.rb +52 -0
- data/app/controllers/sitemaps_controller.rb +8 -0
- data/app/controllers/spud/application_controller.rb +6 -20
- data/app/controllers/user_sessions_controller.rb +26 -0
- data/app/helpers/{spud/admin → admin}/application_helper.rb +1 -1
- data/app/helpers/admin/roles_helper.rb +2 -0
- data/app/helpers/spud/application_helper.rb +0 -7
- data/app/mailers/core_mailer.rb +9 -0
- data/app/models/spud_permission.rb +33 -0
- data/app/models/spud_role.rb +32 -0
- data/app/models/spud_role_permission.rb +9 -0
- data/app/models/spud_user.rb +79 -24
- data/app/models/spud_user_setting.rb +3 -3
- data/app/views/{spud/admin → admin}/dashboard/index.html.erb +1 -4
- data/app/views/admin/password_resets/index.html.erb +10 -0
- data/app/views/admin/password_resets/show.html.erb +15 -0
- data/app/views/admin/roles/_form.html.erb +33 -0
- data/app/views/admin/roles/edit.html.erb +2 -0
- data/app/views/admin/roles/index.html.erb +29 -0
- data/app/views/admin/roles/new.html.erb +2 -0
- data/app/views/{spud/admin → admin}/settings/edit.html.erb +6 -1
- data/app/views/admin/setup/new.html.erb +44 -0
- data/app/views/admin/user_sessions/new.html.erb +17 -0
- data/app/views/{spud/admin → admin}/users/_form.html.erb +20 -20
- data/app/views/admin/users/_index.html.erb +15 -0
- data/app/views/admin/users/edit.html.erb +3 -0
- data/app/views/admin/users/index.html.erb +34 -0
- data/app/views/admin/users/new.html.erb +3 -0
- data/app/views/admin/users/show.html.erb +28 -0
- data/app/views/layouts/admin/application.html.erb +68 -0
- data/app/views/layouts/{spud/admin → admin}/detail.html.erb +2 -2
- data/app/views/layouts/admin/login.html.erb +27 -0
- data/app/views/password_resets/index.html.erb +11 -0
- data/app/views/password_resets/show.html.erb +26 -0
- data/app/views/user_sessions/new.html.erb +25 -0
- data/config/routes.rb +22 -15
- data/db/migrate/20130620143010_create_spud_roles.rb +10 -0
- data/db/migrate/20130620143941_create_spud_permissions.rb +10 -0
- data/db/migrate/20130620151132_create_spud_role_permissions.rb +11 -0
- data/db/migrate/20130620163144_drop_spud_admin_permissions.rb +15 -0
- data/db/seeds.rb +3 -0
- data/lib/spud_core/belongs_to_app.rb +35 -48
- data/lib/spud_core/configuration.rb +5 -10
- data/lib/spud_core/engine.rb +31 -6
- data/lib/spud_core/exceptions.rb +7 -0
- data/lib/spud_core/searchable.rb +9 -9
- data/lib/spud_core/version.rb +3 -3
- data/spec/controllers/{spud/admin → admin}/application_controller_spec.rb +10 -6
- data/spec/controllers/{spud/admin → admin}/dashboard_controller_spec.rb +17 -29
- data/spec/controllers/{spud/admin → admin}/password_reset_controller_spec.rb +5 -5
- data/spec/controllers/admin/settings_controller_spec.rb +30 -0
- data/spec/controllers/admin/setup_controller_spec.rb +39 -0
- data/spec/controllers/admin/user_sessions_controller_spec.rb +52 -0
- data/spec/controllers/{spud/admin → admin}/users_controller_spec.rb +19 -35
- data/spec/controllers/{spud/sitemap_controllers_spec.rb → sitemap_controllers_spec.rb} +1 -1
- data/spec/dummy/config/database.yml +2 -2
- data/spec/dummy/db/schema.rb +23 -5
- data/spec/dummy/log/test.log +36118 -0
- data/spec/helpers/spud/admin/application_helper_spec.rb +1 -1
- data/spec/models/spud_role_spec.rb +46 -0
- data/spec/models/spud_user_spec.rb +0 -1
- metadata +101 -97
- data/README.markdown +0 -60
- data/app/assets/images/back_disabled.jpg +0 -0
- data/app/assets/images/back_enabled.jpg +0 -0
- data/app/assets/images/favicon.ico +0 -0
- data/app/assets/images/forward_disabled.jpg +0 -0
- data/app/assets/images/forward_enabled.jpg +0 -0
- data/app/assets/images/sort_asc.png +0 -0
- data/app/assets/images/sort_asc_disabled.png +0 -0
- data/app/assets/images/sort_both.png +0 -0
- data/app/assets/images/sort_desc.png +0 -0
- data/app/assets/images/sort_desc_disabled.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_flat_0_eeeeee_40x100.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_flat_55_ffffff_40x100.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_highlight-soft_100_f6f6f6_1x100.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_highlight-soft_25_0073ea_1x100.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_highlight-soft_50_dddddd_1x100.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-icons_0073ea_256x240.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-icons_454545_256x240.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-icons_666666_256x240.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-icons_ff0084_256x240.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-icons_ffffff_256x240.png +0 -0
- data/app/assets/images/spud/admin/spud_logo.png +0 -0
- data/app/assets/images/spud/admin/spud_logo@2x.png +0 -0
- data/app/assets/javascripts/spud/admin/dashboard.js +0 -80
- data/app/assets/javascripts/spud/admin/jquery.dataTables.min.js +0 -151
- data/app/assets/stylesheets/spud/forms.css +0 -108
- data/app/assets/stylesheets/spud/login/application.css +0 -302
- data/app/assets/stylesheets/spud/login.css +0 -58
- data/app/assets/stylesheets/spud/setup.css +0 -4
- data/app/assets/stylesheets/spud/sitemaps.css +0 -4
- data/app/assets/stylesheets/spud/user_sessions.css +0 -4
- data/app/assets/stylesheets/spud/users.css +0 -4
- data/app/controllers/spud/admin/dashboard_controller.rb +0 -34
- data/app/controllers/spud/admin/password_resets_controller.rb +0 -52
- data/app/controllers/spud/admin/settings_controller.rb +0 -27
- data/app/controllers/spud/admin/users_controller.rb +0 -109
- data/app/controllers/spud/setup_controller.rb +0 -21
- data/app/controllers/spud/sitemaps_controller.rb +0 -8
- data/app/helpers/spud/password_resets_helper.rb +0 -2
- data/app/mailers/spud/core_mailer.rb +0 -12
- data/app/models/spud_admin_permission.rb +0 -5
- data/app/views/layouts/spud/admin/application.html.erb +0 -73
- data/app/views/layouts/spud/login/application.html.erb +0 -17
- data/app/views/layouts/spud/setup.html.erb +0 -47
- data/app/views/spud/admin/password_resets/index.html.erb +0 -14
- data/app/views/spud/admin/password_resets/show.html.erb +0 -25
- data/app/views/spud/admin/user_sessions/new.html.erb +0 -27
- data/app/views/spud/admin/users/_edit.html.erb +0 -14
- data/app/views/spud/admin/users/_new.html.erb +0 -15
- data/app/views/spud/admin/users/edit.html.erb +0 -3
- data/app/views/spud/admin/users/index.html.erb +0 -42
- data/app/views/spud/admin/users/new.html.erb +0 -3
- data/app/views/spud/admin/users/show.html.erb +0 -12
- data/app/views/spud/setup/index.html.erb +0 -43
- data/spec/controllers/spud/admin/settings_controller_spec.rb +0 -55
- data/spec/controllers/spud/admin/user_sessions_controller_spec.rb +0 -51
- data/spec/controllers/spud/setup_controller_spec.rb +0 -56
- /data/app/assets/images/{spud/admin → admin}/down_arrow.gif +0 -0
- /data/app/assets/images/{spud/admin → admin}/up_arrow.gif +0 -0
- /data/app/assets/images/{spud/admin → admin}/users_thumb.png +0 -0
- /data/app/assets/javascripts/{spud/admin → admin}/date_picker.js +0 -0
- /data/app/assets/javascripts/{spud/admin → admin}/editor.js +0 -0
- /data/app/assets/javascripts/{spud/admin → admin}/preinit.js +0 -0
- /data/app/assets/javascripts/{spud/password_resets.js → admin/roles.js} +0 -0
- /data/app/assets/stylesheets/{spud/admin → admin}/jquery-ui.css +0 -0
- /data/app/assets/stylesheets/{spud/password_resets.css → admin/roles.css} +0 -0
- /data/app/views/{spud/admin → admin}/settings/_form.html.erb +0 -0
- /data/app/views/{spud/core_mailer → core_mailer}/forgot_password_notification.html.erb +0 -0
- /data/app/views/{spud/core_mailer → core_mailer}/forgot_password_notification.text.erb +0 -0
- /data/app/views/{spud/sitemaps → sitemaps}/show.xml.builder +0 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// Split Pane View
|
|
2
|
+
.split-pane{
|
|
3
|
+
border: 1px solid #eee;
|
|
4
|
+
overflow: hidden;
|
|
5
|
+
height: 640px;
|
|
6
|
+
margin: 0 0 20px;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// Left Side
|
|
10
|
+
.split-pane-left{
|
|
11
|
+
float: left;
|
|
12
|
+
width: 300px;
|
|
13
|
+
height: 600px;
|
|
14
|
+
position: relative;
|
|
15
|
+
}
|
|
16
|
+
.split-pane-left-content{
|
|
17
|
+
height: 560px;
|
|
18
|
+
overflow-y: scroll;
|
|
19
|
+
overflow-x: hidden;
|
|
20
|
+
}
|
|
21
|
+
.split-pane-left-content-empty{
|
|
22
|
+
padding: 10px;
|
|
23
|
+
margin: 0;
|
|
24
|
+
font-style: italic;
|
|
25
|
+
}
|
|
26
|
+
.split-pane-left-pagination{
|
|
27
|
+
margin: 0;
|
|
28
|
+
position: absolute;
|
|
29
|
+
bottom: 0;
|
|
30
|
+
left: 0;
|
|
31
|
+
height: 20px;
|
|
32
|
+
padding: 10px 0;
|
|
33
|
+
width: 100%;
|
|
34
|
+
border-top: 1px solid #eee;
|
|
35
|
+
background: #4C4C4C;
|
|
36
|
+
-webkit-touch-callout: none;
|
|
37
|
+
-webkit-user-select: none;
|
|
38
|
+
-khtml-user-select: none;
|
|
39
|
+
-moz-user-select: none;
|
|
40
|
+
-ms-user-select: none;
|
|
41
|
+
user-select: none;
|
|
42
|
+
.pagination{
|
|
43
|
+
text-align: center;
|
|
44
|
+
margin: 0;
|
|
45
|
+
color: white;
|
|
46
|
+
}
|
|
47
|
+
a{
|
|
48
|
+
color: white;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Items
|
|
53
|
+
.split-pane-item{
|
|
54
|
+
cursor: pointer;
|
|
55
|
+
border-bottom: 1px solid #eee;
|
|
56
|
+
:first-last{
|
|
57
|
+
border-bottom: 0;
|
|
58
|
+
}
|
|
59
|
+
padding: 10px;
|
|
60
|
+
-webkit-touch-callout: none;
|
|
61
|
+
-webkit-user-select: none;
|
|
62
|
+
-khtml-user-select: none;
|
|
63
|
+
-moz-user-select: none;
|
|
64
|
+
-ms-user-select: none;
|
|
65
|
+
user-select: none;
|
|
66
|
+
}
|
|
67
|
+
.split-pane-item-title{
|
|
68
|
+
display: block;
|
|
69
|
+
font-weight: bold;
|
|
70
|
+
font-size: 14px;
|
|
71
|
+
line-height: 14px;
|
|
72
|
+
}
|
|
73
|
+
.split-pane-item-meta{
|
|
74
|
+
font-style: italic;
|
|
75
|
+
font-size: 12px;
|
|
76
|
+
line-height: 12px;
|
|
77
|
+
}
|
|
78
|
+
.split-pane-item:hover{
|
|
79
|
+
background: #FFEDDF;
|
|
80
|
+
}
|
|
81
|
+
.split-pane-item-selected{
|
|
82
|
+
background: #f1f1f1;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Toolbars
|
|
86
|
+
.split-pane-toolbar{
|
|
87
|
+
height: 30px;
|
|
88
|
+
padding: 5px 10px;
|
|
89
|
+
background: #4C4C4C;
|
|
90
|
+
}
|
|
91
|
+
.split-pane-toolbar-left{
|
|
92
|
+
float: left;
|
|
93
|
+
max-width: 290px;
|
|
94
|
+
}
|
|
95
|
+
.split-pane-toolbar-right{
|
|
96
|
+
margin-left: 305px;
|
|
97
|
+
}
|
|
98
|
+
.split-pane-toolbar-title{
|
|
99
|
+
color: white;
|
|
100
|
+
font: bold 18px/30px sans-serif;
|
|
101
|
+
}
|
|
102
|
+
.split-pane-search-form{
|
|
103
|
+
margin: 0;
|
|
104
|
+
display: inline;
|
|
105
|
+
input{
|
|
106
|
+
margin: 0;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Right Side
|
|
111
|
+
.split-pane-right{
|
|
112
|
+
margin-left: 300px;
|
|
113
|
+
padding: 15px;
|
|
114
|
+
border-left: 1px solid #eee;
|
|
115
|
+
height: 570px;
|
|
116
|
+
overflow-y: scroll;
|
|
117
|
+
}
|
|
118
|
+
.split-pane-right h2{
|
|
119
|
+
margin-top: 0;
|
|
120
|
+
line-height: 1em;
|
|
121
|
+
}
|
|
122
|
+
.split-pane-right{
|
|
123
|
+
form, .form-actions{
|
|
124
|
+
margin-bottom: 0;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
class
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
class Admin::ApplicationController < Spud::ApplicationController
|
|
2
|
+
|
|
3
|
+
before_filter :require_user
|
|
4
|
+
before_filter :verify_site_mode
|
|
5
|
+
add_breadcrumb "Dashboard", :admin_root_path
|
|
6
|
+
layout 'admin/detail'
|
|
7
|
+
respond_to :html, :json, :xml, :js
|
|
8
|
+
unloadable
|
|
9
|
+
|
|
10
|
+
rescue_from Spud::AccessDeniedError do |exception|
|
|
11
|
+
redirect_to admin_root_path, :flash => {:error => exception.message}
|
|
12
|
+
end
|
|
9
13
|
|
|
10
14
|
def current_admin_site
|
|
11
15
|
if(session[:admin_site] == nil)
|
|
@@ -13,37 +17,32 @@ class Spud::Admin::ApplicationController < Spud::ApplicationController
|
|
|
13
17
|
else
|
|
14
18
|
return session[:admin_site]
|
|
15
19
|
end
|
|
16
|
-
|
|
17
20
|
end
|
|
18
21
|
|
|
19
22
|
private
|
|
20
23
|
|
|
21
|
-
def
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
def require_user
|
|
25
|
+
if current_user.blank?
|
|
26
|
+
flash[:notice] = "You must be logged in to access the requested page"
|
|
27
|
+
redirect_to admin_login_path
|
|
28
|
+
return false
|
|
29
|
+
elsif !current_user.has_admin_rights?
|
|
30
|
+
flash[:notice] = "You do not have permission to access the requested page"
|
|
31
|
+
redirect_to root_path
|
|
32
|
+
return false
|
|
33
|
+
else
|
|
34
|
+
return true
|
|
35
|
+
end
|
|
27
36
|
end
|
|
28
37
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
store_location
|
|
33
|
-
flash[:error] = "User must be an administrator to view this area."
|
|
34
|
-
redirect_to root_path
|
|
38
|
+
def verify_site_mode
|
|
39
|
+
if(session[:admin_site] == nil)
|
|
40
|
+
session[:admin_site] = 0
|
|
35
41
|
end
|
|
36
|
-
return true
|
|
37
|
-
end
|
|
38
42
|
|
|
39
|
-
|
|
40
|
-
if(session[:admin_site] == nil)
|
|
41
|
-
session[:admin_site] = 0
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
end
|
|
43
|
+
end
|
|
45
44
|
|
|
46
|
-
|
|
45
|
+
def multisite_caching
|
|
47
46
|
if Spud::Core.multisite_mode_enabled
|
|
48
47
|
@old_cache_directory = Rails.application.config.action_controller.page_cache_directory
|
|
49
48
|
if(@old_cache_directory.blank?)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
class Admin::DashboardController < Admin::ApplicationController
|
|
2
|
+
|
|
3
|
+
layout 'admin/application'
|
|
4
|
+
|
|
5
|
+
def index
|
|
6
|
+
@admin_applications = Spud::Core.admin_applications.select do |admin_application|
|
|
7
|
+
current_user.can_view_app?(admin_application)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def switch
|
|
12
|
+
if !params[:multisite_select].blank?
|
|
13
|
+
if Spud::Core.multisite_config.select{|p| p[:site_id].to_i == params[:multisite_select].to_i}.blank? == false
|
|
14
|
+
session[:admin_site] = params[:multisite_select].to_i
|
|
15
|
+
else
|
|
16
|
+
flash[:error] = "Site does not exist."
|
|
17
|
+
end
|
|
18
|
+
else
|
|
19
|
+
session[:admin_site] = 0
|
|
20
|
+
end
|
|
21
|
+
redirect_to(back_or_default(!request.referer.blank? ? request.referer : admin_root_path)) and return
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
class Admin::PasswordResetsController < Admin::ApplicationController
|
|
2
|
+
|
|
3
|
+
before_filter :load_user_using_perishable_token, :only => [:show, :update]
|
|
4
|
+
skip_before_filter :require_user
|
|
5
|
+
layout 'admin/login'
|
|
6
|
+
|
|
7
|
+
def index
|
|
8
|
+
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def create
|
|
12
|
+
@user = SpudUser.find_by_email(params[:email])
|
|
13
|
+
if @user
|
|
14
|
+
CoreMailer.forgot_password_notification(@user, admin_password_reset_url(@user.perishable_token)).deliver
|
|
15
|
+
flash[:notice] = "Instructions to reset your password have been emailed to you. " +
|
|
16
|
+
"Please check your email."
|
|
17
|
+
redirect_to admin_login_path
|
|
18
|
+
else
|
|
19
|
+
flash.now[:error] = "No user was found with that email address"
|
|
20
|
+
render 'index'
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def show
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def update
|
|
29
|
+
@user.password = params[:spud_user][:password]
|
|
30
|
+
@user.password_confirmation = params[:spud_user][:password_confirmation]
|
|
31
|
+
if @user.save
|
|
32
|
+
flash[:notice] = "Password successfully updated"
|
|
33
|
+
redirect_to admin_login_path
|
|
34
|
+
else
|
|
35
|
+
render 'show'
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
def load_user_using_perishable_token
|
|
42
|
+
@user = SpudUser.find_using_perishable_token(params[:id])
|
|
43
|
+
unless @user
|
|
44
|
+
flash[:notice] = "We're sorry, but we could not locate your account. " +
|
|
45
|
+
"If you are having issues try copying and pasting the URL " +
|
|
46
|
+
"from your email into your browser or restarting the " +
|
|
47
|
+
"reset password process."
|
|
48
|
+
redirect_to admin_login_path
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
class Admin::RolesController < Admin::ApplicationController
|
|
2
|
+
|
|
3
|
+
before_filter :get_record, :only => [:show, :edit, :update, :destroy]
|
|
4
|
+
respond_to :html, :json, :xml
|
|
5
|
+
belongs_to_spud_app :users
|
|
6
|
+
add_breadcrumb "Users", :admin_users_path
|
|
7
|
+
add_breadcrumb "Roles", :admin_roles_path
|
|
8
|
+
|
|
9
|
+
def index
|
|
10
|
+
@roles = SpudRole.all
|
|
11
|
+
respond_with @roles
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def show
|
|
15
|
+
respond_with @role
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def new
|
|
19
|
+
@role = SpudRole.new
|
|
20
|
+
respond_with @role
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def create
|
|
24
|
+
@role = SpudRole.new(params[:spud_role])
|
|
25
|
+
flash[:notice] = 'SpudRole created successfully' if @role.save
|
|
26
|
+
respond_with @role, :location => admin_roles_path
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def edit
|
|
30
|
+
respond_with @role
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def update
|
|
34
|
+
params[:spud_role][:permission_tags] ||= []
|
|
35
|
+
if @role.update_attributes(params[:spud_role])
|
|
36
|
+
flash[:notice] = 'SpudRole updated successfully'
|
|
37
|
+
end
|
|
38
|
+
respond_with @role, :location => admin_roles_path
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def destroy
|
|
42
|
+
flash[:notice] = 'SpudRole deleted successfully' if @role.destroy
|
|
43
|
+
respond_with @role, :location => admin_roles_path
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
private
|
|
47
|
+
|
|
48
|
+
def get_record
|
|
49
|
+
begin
|
|
50
|
+
@role = SpudRole.find(params[:id])
|
|
51
|
+
rescue ActiveRecord::RecordNotFound => e
|
|
52
|
+
flash[:error] = "Could not find the requested SpudRole"
|
|
53
|
+
redirect_to admin_roles_path
|
|
54
|
+
return false
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
class Admin::SettingsController < Admin::ApplicationController
|
|
2
|
+
|
|
3
|
+
add_breadcrumb "Dashboard", :admin_root_path
|
|
4
|
+
add_breadcrumb "Settings", :admin_settings_path
|
|
5
|
+
|
|
6
|
+
def edit
|
|
7
|
+
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def update
|
|
11
|
+
if @current_user.update_attributes(params[:spud_user].slice :login,:first_name,:last_name,:email,:password,:password_confirmation,:time_zone)
|
|
12
|
+
flash[:notice] = "User settings saved successfully."
|
|
13
|
+
redirect_to admin_root_path
|
|
14
|
+
else
|
|
15
|
+
render 'edit'
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
class Admin::SetupController < Admin::ApplicationController
|
|
2
|
+
|
|
3
|
+
skip_before_filter :require_user
|
|
4
|
+
|
|
5
|
+
def new
|
|
6
|
+
if SpudUser.count != 0
|
|
7
|
+
flash[:error] = "Access Denied! This wizard may only be executed when the database is empty."
|
|
8
|
+
redirect_to admin_login_path and return
|
|
9
|
+
else
|
|
10
|
+
@spud_user = SpudUser.new
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def create
|
|
15
|
+
@spud_user = SpudUser.new(params[:spud_user])
|
|
16
|
+
@spud_user.super_admin = true
|
|
17
|
+
if @spud_user.save
|
|
18
|
+
redirect_to admin_root_path
|
|
19
|
+
else
|
|
20
|
+
render 'new', :status => 422
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
class
|
|
1
|
+
class Admin::UserSessionsController < Admin::ApplicationController
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
layout '
|
|
3
|
+
skip_before_filter :require_user
|
|
4
|
+
layout 'admin/login'
|
|
5
5
|
|
|
6
6
|
def new
|
|
7
7
|
if current_user
|
|
8
|
-
redirect_to
|
|
8
|
+
redirect_to admin_root_path
|
|
9
9
|
elsif SpudUser.all.count == 0
|
|
10
10
|
logger.debug "NO USERS!"
|
|
11
|
-
redirect_to
|
|
11
|
+
redirect_to admin_setup_path and return
|
|
12
12
|
end
|
|
13
13
|
@user_session = SpudUserSession.new
|
|
14
14
|
end
|
|
@@ -17,7 +17,7 @@ class Spud::Admin::UserSessionsController < Spud::ApplicationController
|
|
|
17
17
|
@user_session = SpudUserSession.new(params[:spud_user_session])
|
|
18
18
|
if @user_session.save
|
|
19
19
|
flash[:notice] = "Login successful!"
|
|
20
|
-
redirect_to
|
|
20
|
+
redirect_to admin_root_path
|
|
21
21
|
else
|
|
22
22
|
render :action => :new
|
|
23
23
|
end
|
|
@@ -29,11 +29,11 @@ class Spud::Admin::UserSessionsController < Spud::ApplicationController
|
|
|
29
29
|
if !request.referer.blank?
|
|
30
30
|
session[:return_to] = request.referer
|
|
31
31
|
end
|
|
32
|
-
|
|
32
|
+
redirect_to admin_login_path
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
def legacy_redirect
|
|
36
|
-
redirect_to
|
|
36
|
+
redirect_to admin_login_path
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
class Admin::UsersController < Admin::ApplicationController
|
|
2
|
+
|
|
3
|
+
layout false
|
|
4
|
+
belongs_to_spud_app :users
|
|
5
|
+
add_breadcrumb "Users", :admin_users_path
|
|
6
|
+
before_filter :load_user, :only => [:edit, :update, :show, :destroy]
|
|
7
|
+
respond_to :html
|
|
8
|
+
|
|
9
|
+
def index
|
|
10
|
+
@users = SpudUser.order('login asc')
|
|
11
|
+
if params[:search]
|
|
12
|
+
@users = @users.where_name_like(params[:search])
|
|
13
|
+
end
|
|
14
|
+
@users = @users.paginate(:page => params[:page])
|
|
15
|
+
respond_with @users do |format|
|
|
16
|
+
format.html{
|
|
17
|
+
if request.xhr?
|
|
18
|
+
render :partial => 'index'
|
|
19
|
+
else
|
|
20
|
+
render 'index', :layout => 'admin/detail'
|
|
21
|
+
end
|
|
22
|
+
}
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def show
|
|
27
|
+
respond_with @user
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def new
|
|
31
|
+
@user = SpudUser.new
|
|
32
|
+
respond_with @user
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def create
|
|
36
|
+
@user = SpudUser.new(params[:spud_user], :as => :admin)
|
|
37
|
+
if @user.save
|
|
38
|
+
render 'show', :status => 200
|
|
39
|
+
else
|
|
40
|
+
render 'new', :status => 422
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def edit
|
|
45
|
+
respond_with @user
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def update
|
|
49
|
+
@user.update_attributes(params[:spud_user], :as => :admin)
|
|
50
|
+
respond_with @user, :location => admin_user_path(@user), :status => 200
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def destroy
|
|
54
|
+
@user.destroy
|
|
55
|
+
respond_with @user, :location => admin_users_path
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
private
|
|
59
|
+
|
|
60
|
+
def load_user
|
|
61
|
+
@user = SpudUser.where(:id => params[:id]).first
|
|
62
|
+
if @user.blank?
|
|
63
|
+
flash[:error] = "User not found!"
|
|
64
|
+
redirect_to admin_users_path and return false
|
|
65
|
+
end
|
|
66
|
+
return true
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
class PasswordResetsController < ApplicationController
|
|
2
|
+
|
|
3
|
+
before_filter :load_user_using_perishable_token, :only => [:show, :update]
|
|
4
|
+
skip_before_filter :require_user
|
|
5
|
+
respond_to :html
|
|
6
|
+
|
|
7
|
+
def index
|
|
8
|
+
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def create
|
|
12
|
+
@user = SpudUser.find_by_email(params[:email])
|
|
13
|
+
if @user
|
|
14
|
+
CoreMailer.forgot_password_notification(@user, password_reset_url(@user.perishable_token)).deliver
|
|
15
|
+
flash[:notice] = "Password reset instructions have been sent to your email"
|
|
16
|
+
redirect_to login_path
|
|
17
|
+
else
|
|
18
|
+
flash.now[:error] = "No user was found with that email address"
|
|
19
|
+
render 'index'
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def show
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def update
|
|
28
|
+
if params[:spud_user][:password].blank?
|
|
29
|
+
@user.errors.add(:password, 'must not be blank')
|
|
30
|
+
else
|
|
31
|
+
@user.password = params[:spud_user][:password]
|
|
32
|
+
@user.password_confirmation = params[:spud_user][:password_confirmation]
|
|
33
|
+
if @user.save()
|
|
34
|
+
flash[:notice] = "Password successfully updated"
|
|
35
|
+
redirect_back_or_default(root_path)
|
|
36
|
+
return
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
render 'show'
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
private
|
|
43
|
+
|
|
44
|
+
def load_user_using_perishable_token
|
|
45
|
+
@user = SpudUser.find_using_perishable_token(params[:id])
|
|
46
|
+
unless @user
|
|
47
|
+
flash[:error] = "Password reset token was invalid or expired"
|
|
48
|
+
redirect_to login_path
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
end
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
class Spud::ApplicationController < ActionController::Base
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
unloadable
|
|
4
|
+
protect_from_forgery
|
|
5
|
+
helper_method :current_user_session, :current_user
|
|
6
|
+
around_filter :set_time_zone
|
|
7
7
|
|
|
8
8
|
if Spud::Core.multisite_mode_enabled
|
|
9
9
|
before_filter :multisite_caching
|
|
@@ -27,30 +27,16 @@ private
|
|
|
27
27
|
@current_user = current_user_session && current_user_session.spud_user
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
def current_user_permissions
|
|
31
|
-
return @current_user_permissions if defined?(@current_user_permissions)
|
|
32
|
-
@current_user_permissions = current_user.spud_admin_permissions.where(:access => true).all
|
|
33
|
-
end
|
|
34
|
-
|
|
35
30
|
def require_user
|
|
36
31
|
unless current_user
|
|
37
32
|
store_location
|
|
38
|
-
flash[:notice] = "You must be logged in to access
|
|
39
|
-
redirect_to
|
|
33
|
+
flash[:notice] = "You must be logged in to access the requested page"
|
|
34
|
+
redirect_to login_path
|
|
40
35
|
return false
|
|
41
36
|
end
|
|
42
37
|
return true
|
|
43
38
|
end
|
|
44
39
|
|
|
45
|
-
def require_no_user
|
|
46
|
-
if current_user
|
|
47
|
-
store_location
|
|
48
|
-
flash[:notice] = "You must be logged out to access this page"
|
|
49
|
-
redirect_to root_path
|
|
50
|
-
return false
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
40
|
def store_location
|
|
55
41
|
session[:return_to] = request.url
|
|
56
42
|
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
class UserSessionsController < ApplicationController
|
|
2
|
+
|
|
3
|
+
skip_before_filter :require_user
|
|
4
|
+
respond_to :html
|
|
5
|
+
|
|
6
|
+
def new
|
|
7
|
+
@user_session = SpudUserSession.new
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def create
|
|
11
|
+
@user_session = SpudUserSession.new(params[:spud_user_session])
|
|
12
|
+
if @user_session.save
|
|
13
|
+
flash[:notice] = "Login successful!"
|
|
14
|
+
redirect_back_or_default(root_path)
|
|
15
|
+
else
|
|
16
|
+
render 'new'
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def destroy
|
|
21
|
+
current_user_session.destroy unless current_user_session.blank?
|
|
22
|
+
flash[:notice] = "Logout successful!"
|
|
23
|
+
redirect_to login_path
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
@@ -12,11 +12,4 @@ module Spud::ApplicationHelper
|
|
|
12
12
|
return config[:site_id] unless config.blank?
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
def sortable(column, title = nil)
|
|
16
|
-
title ||= column.titleize
|
|
17
|
-
css_class = column == sort_column ? "current #{sort_direction}" : nil
|
|
18
|
-
direction = column == sort_column && sort_direction == "asc" ? "desc" : "asc"
|
|
19
|
-
link_to title, {:sort => column, :direction => direction}, {:class => css_class}
|
|
20
|
-
end
|
|
21
|
-
|
|
22
15
|
end
|