caboose-cms 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.md +4 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/javascripts/caboose/application.js +36 -0
  5. data/app/assets/javascripts/caboose/login.js +21 -0
  6. data/app/assets/javascripts/caboose/permissions.js +0 -0
  7. data/app/assets/javascripts/caboose/roles.js +35 -0
  8. data/app/assets/javascripts/caboose/users.js +38 -0
  9. data/app/assets/stylesheets/caboose/application.css +15 -0
  10. data/app/assets/stylesheets/caboose/caboose.css +28 -0
  11. data/app/controllers/caboose/admin_controller.rb +19 -0
  12. data/app/controllers/caboose/application_controller.rb +109 -0
  13. data/app/controllers/caboose/login_controller.rb +40 -0
  14. data/app/controllers/caboose/logout_controller.rb +9 -0
  15. data/app/controllers/caboose/pages_controller.rb +304 -0
  16. data/app/controllers/caboose/permissions_controller.rb +83 -0
  17. data/app/controllers/caboose/roles_controller.rb +109 -0
  18. data/app/controllers/caboose/users_controller.rb +117 -0
  19. data/app/helpers/caboose/application_helper.rb +4 -0
  20. data/app/helpers/caboose/permissions_helper.rb +4 -0
  21. data/app/models/caboose/approval_request.rb +13 -0
  22. data/app/models/caboose/asset.rb +23 -0
  23. data/app/models/caboose/caboose_plugin.rb +15 -0
  24. data/app/models/caboose/menu_block.rb +6 -0
  25. data/app/models/caboose/page.rb +329 -0
  26. data/app/models/caboose/page_bar_generator.rb +157 -0
  27. data/app/models/caboose/page_permission.rb +7 -0
  28. data/app/models/caboose/permission.rb +14 -0
  29. data/app/models/caboose/role.rb +50 -0
  30. data/app/models/caboose/std_class.rb +8 -0
  31. data/app/models/caboose/user.rb +47 -0
  32. data/app/views/caboose/admin/index.html.erb +5 -0
  33. data/app/views/caboose/application/show.html.erb +2 -0
  34. data/app/views/caboose/extras/error.html.erb +2 -0
  35. data/app/views/caboose/extras/error404.html.erb +0 -0
  36. data/app/views/caboose/login/index.html.erb +26 -0
  37. data/app/views/caboose/pages/edit.html.erb +45 -0
  38. data/app/views/caboose/pages/index.html.erb +34 -0
  39. data/app/views/caboose/pages/new.html.erb +23 -0
  40. data/app/views/caboose/pages/show.html.erb +2 -0
  41. data/app/views/caboose/pages/update_pic.html.erb +16 -0
  42. data/app/views/caboose/pages/update_resume.html.erb +14 -0
  43. data/app/views/caboose/permissions/edit.html.erb +6 -0
  44. data/app/views/caboose/permissions/index.html.erb +25 -0
  45. data/app/views/caboose/permissions/new.html.erb +5 -0
  46. data/app/views/caboose/permissions/show.html.erb +15 -0
  47. data/app/views/caboose/roles/edit.html.erb +36 -0
  48. data/app/views/caboose/roles/index.html.erb +17 -0
  49. data/app/views/caboose/roles/new.html.erb +16 -0
  50. data/app/views/caboose/roles/show.html.erb +20 -0
  51. data/app/views/caboose/users/edit.html.erb +45 -0
  52. data/app/views/caboose/users/index.html.erb +34 -0
  53. data/app/views/caboose/users/new.html.erb +22 -0
  54. data/app/views/caboose/users/update_pic.html.erb +16 -0
  55. data/app/views/caboose/users/update_resume.html.erb +14 -0
  56. data/app/views/layouts/caboose/application.html.erb +24 -0
  57. data/app/views/layouts/caboose/caboose.html.erb +24 -0
  58. data/app/views/layouts/caboose/error404.html.erb +2 -0
  59. data/app/views/layouts/caboose/station.html.erb +28 -0
  60. data/config/routes.rb +48 -0
  61. data/db/migrate/20130421000000_drop_all_caboose.rb +16 -0
  62. data/db/migrate/20130422000000_create_caboose.rb +147 -0
  63. data/lib/caboose.rb +26 -0
  64. data/lib/caboose/engine.rb +24 -0
  65. data/lib/caboose/version.rb +3 -0
  66. data/lib/tasks/caboose_tasks.rake +4 -0
  67. data/test/caboose_test.rb +7 -0
  68. data/test/dummy/README.rdoc +261 -0
  69. data/test/dummy/Rakefile +7 -0
  70. data/test/dummy/app/assets/javascripts/application.js +15 -0
  71. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  72. data/test/dummy/app/controllers/application_controller.rb +3 -0
  73. data/test/dummy/app/helpers/application_helper.rb +2 -0
  74. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  75. data/test/dummy/config.ru +4 -0
  76. data/test/dummy/config/application.rb +59 -0
  77. data/test/dummy/config/boot.rb +10 -0
  78. data/test/dummy/config/database.yml +25 -0
  79. data/test/dummy/config/environment.rb +5 -0
  80. data/test/dummy/config/environments/development.rb +37 -0
  81. data/test/dummy/config/environments/production.rb +67 -0
  82. data/test/dummy/config/environments/test.rb +37 -0
  83. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  84. data/test/dummy/config/initializers/inflections.rb +15 -0
  85. data/test/dummy/config/initializers/mime_types.rb +5 -0
  86. data/test/dummy/config/initializers/secret_token.rb +7 -0
  87. data/test/dummy/config/initializers/session_store.rb +8 -0
  88. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  89. data/test/dummy/config/locales/en.yml +5 -0
  90. data/test/dummy/config/routes.rb +4 -0
  91. data/test/dummy/db/test.sqlite3 +0 -0
  92. data/test/dummy/log/test.log +25 -0
  93. data/test/dummy/public/404.html +26 -0
  94. data/test/dummy/public/422.html +26 -0
  95. data/test/dummy/public/500.html +25 -0
  96. data/test/dummy/public/favicon.ico +0 -0
  97. data/test/dummy/script/rails +6 -0
  98. data/test/integration/navigation_test.rb +10 -0
  99. data/test/test_helper.rb +15 -0
  100. metadata +241 -0
@@ -0,0 +1,16 @@
1
+ <% content_for :caboose_js do %>
2
+ <script type='text/javascript'>
3
+ $(document).ready(function() {
4
+ parent.Model.upload_finished({
5
+ name: 'user',
6
+ id: <%= @user.id %>,
7
+ attribute_name: 'pic',
8
+ success: true,
9
+ error: false,
10
+ attribute: {
11
+ value: "<%= @new_value %>"
12
+ }
13
+ });
14
+ });
15
+ </script>
16
+ <% end %>
@@ -0,0 +1,14 @@
1
+ <% content_for :caboose_js do %>
2
+ <script type='text/javascript'>
3
+ $(document).ready(function() {
4
+ parent.Model.upload_finished({
5
+ name: 'user',
6
+ id: <%= @user.id %>,
7
+ attribute: 'resume',
8
+ data: {
9
+ new_value: "<%= @new_value %>"
10
+ }
11
+ });
12
+ });
13
+ </script>
14
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <h1>Editing permission</h1>
2
+
3
+ <%= render 'form' %>
4
+
5
+ <%= link_to 'Show', @permission %> |
6
+ <%= link_to 'Back', permissions_path %>
@@ -0,0 +1,25 @@
1
+ <h1>Listing permissions</h1>
2
+
3
+ <table>
4
+ <tr>
5
+ <th>Resource</th>
6
+ <th>Action</th>
7
+ <th></th>
8
+ <th></th>
9
+ <th></th>
10
+ </tr>
11
+
12
+ <% @permissions.each do |permission| %>
13
+ <tr>
14
+ <td><%= permission.resource %></td>
15
+ <td><%= permission.action %></td>
16
+ <td><%= link_to 'Show', permission %></td>
17
+ <td><%= link_to 'Edit', edit_permission_path(permission) %></td>
18
+ <td><%= link_to 'Destroy', permission, method: :delete, data: { confirm: 'Are you sure?' } %></td>
19
+ </tr>
20
+ <% end %>
21
+ </table>
22
+
23
+ <br />
24
+
25
+ <%= link_to 'New Permission', new_permission_path %>
@@ -0,0 +1,5 @@
1
+ <h1>New permission</h1>
2
+
3
+ <%= render 'form' %>
4
+
5
+ <%= link_to 'Back', permissions_path %>
@@ -0,0 +1,15 @@
1
+ <p id="notice"><%= notice %></p>
2
+
3
+ <p>
4
+ <b>Resource:</b>
5
+ <%= @permission.resource %>
6
+ </p>
7
+
8
+ <p>
9
+ <b>Action:</b>
10
+ <%= @permission.action %>
11
+ </p>
12
+
13
+
14
+ <%= link_to 'Edit', edit_permission_path(@permission) %> |
15
+ <%= link_to 'Back', permissions_path %>
@@ -0,0 +1,36 @@
1
+
2
+ <h1>Edit Role</h1>
3
+
4
+ <table>
5
+ <tr><td>Parent: </td><td id='parent_id_container'></td></tr>
6
+ <tr><td>Name: </td><td id='name_container'></td></tr>
7
+ <tr><td>Description: </td><td id='description_container'></td></tr>
8
+ <tr><td>Members: </td><td id='members_container'></td></tr>
9
+ </table>
10
+ <div id='message'></div>
11
+ <p>
12
+ <input type='button' value='Back' onclick="window.location='/roles';" />
13
+ <input type='button' value='Delete Role' onclick="Caboose.Role.delete(<%= @role.id %>);" />
14
+ </p>
15
+
16
+ <% content_for :caboose_js do %>
17
+ <%= javascript_include_tag "caboose/roles" %>
18
+ <script type="text/javascript">
19
+ $(document).ready(function() {
20
+ var fields = [
21
+ <%
22
+ membersValue = @users.collect{|u| u.id}.to_json
23
+ membersText = @users.collect{|u| r.first_name + " " u.last_name}.join('<br />')
24
+ %>
25
+ { id: 'name' , field_type: 'text' , value: "<%= @role.name %>" },
26
+ { id: 'description' , field_type: 'text' , value: "<%= @role.description %>" },
27
+ { id: 'parent_id' , field_type: 'select', value: <%= @role.parent_id %> , text: "<%= @role.parent.name %>", empty_text: '[Empty]' , loading_message: 'Getting roles...', options_url: '/roles/options' },
28
+ { id: 'members' , field_type: 'select', value: <%= membersValue %> , text: "<%= membersText %>" , empty_text: '[No roles]', loading_message: 'Getting users...', options_url: '/users/options', multiple: true }
29
+ ];
30
+ var params = {
31
+ update_url: '/roles/<%= @role.id %>'
32
+ };
33
+ $.quickEdit.init(fields, params);
34
+ });
35
+ </script>
36
+ <% end %>
@@ -0,0 +1,17 @@
1
+ <h1>Roles</h1>
2
+
3
+ <p><a href='/roles/new'>New Role</a></p>
4
+
5
+ <table class='data'>
6
+ <tr>
7
+ <th>Name</th>
8
+ </tr>
9
+ <% @roles.each do |arr| %>
10
+ <tr onclick="window.location=/roles/<%= arr['value'] %>/edit';">
11
+ <td><%= arr['text'] %></td>
12
+ </tr>
13
+ <% end %>
14
+ </table>
15
+
16
+ <br />
17
+
@@ -0,0 +1,16 @@
1
+
2
+ <h1>New role</h1>
3
+
4
+ <form action='/roles' method='post' id='new_role_form' onsubmit='return false;'>
5
+ <p>Parent: <input type='text' name='parent_id' style='width: 200px;' /></p>
6
+ <p>Name: <input type='text' name='name' style='width: 200px;' /></p>
7
+ <div id='message'></div>
8
+ <p>
9
+ <input type='submit' value='Add Role' onclick='Caboose.Role.add();' />
10
+ <input type='button' value='Back' onclick="window.location='/roles';" />
11
+ </p>
12
+ </form>
13
+
14
+ <% content_for :caboose_js do %>
15
+ <%= javascript_include_tag "caboose/roles" %>
16
+ <% end %>
@@ -0,0 +1,20 @@
1
+ <p id="notice"><%= notice %></p>
2
+
3
+ <p>
4
+ <b>Parent:</b>
5
+ <%= @role.parent_id %>
6
+ </p>
7
+
8
+ <p>
9
+ <b>Name:</b>
10
+ <%= @role.name %>
11
+ </p>
12
+
13
+ <p>
14
+ <b>Description:</b>
15
+ <%= @role.description %>
16
+ </p>
17
+
18
+
19
+ <%= link_to 'Edit', edit_role_path(@role) %> |
20
+ <%= link_to 'Back', roles_path %>
@@ -0,0 +1,45 @@
1
+
2
+ <h1>Edit User</h1>
3
+ <div id='user_<%= @user.id %>_container'></div>
4
+
5
+ <% content_for :caboose_js do %>
6
+ <script type="text/javascript">
7
+
8
+ $(document).ready(function() {
9
+ var user = new Model({
10
+ name: 'User',
11
+ id: <%= @user.id %>,
12
+ attributes: [
13
+ { name: 'first_name' , type: 'text', value: "<%= @user.first_name %>" },
14
+ { name: 'last_name' , type: 'text', value: "<%= @user.last_name %>" },
15
+ { name: 'username' , type: 'text', value: "<%= @user.username %>" },
16
+ { name: 'email' , type: 'text', value: "<%= @user.email %>" },
17
+ { name: 'password' , type: 'password' },
18
+ {
19
+ name: 'roles',
20
+ type: 'checkbox-multiple',
21
+ value: <%= @roles.collect{|r| r.id}.to_json %>,
22
+ text: "<%= @roles.collect{|r| r.name}.join(', ') %>",
23
+ empty_text: '[No roles]',
24
+ multiple: true,
25
+ loading_message: 'Getting roles...',
26
+ options_url: '/roles/options'
27
+ },
28
+ {
29
+ name: 'pic',
30
+ type: 'image',
31
+ value: '',
32
+ update_url: '/users/<%= @user.id %>/update-pic'
33
+ },
34
+ {
35
+ name: 'resume',
36
+ type: 'file',
37
+ value: '',
38
+ update_url: '/users/<%= @user.id %>/update-resume'
39
+ }
40
+ ]
41
+ });
42
+ });
43
+
44
+ </script>
45
+ <% end %>
@@ -0,0 +1,34 @@
1
+ <h1>Users</h1>
2
+
3
+ <p><a href='/users/new'>New User</a></p>
4
+
5
+ <form action='/users' method='get'>
6
+ <table cellpadding='4' cellspacing='0' border='0'>
7
+ <tr><td>First name: </td><td><input type='text' name='first_name' value='<%= @gen.params['first_name'] %>' style='width: 200px;' /></td></tr>
8
+ <tr><td>Last name: </td><td><input type='text' name='last_name' value='<%= @gen.params['last_name'] %>' style='width: 200px;' /></td></tr>
9
+ <tr><td>Username: </td><td><input type='text' name='username' value='<%= @gen.params['username'] %>' style='width: 200px;' /></td></tr>
10
+ </table><br />
11
+ <p><input type='submit' value='Search' /></p>
12
+ </form>
13
+
14
+ <table class='data'>
15
+ <tr>
16
+ <%= raw @gen.sortable_table_headings({
17
+ 'first_name' => 'First Name',
18
+ 'last_name, first_name' => 'Last Name',
19
+ 'username' => 'Username',
20
+ 'email' => 'Email'
21
+ })
22
+ %>
23
+ </tr>
24
+ <% @users.each do |user| %>
25
+ <tr onclick="window.location='/users/<%= user.id %>/edit';">
26
+ <td><%= user.first_name %></td>
27
+ <td><%= user.last_name %></td>
28
+ <td><%= user.username %></td>
29
+ <td><%= user.email %></td>
30
+ </tr>
31
+ <% end %>
32
+ </table>
33
+
34
+ <p><%= raw @gen.generate %></p>
@@ -0,0 +1,22 @@
1
+
2
+ <h1>New user</h1>
3
+ <div id='user_new_container'></div>
4
+
5
+ <% content_for :caboose_js do %>
6
+ <script type='text/javascript'>
7
+
8
+ var user = false;
9
+ $(document).ready(function() {
10
+
11
+ user = new Model({
12
+ name: 'User',
13
+ id: 'new',
14
+ attributes: [
15
+ { name: 'username', type: 'text', value: '' }
16
+ ]
17
+ });
18
+
19
+ });
20
+
21
+ </script>
22
+ <% end %>
@@ -0,0 +1,16 @@
1
+ <% content_for :caboose_js do %>
2
+ <script type='text/javascript'>
3
+ $(document).ready(function() {
4
+ parent.Model.upload_finished({
5
+ name: 'user',
6
+ id: <%= @user.id %>,
7
+ attribute_name: 'pic',
8
+ success: true,
9
+ error: false,
10
+ attribute: {
11
+ value: "<%= @new_value %>"
12
+ }
13
+ });
14
+ });
15
+ </script>
16
+ <% end %>
@@ -0,0 +1,14 @@
1
+ <% content_for :caboose_js do %>
2
+ <script type='text/javascript'>
3
+ $(document).ready(function() {
4
+ parent.Model.upload_finished({
5
+ name: 'user',
6
+ id: <%= @user.id %>,
7
+ attribute: 'resume',
8
+ data: {
9
+ new_value: "<%= @new_value %>"
10
+ }
11
+ });
12
+ });
13
+ </script>
14
+ <% end %>
@@ -0,0 +1,24 @@
1
+
2
+ <%= content_for :js do %>
3
+ <%= javascript_include_tag "caboose/application" %>
4
+ <%= yield :caboose_js %>
5
+ <% end %>
6
+
7
+ <%= content_for :css do %>
8
+ <%= stylesheet_link_tag "caboose/application", :media => "all" %>
9
+ <%= yield :caboose_css %>
10
+ <% end %>
11
+
12
+ <% if (@page.nil?) %>
13
+ <%= render :file => 'layouts/layout_default' %>
14
+ <% else %>
15
+
16
+ <% if (File.exists?("#{Rails.root}/app/views/layouts/layout_#{@page.id}.html.erb")) %>
17
+ <%= render :file => "layouts/layout_#{@page.id}" %>
18
+ <% elsif (!@page.layout.nil? && @page.layout.length > 0 && File.exists?("#{Rails.root}/app/views/layouts/layout_#{@page.layout}.html.erb")) %>
19
+ <%= render :file => "layouts/layout_#{@page.layout}" %>
20
+ <% else %>
21
+ <%= render :file => "layouts/layout_default" %>
22
+ <% end %>
23
+
24
+ <% end %>
@@ -0,0 +1,24 @@
1
+ <!DOCTYPE html>
2
+ <html class="no-js" lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Caboose</title>
6
+ <%= stylesheet_link_tag "caboose/application", :media => "all" %>
7
+ <%= yield :caboose_css %>
8
+ <%= csrf_meta_tags %>
9
+ </head>
10
+ <body>
11
+ <div id='header'>
12
+ <%= render station %>
13
+ <div id='content_wrapper'>
14
+ <div id='content'>
15
+
16
+ <%= yield %>
17
+
18
+ </div>
19
+ </div>
20
+ <div class="footer"></div>
21
+ <%= javascript_include_tag "caboose/application" %>
22
+ <%= yield :caboose_js %>
23
+ </body>
24
+ </html>
@@ -0,0 +1,2 @@
1
+ <h1>Error: File not found</h1>
2
+ <%= yield %>
@@ -0,0 +1,28 @@
1
+ <div id='caboose_station'>
2
+ <a href='/admin' class='logo'><span>Caboose</span></a>
3
+
4
+ <% if (@user.nil? || @user.id == Caboose::User::LOGGED_OUT_USER_ID) %>
5
+
6
+ <a href='/login' class='login'>Login</a>
7
+
8
+ <% else %>
9
+
10
+ <ul>
11
+ <li><a href='/users/<%= @user.id %>/edit'>My Account</a></li>
12
+ <li><a href='/logout'>Logout</a></li>
13
+ <% if (@user.is_allowed('admin', 'view')) %>
14
+ <li><a href='/admin'>Admin</a></li>
15
+ <% end %>
16
+ <%
17
+ uru = session['use_redirect_urls'].nil? ? true : session['use_redirect_urls']
18
+ %>
19
+ <li><a href="javascript:setServerVar('use_redirect_urls', <%= uru ? '0' : '1' %>, 'redirect_message');"><%= uru ? 'Disable' : 'Enable' %> Redirect Urls</a><span id='redirect_message'></span></li>
20
+ <% if (!@tasks.nil?) %>
21
+ <% @tasks.each do |href, task| %>
22
+ <li><a href='<%= href %>'><%= task %></a></li>
23
+ <% end %>
24
+ <% end %>
25
+ </ul>
26
+
27
+ <% end %>
28
+ </div>
data/config/routes.rb ADDED
@@ -0,0 +1,48 @@
1
+ Caboose::Engine.routes.draw do
2
+
3
+ get "admin" => "admin#index"
4
+
5
+ get "login" => "login#index"
6
+ post "login" => "login#login"
7
+ get "logout" => "logout#index"
8
+
9
+ post "admin/users/:id/update-pic" => "users#update_pic"
10
+ get "admin/users" => "users#index"
11
+ get "admin/users/:id/edit" => "users#edit"
12
+ put "admin/users/:id" => "users#update"
13
+ get "admin/users/new" => "users#new"
14
+ post "admin/users" => "users#create"
15
+ delete "admin/users/:id" => "users#destroy"
16
+
17
+ get "admin/roles" => "roles#index"
18
+ get "admin/roles/options" => "roles#options"
19
+ get "admin/roles/new" => "roles#new"
20
+ get "admin/roles/:id/edit" => "roles#edit"
21
+ put "admin/roles/:id" => "roles#update"
22
+ post "admin/roles" => "roles#create"
23
+ delete "admin/roles/:id" => "roles#destroy"
24
+
25
+ get "admin/permissions" => "permissions#index"
26
+ get "admin/permissions/:id" => "permissions#show"
27
+ get "admin/permissions/:id/edit" => "permissions#edit"
28
+ put "admin/permissions/:id" => "permissions#update"
29
+ get "admin/permissions/new" => "permissions#new"
30
+ post "admin/permissions" => "permissions#create"
31
+ delete "admin/permissions/:id" => "permissions#destroy"
32
+
33
+ get "pages" => "pages#index"
34
+ get "pages/sitemap-options" => "pages#sitemap_options"
35
+ get "pages/robots-options" => "pages#robots_options"
36
+ get "pages/content-format-options" => "pages#content_format_options"
37
+ get "pages/new" => "pages#new"
38
+ get "pages/:id/redirect" => "pages#redirect"
39
+ get "pages/:id/edit" => "pages#edit"
40
+ get "pages/:id" => "pages#show"
41
+ put "pages/:id" => "pages#update"
42
+ post "pages" => "pages#create"
43
+ delete "pages/:id" => "pages#destroy"
44
+
45
+ match '*path' => 'pages#show'
46
+ root :to => 'pages#show'
47
+
48
+ end