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.
Files changed (153) hide show
  1. checksums.yaml +8 -8
  2. data/README.md +89 -0
  3. data/app/assets/javascripts/{spud/admin → admin}/application.js +1 -7
  4. data/app/assets/javascripts/admin/dashboard.js +9 -0
  5. data/app/assets/javascripts/admin/split_pane.js +138 -0
  6. data/app/assets/javascripts/admin/users.js +84 -0
  7. data/app/assets/stylesheets/{spud/admin/application.css → admin/application.css.scss} +14 -104
  8. data/app/assets/stylesheets/admin/login.css.scss +49 -0
  9. data/app/assets/stylesheets/admin/split_pane.css.scss +126 -0
  10. data/app/assets/stylesheets/admin/users.css.scss +9 -0
  11. data/app/controllers/{spud/admin → admin}/application_controller.rb +29 -30
  12. data/app/controllers/admin/dashboard_controller.rb +23 -0
  13. data/app/controllers/admin/password_resets_controller.rb +51 -0
  14. data/app/controllers/admin/roles_controller.rb +58 -0
  15. data/app/controllers/admin/settings_controller.rb +19 -0
  16. data/app/controllers/admin/setup_controller.rb +24 -0
  17. data/app/controllers/{spud/admin → admin}/user_sessions_controller.rb +8 -8
  18. data/app/controllers/admin/users_controller.rb +69 -0
  19. data/app/controllers/password_resets_controller.rb +52 -0
  20. data/app/controllers/sitemaps_controller.rb +8 -0
  21. data/app/controllers/spud/application_controller.rb +6 -20
  22. data/app/controllers/user_sessions_controller.rb +26 -0
  23. data/app/helpers/{spud/admin → admin}/application_helper.rb +1 -1
  24. data/app/helpers/admin/roles_helper.rb +2 -0
  25. data/app/helpers/spud/application_helper.rb +0 -7
  26. data/app/mailers/core_mailer.rb +9 -0
  27. data/app/models/spud_permission.rb +33 -0
  28. data/app/models/spud_role.rb +32 -0
  29. data/app/models/spud_role_permission.rb +9 -0
  30. data/app/models/spud_user.rb +79 -24
  31. data/app/models/spud_user_setting.rb +3 -3
  32. data/app/views/{spud/admin → admin}/dashboard/index.html.erb +1 -4
  33. data/app/views/admin/password_resets/index.html.erb +10 -0
  34. data/app/views/admin/password_resets/show.html.erb +15 -0
  35. data/app/views/admin/roles/_form.html.erb +33 -0
  36. data/app/views/admin/roles/edit.html.erb +2 -0
  37. data/app/views/admin/roles/index.html.erb +29 -0
  38. data/app/views/admin/roles/new.html.erb +2 -0
  39. data/app/views/{spud/admin → admin}/settings/edit.html.erb +6 -1
  40. data/app/views/admin/setup/new.html.erb +44 -0
  41. data/app/views/admin/user_sessions/new.html.erb +17 -0
  42. data/app/views/{spud/admin → admin}/users/_form.html.erb +20 -20
  43. data/app/views/admin/users/_index.html.erb +15 -0
  44. data/app/views/admin/users/edit.html.erb +3 -0
  45. data/app/views/admin/users/index.html.erb +34 -0
  46. data/app/views/admin/users/new.html.erb +3 -0
  47. data/app/views/admin/users/show.html.erb +28 -0
  48. data/app/views/layouts/admin/application.html.erb +68 -0
  49. data/app/views/layouts/{spud/admin → admin}/detail.html.erb +2 -2
  50. data/app/views/layouts/admin/login.html.erb +27 -0
  51. data/app/views/password_resets/index.html.erb +11 -0
  52. data/app/views/password_resets/show.html.erb +26 -0
  53. data/app/views/user_sessions/new.html.erb +25 -0
  54. data/config/routes.rb +22 -15
  55. data/db/migrate/20130620143010_create_spud_roles.rb +10 -0
  56. data/db/migrate/20130620143941_create_spud_permissions.rb +10 -0
  57. data/db/migrate/20130620151132_create_spud_role_permissions.rb +11 -0
  58. data/db/migrate/20130620163144_drop_spud_admin_permissions.rb +15 -0
  59. data/db/seeds.rb +3 -0
  60. data/lib/spud_core/belongs_to_app.rb +35 -48
  61. data/lib/spud_core/configuration.rb +5 -10
  62. data/lib/spud_core/engine.rb +31 -6
  63. data/lib/spud_core/exceptions.rb +7 -0
  64. data/lib/spud_core/searchable.rb +9 -9
  65. data/lib/spud_core/version.rb +3 -3
  66. data/spec/controllers/{spud/admin → admin}/application_controller_spec.rb +10 -6
  67. data/spec/controllers/{spud/admin → admin}/dashboard_controller_spec.rb +17 -29
  68. data/spec/controllers/{spud/admin → admin}/password_reset_controller_spec.rb +5 -5
  69. data/spec/controllers/admin/settings_controller_spec.rb +30 -0
  70. data/spec/controllers/admin/setup_controller_spec.rb +39 -0
  71. data/spec/controllers/admin/user_sessions_controller_spec.rb +52 -0
  72. data/spec/controllers/{spud/admin → admin}/users_controller_spec.rb +19 -35
  73. data/spec/controllers/{spud/sitemap_controllers_spec.rb → sitemap_controllers_spec.rb} +1 -1
  74. data/spec/dummy/config/database.yml +2 -2
  75. data/spec/dummy/db/schema.rb +23 -5
  76. data/spec/dummy/log/test.log +36118 -0
  77. data/spec/helpers/spud/admin/application_helper_spec.rb +1 -1
  78. data/spec/models/spud_role_spec.rb +46 -0
  79. data/spec/models/spud_user_spec.rb +0 -1
  80. metadata +101 -97
  81. data/README.markdown +0 -60
  82. data/app/assets/images/back_disabled.jpg +0 -0
  83. data/app/assets/images/back_enabled.jpg +0 -0
  84. data/app/assets/images/favicon.ico +0 -0
  85. data/app/assets/images/forward_disabled.jpg +0 -0
  86. data/app/assets/images/forward_enabled.jpg +0 -0
  87. data/app/assets/images/sort_asc.png +0 -0
  88. data/app/assets/images/sort_asc_disabled.png +0 -0
  89. data/app/assets/images/sort_both.png +0 -0
  90. data/app/assets/images/sort_desc.png +0 -0
  91. data/app/assets/images/sort_desc_disabled.png +0 -0
  92. data/app/assets/images/spud/admin/flick/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  93. data/app/assets/images/spud/admin/flick/ui-bg_flat_0_eeeeee_40x100.png +0 -0
  94. data/app/assets/images/spud/admin/flick/ui-bg_flat_55_ffffff_40x100.png +0 -0
  95. data/app/assets/images/spud/admin/flick/ui-bg_flat_75_ffffff_40x100.png +0 -0
  96. data/app/assets/images/spud/admin/flick/ui-bg_glass_65_ffffff_1x400.png +0 -0
  97. data/app/assets/images/spud/admin/flick/ui-bg_highlight-soft_100_f6f6f6_1x100.png +0 -0
  98. data/app/assets/images/spud/admin/flick/ui-bg_highlight-soft_25_0073ea_1x100.png +0 -0
  99. data/app/assets/images/spud/admin/flick/ui-bg_highlight-soft_50_dddddd_1x100.png +0 -0
  100. data/app/assets/images/spud/admin/flick/ui-icons_0073ea_256x240.png +0 -0
  101. data/app/assets/images/spud/admin/flick/ui-icons_454545_256x240.png +0 -0
  102. data/app/assets/images/spud/admin/flick/ui-icons_666666_256x240.png +0 -0
  103. data/app/assets/images/spud/admin/flick/ui-icons_ff0084_256x240.png +0 -0
  104. data/app/assets/images/spud/admin/flick/ui-icons_ffffff_256x240.png +0 -0
  105. data/app/assets/images/spud/admin/spud_logo.png +0 -0
  106. data/app/assets/images/spud/admin/spud_logo@2x.png +0 -0
  107. data/app/assets/javascripts/spud/admin/dashboard.js +0 -80
  108. data/app/assets/javascripts/spud/admin/jquery.dataTables.min.js +0 -151
  109. data/app/assets/stylesheets/spud/forms.css +0 -108
  110. data/app/assets/stylesheets/spud/login/application.css +0 -302
  111. data/app/assets/stylesheets/spud/login.css +0 -58
  112. data/app/assets/stylesheets/spud/setup.css +0 -4
  113. data/app/assets/stylesheets/spud/sitemaps.css +0 -4
  114. data/app/assets/stylesheets/spud/user_sessions.css +0 -4
  115. data/app/assets/stylesheets/spud/users.css +0 -4
  116. data/app/controllers/spud/admin/dashboard_controller.rb +0 -34
  117. data/app/controllers/spud/admin/password_resets_controller.rb +0 -52
  118. data/app/controllers/spud/admin/settings_controller.rb +0 -27
  119. data/app/controllers/spud/admin/users_controller.rb +0 -109
  120. data/app/controllers/spud/setup_controller.rb +0 -21
  121. data/app/controllers/spud/sitemaps_controller.rb +0 -8
  122. data/app/helpers/spud/password_resets_helper.rb +0 -2
  123. data/app/mailers/spud/core_mailer.rb +0 -12
  124. data/app/models/spud_admin_permission.rb +0 -5
  125. data/app/views/layouts/spud/admin/application.html.erb +0 -73
  126. data/app/views/layouts/spud/login/application.html.erb +0 -17
  127. data/app/views/layouts/spud/setup.html.erb +0 -47
  128. data/app/views/spud/admin/password_resets/index.html.erb +0 -14
  129. data/app/views/spud/admin/password_resets/show.html.erb +0 -25
  130. data/app/views/spud/admin/user_sessions/new.html.erb +0 -27
  131. data/app/views/spud/admin/users/_edit.html.erb +0 -14
  132. data/app/views/spud/admin/users/_new.html.erb +0 -15
  133. data/app/views/spud/admin/users/edit.html.erb +0 -3
  134. data/app/views/spud/admin/users/index.html.erb +0 -42
  135. data/app/views/spud/admin/users/new.html.erb +0 -3
  136. data/app/views/spud/admin/users/show.html.erb +0 -12
  137. data/app/views/spud/setup/index.html.erb +0 -43
  138. data/spec/controllers/spud/admin/settings_controller_spec.rb +0 -55
  139. data/spec/controllers/spud/admin/user_sessions_controller_spec.rb +0 -51
  140. data/spec/controllers/spud/setup_controller_spec.rb +0 -56
  141. /data/app/assets/images/{spud/admin → admin}/down_arrow.gif +0 -0
  142. /data/app/assets/images/{spud/admin → admin}/up_arrow.gif +0 -0
  143. /data/app/assets/images/{spud/admin → admin}/users_thumb.png +0 -0
  144. /data/app/assets/javascripts/{spud/admin → admin}/date_picker.js +0 -0
  145. /data/app/assets/javascripts/{spud/admin → admin}/editor.js +0 -0
  146. /data/app/assets/javascripts/{spud/admin → admin}/preinit.js +0 -0
  147. /data/app/assets/javascripts/{spud/password_resets.js → admin/roles.js} +0 -0
  148. /data/app/assets/stylesheets/{spud/admin → admin}/jquery-ui.css +0 -0
  149. /data/app/assets/stylesheets/{spud/password_resets.css → admin/roles.css} +0 -0
  150. /data/app/views/{spud/admin → admin}/settings/_form.html.erb +0 -0
  151. /data/app/views/{spud/core_mailer → core_mailer}/forgot_password_notification.html.erb +0 -0
  152. /data/app/views/{spud/core_mailer → core_mailer}/forgot_password_notification.text.erb +0 -0
  153. /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
@@ -0,0 +1,9 @@
1
+ class SpudRolePermission < ActiveRecord::Base
2
+ attr_accessible :spud_permission_tag, :spud_role_id, :tag
3
+ belongs_to :spud_role
4
+
5
+ def permission
6
+ SpudPermission.find(self.spud_permission_tag)
7
+ end
8
+
9
+ end
@@ -1,26 +1,81 @@
1
1
  class SpudUser < ActiveRecord::Base
2
- include Concerns::SpudAuthentication
3
-
4
- has_many :spud_admin_permissions,:foreign_key => :user_id
5
- has_many :spud_user_settings
6
- accepts_nested_attributes_for :spud_admin_permissions, :allow_destroy => true
7
-
8
- 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,:spud_admin_permissions_attributes,:time_zone, :as => [:default, :admin]
9
- attr_accessible :super_admin, :id, :as => :admin
10
-
11
- def has_admin_rights?
12
- return self.super_admin || self.spud_admin_permissions.count > 0
13
- end
14
-
15
- def full_name
16
- if first_name.blank? && last_name.blank?
17
- return self.login
18
- end
19
- if self.first_name.blank?
20
- return self.last_name
21
- elsif self.last_name.blank?
22
- return self.first_name
23
- end
24
- return "#{self.first_name} #{self.last_name}"
25
- end
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
- belongs_to :spud_user
2
+ belongs_to :spud_user
3
3
 
4
- validates :key,:presence=>true
5
- validates_uniqueness_of :key,:scope => :spud_user_id
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>&nbsp;<a id="dashboard-editcancel" href="#" class="btn">Cancel</a>
15
- </div>
16
13
  <script type="text/javascript">
17
- $(document).ready(Spud.Admin.Dashboard.init);
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,2 @@
1
+ <% @page_name = 'Edit Role' %>
2
+ <%= render :partial => 'form', :locals => {:path => admin_role_path(@role)} %>
@@ -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 %>
@@ -0,0 +1,2 @@
1
+ <% @page_name = 'New Role' %>
2
+ <%= render :partial => 'form', :locals => {:path => admin_roles_path} %>
@@ -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 => spud_admin_settings_path, :method => :put, :html => {:class => "form-horizontal"} do |f| %>
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
- <%=builder.hidden_field :name%>
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
- <%=builder.check_box :access%><%=builder.object.name%>&nbsp;&nbsp;
85
- </label>
86
-
87
- <%end%>
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
- </div>
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,3 @@
1
+ <%= form_for @user, :url => admin_user_path(@user), :html=> {:class => "form-horizontal admin-user-form"} do |f| %>
2
+ <%= render :partial => "form", :locals => {:f => f} %>
3
+ <% end %>
@@ -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,3 @@
1
+ <%= form_for @user, :url => admin_users_path, :html=> {:class => "form-horizontal admin-user-form"} do |f| %>
2
+ <%= render :partial => "form", :locals => {:f => f} %>
3
+ <% 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 id="detail_wrapper">
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/spud/admin/application' %>
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 %>