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,33 @@
|
|
|
1
|
+
class SpudPermission
|
|
2
|
+
|
|
3
|
+
attr_accessor :tag, :name, :apps
|
|
4
|
+
|
|
5
|
+
def initialize(tag, name, apps=nil)
|
|
6
|
+
self.tag = tag
|
|
7
|
+
self.name = name
|
|
8
|
+
self.apps = apps || []
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Find a permission by tag
|
|
12
|
+
def self.find(tag)
|
|
13
|
+
return Spud::Core.permissions.find{ |p| p.tag == tag }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Returns hash of permissions, grouped by tag namespace
|
|
17
|
+
def self.grouped_by_tag
|
|
18
|
+
return Spud::Core.permissions.group_by do |p|
|
|
19
|
+
p.tag.split('.').first
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Returns array permissions sorted by tag
|
|
24
|
+
def self.sorted_by_tag
|
|
25
|
+
return Spud::Core.permissions.sort_by(&:tag)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Returns all permissions
|
|
29
|
+
def self.all
|
|
30
|
+
return Spud::Core.permissions
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
class SpudRole < ActiveRecord::Base
|
|
2
|
+
attr_accessible :name, :permission_tags
|
|
3
|
+
|
|
4
|
+
has_many :spud_role_permissions, :dependent => :destroy
|
|
5
|
+
has_many :users, :class_name => 'SpudUser'
|
|
6
|
+
|
|
7
|
+
validates :name, :presence => true, :uniqueness => true
|
|
8
|
+
|
|
9
|
+
def permissions
|
|
10
|
+
self.spud_role_permissions.collect(&:permission).reject(&:blank?)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def permissions=(permissions_list)
|
|
14
|
+
self.permission_tags = permissions_list.collect(&:tag)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def permission_tags=(tags)
|
|
18
|
+
self.spud_role_permissions.each do |role_permission|
|
|
19
|
+
if role_permission.permission.nil? || !tags.include?(role_permission.permission.tag)
|
|
20
|
+
role_permission.destroy()
|
|
21
|
+
else
|
|
22
|
+
tags.delete(role_permission.permission.tag)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
self.spud_role_permissions += tags.collect{ |tag| SpudRolePermission.new(:spud_permission_tag => tag) }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def permission_tags
|
|
29
|
+
return self.permissions.collect(&:tag)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
data/app/models/spud_user.rb
CHANGED
|
@@ -1,26 +1,81 @@
|
|
|
1
1
|
class SpudUser < ActiveRecord::Base
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
2
|
+
include Concerns::SpudAuthentication
|
|
3
|
+
|
|
4
|
+
belongs_to :role, :class_name => 'SpudRole', :foreign_key => 'spud_role_id'
|
|
5
|
+
has_many :spud_user_settings
|
|
6
|
+
|
|
7
|
+
attr_accessible :login,:email,:first_name,:last_name,:password,:password_confirmation,:password_salt,:last_login_at,:last_request_at,:last_login_ip,:failed_login_count,:current_login_at,:login_count,:persistence_token,:perishable_token,:single_access_token,:crypted_password, :current_login_ip, :created_at, :updated_at,:time_zone, :as => [:default, :admin]
|
|
8
|
+
attr_accessible :super_admin, :spud_role_id, :id, :as => :admin
|
|
9
|
+
|
|
10
|
+
def full_name
|
|
11
|
+
if first_name.blank? && last_name.blank?
|
|
12
|
+
return self.login
|
|
13
|
+
end
|
|
14
|
+
if self.first_name.blank?
|
|
15
|
+
return self.last_name
|
|
16
|
+
elsif self.last_name.blank?
|
|
17
|
+
return self.first_name
|
|
18
|
+
end
|
|
19
|
+
return "#{self.first_name} #{self.last_name}"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Returns true if user can view at least one dashboard app
|
|
23
|
+
def has_admin_rights?
|
|
24
|
+
if self.super_admin?
|
|
25
|
+
return true
|
|
26
|
+
else
|
|
27
|
+
return Spud::Core.admin_applications.find{ |app| self.can_view_app?(app) }.present?
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Returns true if the user can view a spud app based on it's key
|
|
32
|
+
def can_view_app?(admin_application)
|
|
33
|
+
if self.super_admin?
|
|
34
|
+
return true
|
|
35
|
+
else
|
|
36
|
+
key = admin_application[:key]
|
|
37
|
+
return self.permissions.find{ |p| p.apps.include?(key) }.present?
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Check if a user has a given list of permissions
|
|
42
|
+
#
|
|
43
|
+
# * if one tag is supplied, return true if the tag matches
|
|
44
|
+
# * if multiple tags are supplied, return true if ALL tags match
|
|
45
|
+
def has_permission?(*tags)
|
|
46
|
+
if self.super_admin?
|
|
47
|
+
return true
|
|
48
|
+
else
|
|
49
|
+
my_tags = self.permissions.collect(&:tag)
|
|
50
|
+
return tags.find{ |tag| !my_tags.include?(tag) }.blank?
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Check if a user has at least one out of a given list of permissions
|
|
55
|
+
#
|
|
56
|
+
# * if one tag is supplied, return true if the tag matches
|
|
57
|
+
# * if multiple tags are supplied, return true if ANY tag matches
|
|
58
|
+
def has_any_permission?(*tags)
|
|
59
|
+
if self.super_admin?
|
|
60
|
+
return true
|
|
61
|
+
else
|
|
62
|
+
return self.permissions.find{ |p| tags.include?(p.tag) }.present?
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Return a list of SpudPermission objects for the user's SpudRole
|
|
67
|
+
def permissions
|
|
68
|
+
if !self.role
|
|
69
|
+
return []
|
|
70
|
+
else
|
|
71
|
+
return self.role.permissions
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Returns an ActiveRecord::Relation performing a LIKE query against name columns
|
|
76
|
+
def self.where_name_like(string)
|
|
77
|
+
like = '%' + string + '%'
|
|
78
|
+
return self.where('login like ? or concat(`first_name`, " ", `last_name`) like ?', like, like)
|
|
79
|
+
end
|
|
80
|
+
|
|
26
81
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
class SpudUserSetting < ActiveRecord::Base
|
|
2
|
-
|
|
2
|
+
belongs_to :spud_user
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
validates :key,:presence=>true
|
|
5
|
+
validates_uniqueness_of :key,:scope => :spud_user_id
|
|
6
6
|
end
|
|
@@ -10,9 +10,6 @@
|
|
|
10
10
|
|
|
11
11
|
<%end%>
|
|
12
12
|
</div>
|
|
13
|
-
<div id="dashboard-editmode">
|
|
14
|
-
<a href="#" class="btn btn-primary" id="dashboard-editsave">Done Editing</a> <a id="dashboard-editcancel" href="#" class="btn">Cancel</a>
|
|
15
|
-
</div>
|
|
16
13
|
<script type="text/javascript">
|
|
17
|
-
$(document).ready(
|
|
14
|
+
$(document).ready(spud.admin.dashboard.init);
|
|
18
15
|
</script>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<% @login_title = 'Forgot Password' %>
|
|
2
|
+
<%= form_tag admin_password_resets_path do %>
|
|
3
|
+
<div class="login-form-row">
|
|
4
|
+
<%= label_tag :email %>
|
|
5
|
+
<%= text_field_tag :email %>
|
|
6
|
+
</div>
|
|
7
|
+
<div class="login-form-row">
|
|
8
|
+
<%= submit_tag "Send Reset Instructions", :class => 'btn' %> or <%= link_to 'Cancel', admin_login_path %>
|
|
9
|
+
</div>
|
|
10
|
+
<% end %>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<% @login_title = 'Password Reset' %>
|
|
2
|
+
<%= form_for @user, url: admin_password_reset_path(:id => @user.perishable_token) do |f| %>
|
|
3
|
+
<%= error_messages_for(f.object) %>
|
|
4
|
+
<div class="field-group">
|
|
5
|
+
<%= f.label :password %>
|
|
6
|
+
<%= f.password_field :password %>
|
|
7
|
+
</div>
|
|
8
|
+
<div class="field-group">
|
|
9
|
+
<%= f.label :password_confirmation %>
|
|
10
|
+
<%= f.password_field :password_confirmation %>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="field-group">
|
|
13
|
+
<%= f.submit "Reset Password", :class => 'btn' %>
|
|
14
|
+
</div>
|
|
15
|
+
<% end %>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<%= form_for @role, :url => path, :html => {:class => 'form-horizontal'} do |f| %>
|
|
2
|
+
|
|
3
|
+
<fieldset>
|
|
4
|
+
<div class="control-group">
|
|
5
|
+
<%= f.label :name, :class => 'control-label' %>
|
|
6
|
+
<div class="controls">
|
|
7
|
+
<%= f.text_field :name %>
|
|
8
|
+
</div>
|
|
9
|
+
</div>
|
|
10
|
+
</fieldset>
|
|
11
|
+
|
|
12
|
+
<fieldset>
|
|
13
|
+
<legend>Permissions</legend>
|
|
14
|
+
<div class="spud-admin-role-permissions">
|
|
15
|
+
<% SpudPermission.sorted_by_tag.each do |permission| %>
|
|
16
|
+
<div class="control-group">
|
|
17
|
+
<div class="controls">
|
|
18
|
+
<label>
|
|
19
|
+
<%= check_box_tag 'spud_role[permission_tags][]', permission.tag, @role.permissions.include?(permission) %>
|
|
20
|
+
<%= permission.name %>
|
|
21
|
+
</label>
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
24
|
+
<% end %>
|
|
25
|
+
</div>
|
|
26
|
+
</fieldset>
|
|
27
|
+
|
|
28
|
+
<div class="form-actions">
|
|
29
|
+
<%= f.submit "Save Role", :class=>"btn btn-primary", "data-loading-text" => "Saving..." %>
|
|
30
|
+
or <%=link_to "Cancel", admin_roles_path, :class => "btn" %>
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
<% end %>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<% @page_name = 'Roles' %>
|
|
2
|
+
|
|
3
|
+
<%= content_for :data_controls do %>
|
|
4
|
+
<%= link_to 'New Role', new_admin_role_path, :class => 'btn btn-primary' %>
|
|
5
|
+
<% end %>
|
|
6
|
+
|
|
7
|
+
<% content_for :detail do %>
|
|
8
|
+
<table class="admin-table data-table">
|
|
9
|
+
<thead>
|
|
10
|
+
<tr>
|
|
11
|
+
<th>Name</th>
|
|
12
|
+
<th># Users</th>
|
|
13
|
+
<th></th>
|
|
14
|
+
</tr>
|
|
15
|
+
</thead>
|
|
16
|
+
<tbody>
|
|
17
|
+
<% @roles.each do |role| %>
|
|
18
|
+
<tr>
|
|
19
|
+
<td><%= role.name %></td>
|
|
20
|
+
<td><%= role.users.count %></td>
|
|
21
|
+
<td align="right">
|
|
22
|
+
<%= link_to 'Edit', edit_admin_role_path(role), :class => 'btn btn-mini' %>
|
|
23
|
+
<%= link_to 'Delete', admin_role_path(role), :method => :delete, :confirm => 'Are you sure?', :class => 'btn btn-mini btn-danger' %>
|
|
24
|
+
</td>
|
|
25
|
+
</tr>
|
|
26
|
+
<% end %>
|
|
27
|
+
</tbody>
|
|
28
|
+
</table>
|
|
29
|
+
<% end %>
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
+
<%
|
|
2
|
+
@page_thumbnail = "admin/users_thumb.png"
|
|
3
|
+
@page_name = "Settings"
|
|
4
|
+
%>
|
|
5
|
+
|
|
1
6
|
<p>Fields marked with * are required and must be filled out.</p>
|
|
2
7
|
|
|
3
|
-
<%= form_for @current_user, :url =>
|
|
8
|
+
<%= form_for @current_user, :url => admin_settings_path, :method => :put, :html => {:class => "form-horizontal"} do |f| %>
|
|
4
9
|
<%= render :partial => "form", :locals => {:f => f} %>
|
|
5
10
|
<div class="form-actions">
|
|
6
11
|
<%= f.submit "Save Settings", :class=>"btn btn-primary"%> or <%=link_to "cancel",request.referer,:class => "btn" %>
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<%
|
|
2
|
+
@page_thumbnail = "spud/admin/users_thumb.png"
|
|
3
|
+
@page_name = "First Time Setup"
|
|
4
|
+
%>
|
|
5
|
+
|
|
6
|
+
<% content_for :detail do %>
|
|
7
|
+
<% form_for @spud_user, :url => admin_setup_path, :html => {:class => "form-horizontal"} do |f| %>
|
|
8
|
+
<%= error_messages_for f.object %>
|
|
9
|
+
<fieldset>
|
|
10
|
+
<legend>New Admin Account</legend>
|
|
11
|
+
<div class="control-group">
|
|
12
|
+
<%= f.label :login, "Login", :class => "control-label" %>
|
|
13
|
+
<div class="controls">
|
|
14
|
+
<%= f.text_field :login %>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="control-group">
|
|
18
|
+
<%= f.label :email, "Email", :class => "control-label" %>
|
|
19
|
+
<div class="controls">
|
|
20
|
+
<%= f.text_field :email %>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
<div class="control-group">
|
|
24
|
+
<%= f.label :password, "Password", :class => "control-label" %>
|
|
25
|
+
<div class="controls">
|
|
26
|
+
<%= f.password_field :password %>
|
|
27
|
+
<p class="help-block">Password must be at least 8 characters</p>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
<div class="control-group">
|
|
31
|
+
<%= f.label :password_confirmation, "Confirm", :class => "control-label" %>
|
|
32
|
+
<div class="controls">
|
|
33
|
+
<%= f.password_field :password_confirmation %>
|
|
34
|
+
<p class="help-block">Retype your password here.</p>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
</fieldset>
|
|
38
|
+
|
|
39
|
+
<div class="form-actions">
|
|
40
|
+
<%=submit_tag "Create Admin Account", :class=>"btn btn-primary"%>
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
<% end %>
|
|
44
|
+
<% end %>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<%= form_for @user_session, :url => admin_login_path do |f| %>
|
|
2
|
+
|
|
3
|
+
<%= error_messages_for(f.object) %>
|
|
4
|
+
|
|
5
|
+
<div class="login-form-row">
|
|
6
|
+
<%= f.label :login %>
|
|
7
|
+
<%= f.text_field :login %>
|
|
8
|
+
</div>
|
|
9
|
+
<div class="login-form-row">
|
|
10
|
+
<%= f.label :password %>
|
|
11
|
+
<%= f.password_field :password %>
|
|
12
|
+
</div>
|
|
13
|
+
<div class="login-form-row">
|
|
14
|
+
<%= f.submit "Login", :class => 'btn' %> or <%=link_to "Forgot Password?", admin_password_resets_path %>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<% end %>
|
|
@@ -60,31 +60,31 @@
|
|
|
60
60
|
</div>
|
|
61
61
|
|
|
62
62
|
</div>
|
|
63
|
-
<div class="control-group">
|
|
64
|
-
<%=f.label :super_admin,"Super Admin",:class=> "control-label"%>
|
|
65
|
-
<div class="controls">
|
|
66
|
-
<label class="checkbox inline">
|
|
67
|
-
<%=f.check_box :super_admin, :title => ""%>
|
|
68
|
-
The super administrator bypasses all permissions.
|
|
69
|
-
</label>
|
|
70
|
-
</div>
|
|
71
|
-
</div>
|
|
72
63
|
|
|
73
64
|
</fieldset>
|
|
74
65
|
<fieldset>
|
|
75
66
|
<legend>Permissions</legend>
|
|
76
|
-
<div class="control-group">
|
|
77
|
-
<label class="control-label">Access Control</label>
|
|
78
|
-
<div class="controls">
|
|
79
|
-
<%=f.fields_for :spud_admin_permissions do |builder|%>
|
|
80
67
|
|
|
81
|
-
|
|
68
|
+
<div class="control-group">
|
|
69
|
+
<%= f.label :super_admin, "Super Admin", :class=> "control-label" %>
|
|
70
|
+
<div class="controls">
|
|
82
71
|
<label class="checkbox inline">
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
72
|
+
<%= f.check_box :super_admin, :title => "" %>
|
|
73
|
+
The super administrator bypasses all permissions and roles.
|
|
74
|
+
</label>
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
|
|
78
|
+
<div class="control-group">
|
|
79
|
+
<%= f.label :role, 'Role', :class => 'control-label' %>
|
|
80
|
+
<div class="controls">
|
|
81
|
+
<%= f.select :spud_role_id, options_from_collection_for_select(SpudRole.all, :id, :name, f.object.spud_role_id), :include_blank => 'No Role' %>
|
|
88
82
|
</div>
|
|
89
|
-
|
|
83
|
+
</div>
|
|
84
|
+
|
|
90
85
|
</fieldset>
|
|
86
|
+
|
|
87
|
+
<div class="form-actions">
|
|
88
|
+
<%= f.submit "Save User", :class=>"btn btn-primary", "data-loading-text" => "Saving..." %>
|
|
89
|
+
or <%= link_to "Cancel", '#', :class => "btn admin-user-edit-cancel-btn" %>
|
|
90
|
+
</div>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<div class="split-pane-left-content">
|
|
2
|
+
<% if @users.blank? %>
|
|
3
|
+
<p class="split-pane-left-content-empty">No users found for your search.</p>
|
|
4
|
+
<% else %>
|
|
5
|
+
<% @users.each do |user| %>
|
|
6
|
+
<div class="split-pane-item" data-url="<%= admin_user_path(user) %>" data-id="<%= user.id %>">
|
|
7
|
+
<span class="split-pane-item-title"><%= user.full_name %></span>
|
|
8
|
+
<span class="split-pane-item-meta"><%= user.email %></span>
|
|
9
|
+
</div>
|
|
10
|
+
<% end %>
|
|
11
|
+
<% end %>
|
|
12
|
+
</div>
|
|
13
|
+
<div class="split-pane-left-pagination">
|
|
14
|
+
<%= will_paginate @users %>
|
|
15
|
+
</div>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<%= content_for :data_controls do %>
|
|
2
|
+
<%= link_to raw('<i class="icon-refresh"></i>'), '#', :class => 'btn split-pane-refresh-btn' %>
|
|
3
|
+
<%= link_to 'Roles', admin_roles_path, :class => 'btn' %>
|
|
4
|
+
<%= link_to "New User", new_admin_user_path, :class => "btn btn-primary admin-user-add-btn", :title => "New User" %>
|
|
5
|
+
<% end %>
|
|
6
|
+
|
|
7
|
+
<%= content_for :detail do %>
|
|
8
|
+
|
|
9
|
+
<div class="split-pane admin-users-split-pane">
|
|
10
|
+
<div class="split-pane-toolbar">
|
|
11
|
+
<div class="split-pane-toolbar-left">
|
|
12
|
+
<%= form_tag admin_users_path, :method => :get, :class => 'split-pane-search-form' do %>
|
|
13
|
+
<input type="search" name="search" id="search" results="5" autosave="spud-admin-user-search" value="<%= params[:search] %>"/>
|
|
14
|
+
<% end %>
|
|
15
|
+
<%= link_to 'X', admin_users_path, :class => 'btn btn-small split-pane-search-clear-btn' %>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="split-pane-toolbar-right">
|
|
18
|
+
<span class="split-pane-toolbar-title"></span>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="split-pane-left">
|
|
22
|
+
<%= render 'index' %>
|
|
23
|
+
</div>
|
|
24
|
+
<div class="split-pane-right">
|
|
25
|
+
<div class="split-pane-right-content">
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
<script>
|
|
31
|
+
$(document).ready(spud.admin.users.index);
|
|
32
|
+
</script>
|
|
33
|
+
|
|
34
|
+
<% end %>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<div class="admin-user-show" data-id="<%= @user.id %>">
|
|
2
|
+
<div class="admin-user-show-controls">
|
|
3
|
+
<%= link_to 'Edit', edit_admin_user_path(@user), :class => 'btn btn-small admin-user-edit-btn', :title => "Edit User - #{@user.full_name}" %>
|
|
4
|
+
<div class="btn-group">
|
|
5
|
+
<a class="btn dropdown-toggle btn-small btn-danger" data-toggle="dropdown" href="#">
|
|
6
|
+
Delete
|
|
7
|
+
</a>
|
|
8
|
+
<ul class="dropdown-menu pull-right">
|
|
9
|
+
<li><%= link_to 'Confirm', admin_user_path(@user), :class => 'admin-user-delete-btn' %></li>
|
|
10
|
+
</ul>
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
<h2><%= @user.full_name %></h2>
|
|
14
|
+
<dl>
|
|
15
|
+
<dt>Login</dt>
|
|
16
|
+
<dd><%= @user.login %></dd>
|
|
17
|
+
<dt>Email</dt>
|
|
18
|
+
<dd><%= mail_to @user.email %></dd>
|
|
19
|
+
<dt>Last Login</dt>
|
|
20
|
+
<dd><%= timestamp @user.last_login_at %></dd>
|
|
21
|
+
<dt>Created At</dt>
|
|
22
|
+
<dd><%= timestamp @user.created_at %></dd>
|
|
23
|
+
<dt>Role:</dt>
|
|
24
|
+
<dd><%= @user.role.blank? ? 'None' : @user.role.name %></dd>
|
|
25
|
+
<dt>Super Admin?<dt>
|
|
26
|
+
<dd><%= @user.super_admin? ? 'Yes' : 'No' %></dd>
|
|
27
|
+
</dl>
|
|
28
|
+
</div>
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title><%= Spud::Core.config.site_name %> Admin</title>
|
|
5
|
+
<%= stylesheet_link_tag *Spud::Core.config.admin_stylesheets %>
|
|
6
|
+
<%= javascript_include_tag *Spud::Core.config.admin_javascripts %>
|
|
7
|
+
<%= csrf_meta_tags %>
|
|
8
|
+
<%= yield :head %>
|
|
9
|
+
</head>
|
|
10
|
+
<body>
|
|
11
|
+
<div id="header" style="<%=header_style%>">
|
|
12
|
+
<%= link_to admin_root_path do %>
|
|
13
|
+
<h1><%= Spud::Core.config.site_name %> Admin</h1>
|
|
14
|
+
<% end %>
|
|
15
|
+
<% if current_user %>
|
|
16
|
+
<div id="user_meta">
|
|
17
|
+
<span class="greeting">Hello <%= @current_user.full_name %></span> |
|
|
18
|
+
<%=link_to "Settings", admin_settings_path%> |
|
|
19
|
+
<%=link_to "Logout",admin_logout_path %>
|
|
20
|
+
</div>
|
|
21
|
+
<% if Spud::Core.multisite_mode_enabled == true %>
|
|
22
|
+
<div id="multisite_switcher" class="right_floated">
|
|
23
|
+
<%=form_tag admin_switch_path do%>
|
|
24
|
+
<%=select_tag :multisite_select,options_for_select([[Spud::Core.site_name,nil]] + Spud::Core.multisite_config.collect{|c| [c[:site_name],c[:site_id]]},session[:admin_site])%>
|
|
25
|
+
<% end %>
|
|
26
|
+
</div>
|
|
27
|
+
<% end %>
|
|
28
|
+
<% end %>
|
|
29
|
+
</div>
|
|
30
|
+
<div id="breadcrumbs">
|
|
31
|
+
<%= render_breadcrumbs :separator => ' / ' %>
|
|
32
|
+
</div>
|
|
33
|
+
<div id="content">
|
|
34
|
+
<% if flash[:notice] %>
|
|
35
|
+
<div class="alert alert-success">
|
|
36
|
+
<a class="close" data-dismiss="alert">×</a>
|
|
37
|
+
<%= flash[:notice] %>
|
|
38
|
+
</div>
|
|
39
|
+
<% end %>
|
|
40
|
+
<% if flash[:warning] %>
|
|
41
|
+
<div class="alert alert-warning">
|
|
42
|
+
<a class="close" data-dismiss="alert">×</a>
|
|
43
|
+
<%= flash[:warning] %>
|
|
44
|
+
</div>
|
|
45
|
+
<% end %>
|
|
46
|
+
<% if flash[:error]%>
|
|
47
|
+
<div class="alert alert-error">
|
|
48
|
+
<a class="close" data-dismiss="alert">×</a>
|
|
49
|
+
<%= flash[:error] %>
|
|
50
|
+
</div>
|
|
51
|
+
<% end %>
|
|
52
|
+
<%= content_for?(:content) ? yield(:content) : yield %>
|
|
53
|
+
</div>
|
|
54
|
+
|
|
55
|
+
<div id="modal_window" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
|
56
|
+
<div class="modal-header">
|
|
57
|
+
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
|
58
|
+
<h3 class="modal-title"></h3>
|
|
59
|
+
</div>
|
|
60
|
+
<div class="modal-body"></div>
|
|
61
|
+
<div class="modal-footer modal-footer-default">
|
|
62
|
+
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
|
|
63
|
+
<button class="btn btn-primary form-submit">Save changes</button>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
|
|
67
|
+
</body>
|
|
68
|
+
</html>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<%=content_for :content do %>
|
|
2
|
-
<div
|
|
2
|
+
<div class="detail_wrapper">
|
|
3
3
|
<span class="data_controls">
|
|
4
4
|
<%=yield :data_controls%>
|
|
5
5
|
</span>
|
|
@@ -28,4 +28,4 @@
|
|
|
28
28
|
</div>
|
|
29
29
|
</div>
|
|
30
30
|
<%end%>
|
|
31
|
-
<%= render :template => 'layouts/
|
|
31
|
+
<%= render :template => 'layouts/admin/application' %>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title><%= Spud::Core.config.site_name %> Admin: Login</title>
|
|
5
|
+
<%= stylesheet_link_tag 'admin/application' %>
|
|
6
|
+
<%= csrf_meta_tags %>
|
|
7
|
+
</head>
|
|
8
|
+
<body>
|
|
9
|
+
|
|
10
|
+
<div class="login-container">
|
|
11
|
+
<div class="login-form">
|
|
12
|
+
<h1><%= @login_title || 'Login' %></h1>
|
|
13
|
+
<% if flash[:notice] %>
|
|
14
|
+
<div class="alert">
|
|
15
|
+
<%= flash[:notice] %>
|
|
16
|
+
</div>
|
|
17
|
+
<% elsif flash[:error] %>
|
|
18
|
+
<div class="alert alert-error">
|
|
19
|
+
<%= flash[:error] %>
|
|
20
|
+
</div>
|
|
21
|
+
<% end %>
|
|
22
|
+
<%= yield %>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
</body>
|
|
27
|
+
</html>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<h1>Password Reset</h1>
|
|
2
|
+
|
|
3
|
+
<%= form_tag password_resets_path, :class => 'spud-login-form' do %>
|
|
4
|
+
<div class="spud-login-form-row">
|
|
5
|
+
<%= label_tag :email %>
|
|
6
|
+
<%= text_field_tag :email %>
|
|
7
|
+
</div>
|
|
8
|
+
<div class="spud-login-form-row spud-login-form-row-actions">
|
|
9
|
+
<%= submit_tag 'Submit', :class => 'btn btn-primary' %> or <%= link_to 'Cancel', login_path %>
|
|
10
|
+
</div>
|
|
11
|
+
<% end %>
|