admin_interface 1.0.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.
- data/README.rdoc +87 -0
- data/admin_interface.gemspec +17 -0
- data/lib/generators/admin_interface/USAGE +1 -0
- data/lib/generators/admin_interface/admin_interface_generator.rb +42 -0
- data/lib/generators/admin_interface/templates/INSTALL +10 -0
- data/lib/generators/admin_interface/templates/controllers/base_controller.rb +32 -0
- data/lib/generators/admin_interface/templates/controllers/resource_controller.rb +92 -0
- data/lib/generators/admin_interface/templates/helpers/admin_helper.rb +24 -0
- data/lib/generators/admin_interface/templates/images/1downarrow.png +0 -0
- data/lib/generators/admin_interface/templates/images/1uparrow.png +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/all-wcprops +89 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/entries +210 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/format +1 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/prop-base/authent.png.svn-base +5 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/prop-base/comment.png.svn-base +5 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/prop-base/file.png.svn-base +5 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/prop-base/info.png.svn-base +5 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/prop-base/notifications.png.svn-base +5 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/prop-base/options.png.svn-base +5 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/prop-base/package.png.svn-base +5 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/prop-base/plugin.png.svn-base +5 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/prop-base/projects.png.svn-base +5 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/prop-base/role.png.svn-base +5 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/prop-base/settings.png.svn-base +5 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/prop-base/tracker.png.svn-base +5 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/prop-base/users.png.svn-base +5 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/prop-base/workflow.png.svn-base +5 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/text-base/authent.png.svn-base +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/text-base/comment.png.svn-base +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/text-base/file.png.svn-base +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/text-base/info.png.svn-base +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/text-base/notifications.png.svn-base +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/text-base/options.png.svn-base +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/text-base/package.png.svn-base +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/text-base/plugin.png.svn-base +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/text-base/projects.png.svn-base +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/text-base/role.png.svn-base +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/text-base/settings.png.svn-base +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/text-base/tracker.png.svn-base +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/text-base/users.png.svn-base +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/.svn/text-base/workflow.png.svn-base +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/authent.png +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/comment.png +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/file.png +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/info.png +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/notifications.png +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/options.png +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/package.png +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/plugin.png +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/projects.png +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/role.png +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/settings.png +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/tracker.png +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/users.png +0 -0
- data/lib/generators/admin_interface/templates/images/22x22/workflow.png +0 -0
- data/lib/generators/admin_interface/templates/images/2downarrow.png +0 -0
- data/lib/generators/admin_interface/templates/images/2uparrow.png +0 -0
- data/lib/generators/admin_interface/templates/images/add.png +0 -0
- data/lib/generators/admin_interface/templates/images/arrow_collapsed.png +0 -0
- data/lib/generators/admin_interface/templates/images/arrow_down.png +0 -0
- data/lib/generators/admin_interface/templates/images/arrow_expanded.png +0 -0
- data/lib/generators/admin_interface/templates/images/attachment.png +0 -0
- data/lib/generators/admin_interface/templates/images/bullet_add.png +0 -0
- data/lib/generators/admin_interface/templates/images/bullet_arrow_left.png +0 -0
- data/lib/generators/admin_interface/templates/images/bullet_arrow_right.png +0 -0
- data/lib/generators/admin_interface/templates/images/bullet_black.png +0 -0
- data/lib/generators/admin_interface/templates/images/bullet_blue.png +0 -0
- data/lib/generators/admin_interface/templates/images/bullet_delete.png +0 -0
- data/lib/generators/admin_interface/templates/images/bullet_diamond.png +0 -0
- data/lib/generators/admin_interface/templates/images/bullet_end.png +0 -0
- data/lib/generators/admin_interface/templates/images/bullet_go.png +0 -0
- data/lib/generators/admin_interface/templates/images/bullet_orange.png +0 -0
- data/lib/generators/admin_interface/templates/images/bullet_purple.png +0 -0
- data/lib/generators/admin_interface/templates/images/bullet_toggle_minus.png +0 -0
- data/lib/generators/admin_interface/templates/images/bullet_toggle_plus.png +0 -0
- data/lib/generators/admin_interface/templates/images/calendar.png +0 -0
- data/lib/generators/admin_interface/templates/images/cancel.png +0 -0
- data/lib/generators/admin_interface/templates/images/changeset.png +0 -0
- data/lib/generators/admin_interface/templates/images/close.png +0 -0
- data/lib/generators/admin_interface/templates/images/close_hl.png +0 -0
- data/lib/generators/admin_interface/templates/images/comment.png +0 -0
- data/lib/generators/admin_interface/templates/images/comments.png +0 -0
- data/lib/generators/admin_interface/templates/images/copy.png +0 -0
- data/lib/generators/admin_interface/templates/images/database_key.png +0 -0
- data/lib/generators/admin_interface/templates/images/delete.png +0 -0
- data/lib/generators/admin_interface/templates/images/destroy.png +0 -0
- data/lib/generators/admin_interface/templates/images/document.png +0 -0
- data/lib/generators/admin_interface/templates/images/download.png +0 -0
- data/lib/generators/admin_interface/templates/images/draft.png +0 -0
- data/lib/generators/admin_interface/templates/images/duplicate.png +0 -0
- data/lib/generators/admin_interface/templates/images/edit.png +0 -0
- data/lib/generators/admin_interface/templates/images/email.png +0 -0
- data/lib/generators/admin_interface/templates/images/exclamation.png +0 -0
- data/lib/generators/admin_interface/templates/images/external.png +0 -0
- data/lib/generators/admin_interface/templates/images/false.png +0 -0
- data/lib/generators/admin_interface/templates/images/fav.png +0 -0
- data/lib/generators/admin_interface/templates/images/fav_off.png +0 -0
- data/lib/generators/admin_interface/templates/images/feed.png +0 -0
- data/lib/generators/admin_interface/templates/images/files/c.png +0 -0
- data/lib/generators/admin_interface/templates/images/files/csharp.png +0 -0
- data/lib/generators/admin_interface/templates/images/files/default.png +0 -0
- data/lib/generators/admin_interface/templates/images/files/image.png +0 -0
- data/lib/generators/admin_interface/templates/images/files/pdf.png +0 -0
- data/lib/generators/admin_interface/templates/images/files/php.png +0 -0
- data/lib/generators/admin_interface/templates/images/files/ruby.png +0 -0
- data/lib/generators/admin_interface/templates/images/files/text.png +0 -0
- data/lib/generators/admin_interface/templates/images/files/xml.png +0 -0
- data/lib/generators/admin_interface/templates/images/files/zip.png +0 -0
- data/lib/generators/admin_interface/templates/images/folder.png +0 -0
- data/lib/generators/admin_interface/templates/images/folder_open.png +0 -0
- data/lib/generators/admin_interface/templates/images/folder_open_add.png +0 -0
- data/lib/generators/admin_interface/templates/images/folder_open_orange.png +0 -0
- data/lib/generators/admin_interface/templates/images/group.png +0 -0
- data/lib/generators/admin_interface/templates/images/help.png +0 -0
- data/lib/generators/admin_interface/templates/images/history.png +0 -0
- data/lib/generators/admin_interface/templates/images/jstoolbar/bt_bq.png +0 -0
- data/lib/generators/admin_interface/templates/images/jstoolbar/bt_bq_remove.png +0 -0
- data/lib/generators/admin_interface/templates/images/jstoolbar/bt_code.png +0 -0
- data/lib/generators/admin_interface/templates/images/jstoolbar/bt_del.png +0 -0
- data/lib/generators/admin_interface/templates/images/jstoolbar/bt_em.png +0 -0
- data/lib/generators/admin_interface/templates/images/jstoolbar/bt_h1.png +0 -0
- data/lib/generators/admin_interface/templates/images/jstoolbar/bt_h2.png +0 -0
- data/lib/generators/admin_interface/templates/images/jstoolbar/bt_h3.png +0 -0
- data/lib/generators/admin_interface/templates/images/jstoolbar/bt_img.png +0 -0
- data/lib/generators/admin_interface/templates/images/jstoolbar/bt_ins.png +0 -0
- data/lib/generators/admin_interface/templates/images/jstoolbar/bt_link.png +0 -0
- data/lib/generators/admin_interface/templates/images/jstoolbar/bt_ol.png +0 -0
- data/lib/generators/admin_interface/templates/images/jstoolbar/bt_pre.png +0 -0
- data/lib/generators/admin_interface/templates/images/jstoolbar/bt_strong.png +0 -0
- data/lib/generators/admin_interface/templates/images/jstoolbar/bt_ul.png +0 -0
- data/lib/generators/admin_interface/templates/images/lightning.png +0 -0
- data/lib/generators/admin_interface/templates/images/link.png +0 -0
- data/lib/generators/admin_interface/templates/images/loading.gif +0 -0
- data/lib/generators/admin_interface/templates/images/locked.png +0 -0
- data/lib/generators/admin_interface/templates/images/message.png +0 -0
- data/lib/generators/admin_interface/templates/images/milestone.png +0 -0
- data/lib/generators/admin_interface/templates/images/move.png +0 -0
- data/lib/generators/admin_interface/templates/images/news.png +0 -0
- data/lib/generators/admin_interface/templates/images/openid-bg.gif +0 -0
- data/lib/generators/admin_interface/templates/images/package.png +0 -0
- data/lib/generators/admin_interface/templates/images/page_go.png +0 -0
- data/lib/generators/admin_interface/templates/images/plugin.png +0 -0
- data/lib/generators/admin_interface/templates/images/projects.png +0 -0
- data/lib/generators/admin_interface/templates/images/reload.png +0 -0
- data/lib/generators/admin_interface/templates/images/report.png +0 -0
- data/lib/generators/admin_interface/templates/images/save.png +0 -0
- data/lib/generators/admin_interface/templates/images/search.png +0 -0
- data/lib/generators/admin_interface/templates/images/server_key.png +0 -0
- data/lib/generators/admin_interface/templates/images/sort_asc.png +0 -0
- data/lib/generators/admin_interface/templates/images/sort_desc.png +0 -0
- data/lib/generators/admin_interface/templates/images/stats.png +0 -0
- data/lib/generators/admin_interface/templates/images/table_multiple.png +0 -0
- data/lib/generators/admin_interface/templates/images/task_done.png +0 -0
- data/lib/generators/admin_interface/templates/images/task_late.png +0 -0
- data/lib/generators/admin_interface/templates/images/task_parent_end.png +0 -0
- data/lib/generators/admin_interface/templates/images/task_todo.png +0 -0
- data/lib/generators/admin_interface/templates/images/text_list_bullets.png +0 -0
- data/lib/generators/admin_interface/templates/images/textfield.png +0 -0
- data/lib/generators/admin_interface/templates/images/ticket.png +0 -0
- data/lib/generators/admin_interface/templates/images/ticket_checked.png +0 -0
- data/lib/generators/admin_interface/templates/images/ticket_edit.png +0 -0
- data/lib/generators/admin_interface/templates/images/ticket_go.png +0 -0
- data/lib/generators/admin_interface/templates/images/ticket_note.png +0 -0
- data/lib/generators/admin_interface/templates/images/time.png +0 -0
- data/lib/generators/admin_interface/templates/images/time_add.png +0 -0
- data/lib/generators/admin_interface/templates/images/toggle_check.png +0 -0
- data/lib/generators/admin_interface/templates/images/true.png +0 -0
- data/lib/generators/admin_interface/templates/images/unlock.png +0 -0
- data/lib/generators/admin_interface/templates/images/user.png +0 -0
- data/lib/generators/admin_interface/templates/images/user_go.png +0 -0
- data/lib/generators/admin_interface/templates/images/warning.png +0 -0
- data/lib/generators/admin_interface/templates/images/wiki_edit.png +0 -0
- data/lib/generators/admin_interface/templates/images/zoom_in.png +0 -0
- data/lib/generators/admin_interface/templates/images/zoom_in_g.png +0 -0
- data/lib/generators/admin_interface/templates/images/zoom_out.png +0 -0
- data/lib/generators/admin_interface/templates/images/zoom_out_g.png +0 -0
- data/lib/generators/admin_interface/templates/javascripts/jquery.admin.js +25 -0
- data/lib/generators/admin_interface/templates/views/admin.css +921 -0
- data/lib/generators/admin_interface/templates/views/index.html.erb +42 -0
- data/lib/generators/admin_interface/templates/views/layout.html.erb +52 -0
- data/lib/generators/admin_scaffold/USAGE +20 -0
- data/lib/generators/admin_scaffold/admin_scaffold_generator.rb +135 -0
- data/lib/generators/admin_scaffold/templates/INSTALL +8 -0
- data/lib/generators/admin_scaffold/templates/controller.rb +5 -0
- data/lib/generators/admin_scaffold/templates/functional_test.rb +45 -0
- data/lib/generators/admin_scaffold/templates/helper.rb +2 -0
- data/lib/generators/admin_scaffold/templates/helper_test.rb +4 -0
- data/lib/generators/admin_scaffold/templates/layout.html.erb +17 -0
- data/lib/generators/admin_scaffold/templates/style.css +54 -0
- data/lib/generators/admin_scaffold/templates/view_edit.html.erb +15 -0
- data/lib/generators/admin_scaffold/templates/view_form_partial.html.erb +16 -0
- data/lib/generators/admin_scaffold/templates/view_index.html.erb +59 -0
- data/lib/generators/admin_scaffold/templates/view_new.html.erb +10 -0
- data/lib/generators/admin_scaffold/templates/view_show.html.erb +18 -0
- metadata +249 -0
data/README.rdoc
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
= AdminInterface
|
|
2
|
+
|
|
3
|
+
A Rails admin interface generator for Rails 3. Theme stolen from Redmine. Similar to web-app-theme.
|
|
4
|
+
|
|
5
|
+
== More info
|
|
6
|
+
|
|
7
|
+
Generator to create some nifty admin scaffolds. It can work with SearchLogic and WillPaginate.
|
|
8
|
+
It also has admin authentication really well implemented.
|
|
9
|
+
|
|
10
|
+
== Install
|
|
11
|
+
|
|
12
|
+
Add following to your Gemfile
|
|
13
|
+
|
|
14
|
+
group :development, :test do
|
|
15
|
+
# Generators
|
|
16
|
+
gem 'admin_interface'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
Or install as plugin from Github.
|
|
20
|
+
|
|
21
|
+
rails plugin install git://github.com/joost/admin_interface.git
|
|
22
|
+
|
|
23
|
+
== Usage / Example
|
|
24
|
+
|
|
25
|
+
=== Generate the initial framework (layout, etc.)
|
|
26
|
+
|
|
27
|
+
rails generate admin_interface
|
|
28
|
+
|
|
29
|
+
This will:
|
|
30
|
+
* But some images (stolen from Redmine) into public/images/admin/
|
|
31
|
+
* Create an Admin::BaseController in app/controllers/admin/base_controller.rb
|
|
32
|
+
* Create a layout in app/views/layouts/admin.html.erb
|
|
33
|
+
* Add some jQuery javascripts and CSS
|
|
34
|
+
|
|
35
|
+
Next, add following routes to config/routes.rb.
|
|
36
|
+
|
|
37
|
+
namespace :admin do
|
|
38
|
+
root :to => 'base#index'
|
|
39
|
+
# Add the following after you've used the admin_scaffold generator
|
|
40
|
+
resources :model do
|
|
41
|
+
delete 'delete_all', :on => :collection
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
Change the app/controllers/admin/base_controller.rb to have a before filter
|
|
46
|
+
only allowing admins to access it.
|
|
47
|
+
|
|
48
|
+
=== Generate admin models and controllers
|
|
49
|
+
|
|
50
|
+
Create a scaffold for a model, for example:
|
|
51
|
+
|
|
52
|
+
rails generate admin_scaffold post
|
|
53
|
+
rails generate admin_scaffold post title:string body:text published:boolean
|
|
54
|
+
rails generate admin_scaffold purchase order_id:integer amount:decimal
|
|
55
|
+
|
|
56
|
+
This will:
|
|
57
|
+
* Create stuff similar to original Rails scaffold generator but for admin interface.
|
|
58
|
+
* NOT create model since you probably have it already.
|
|
59
|
+
|
|
60
|
+
Pass the name of the model (in singular form), either CamelCased or
|
|
61
|
+
under_scored, as the first argument, and an optional list of attribute
|
|
62
|
+
pairs.
|
|
63
|
+
|
|
64
|
+
Attribute pairs are column_name:sql_type arguments specifying the
|
|
65
|
+
model's attributes. Timestamps are added by default, so you don't have to
|
|
66
|
+
specify them by hand as 'created_at:datetime updated_at:datetime'.
|
|
67
|
+
|
|
68
|
+
=== See it in action
|
|
69
|
+
|
|
70
|
+
Go to /admin and you can see everything in action.
|
|
71
|
+
|
|
72
|
+
== Error messages
|
|
73
|
+
|
|
74
|
+
Add this to your environment.rb (see: http://railscasts.com/episodes/39-customize-field-error)
|
|
75
|
+
This will make sure the admin errors will show in correct styling.
|
|
76
|
+
|
|
77
|
+
# Change the error from div to span
|
|
78
|
+
ActionView::Base.field_error_proc = Proc.new do |html_tag, instance_tag|
|
|
79
|
+
"<span class='fieldWithErrors'>#{html_tag}</span>"
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
== Kudos
|
|
83
|
+
|
|
84
|
+
Kudos, credits or whatever you like more go to:
|
|
85
|
+
* Jean-Philippe Lang (creator of {Redmine}[http://www.redmine.org/]).
|
|
86
|
+
|
|
87
|
+
Copyright (c) 2010 Joost Hietbrink, released under the MIT license
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
|
3
|
+
require "devise/version"
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |s|
|
|
6
|
+
s.name = "admin_interface"
|
|
7
|
+
s.version = '1.0.0'
|
|
8
|
+
s.platform = Gem::Platform::RUBY
|
|
9
|
+
s.summary = "A Rails admin interface generator. Theme stolen from Redmine."
|
|
10
|
+
s.email = "joost@joopp.com"
|
|
11
|
+
s.homepage = "http://github.com/joost/admin_interface"
|
|
12
|
+
s.description = "A Rails admin interface generator. Theme stolen from Redmine. Similar to web-app-theme."
|
|
13
|
+
s.authors = ['Joost Hietbrink']
|
|
14
|
+
|
|
15
|
+
s.files = `git ls-files`.split("\n")
|
|
16
|
+
s.require_paths = ["lib"]
|
|
17
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Nothing much to say.. just run it.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
class AdminInterfaceGenerator < Rails::Generators::Base
|
|
2
|
+
|
|
3
|
+
source_root File.expand_path("../templates", __FILE__)
|
|
4
|
+
|
|
5
|
+
def copy_image_files
|
|
6
|
+
# Images
|
|
7
|
+
# Copy all images to public/images/admin
|
|
8
|
+
admin_image_dir = File.join('public', 'images', 'admin')
|
|
9
|
+
directory('images', admin_image_dir)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def copy_controller_files
|
|
13
|
+
copy_file("controllers/base_controller.rb", "app/controllers/admin/base_controller.rb")
|
|
14
|
+
copy_file("controllers/resource_controller.rb", "app/controllers/admin/resource_controller.rb")
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def copy_view_files
|
|
18
|
+
copy_file("views/layout.html.erb", "app/views/layouts/admin.html.erb")
|
|
19
|
+
copy_file("views/index.html.erb", "app/views/admin/index.html.erb")
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def copy_javascript_files
|
|
23
|
+
copy_file("javascripts/jquery.admin.js", "public/javascripts/jquery.admin.js")
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def copy_stylesheet_files
|
|
27
|
+
copy_file("views/admin.css", "public/stylesheets/admin.css")
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def copy_helper_files
|
|
31
|
+
copy_file("helpers/admin_helper.rb", "app/helpers/admin_helper.rb")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# def add_admin_route
|
|
35
|
+
# route("namespace :admin do\n root :to => 'base#index'\n # resources :some_model do\n # delete 'delete_all', :on => :collection\n # end\n end")
|
|
36
|
+
# end
|
|
37
|
+
|
|
38
|
+
def show_readme
|
|
39
|
+
readme("INSTALL")
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
Add following routes to config/routes.rb
|
|
2
|
+
|
|
3
|
+
map.admin 'admin', :controller => 'admin'
|
|
4
|
+
map.namespace :admin do |admin|
|
|
5
|
+
# Add the following after you've used the admin_scaffold generator
|
|
6
|
+
# admin.resources :model, :collection => {:destroy_all => :delete}
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
Change the app/controllers/admin_controller.rb to have a before filter
|
|
10
|
+
only allowing admins to access it.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# The AdminController is the parent class that makes sure all administrator actions
|
|
2
|
+
# require a logged-in User with an admin Role.
|
|
3
|
+
class Admin::BaseController < ApplicationController
|
|
4
|
+
|
|
5
|
+
layout 'admin'
|
|
6
|
+
|
|
7
|
+
# Replace this with your own authentication / authorization stuff
|
|
8
|
+
before_filter :http_authentication
|
|
9
|
+
# Example when using Devise gem
|
|
10
|
+
# before_filter :authenticate_admin!
|
|
11
|
+
|
|
12
|
+
# Add controller names you want to include as tab. Eg.
|
|
13
|
+
# @@tabs = %w(messages) # if you created a Admin::MessagesController using the admin_scaffold generator.
|
|
14
|
+
cattr_accessor :tabs
|
|
15
|
+
@@tabs = %w()
|
|
16
|
+
|
|
17
|
+
# GET /admin/
|
|
18
|
+
def index
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
ADMIN_USERNAME = 'admin'
|
|
24
|
+
ADMIN_PASSWORD = 'admin'
|
|
25
|
+
|
|
26
|
+
def http_authentication
|
|
27
|
+
authenticate_or_request_with_http_basic do |username, password|
|
|
28
|
+
username == ADMIN_USERNAME && password == ADMIN_PASSWORD
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
class Admin::ResourceController < Admin::BaseController
|
|
2
|
+
|
|
3
|
+
before_filter :filter_load_resources, :only => [:index]
|
|
4
|
+
before_filter :filter_load_resource, :only => [:show, :edit, :update, :destroy]
|
|
5
|
+
|
|
6
|
+
def index
|
|
7
|
+
@resources = resource_class.paginate(:page => params[:page], :per_page => params[:per_page])
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def show
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def new
|
|
14
|
+
@resource = resource_class.new
|
|
15
|
+
instance_variable_set("@#{resource_instance_variable_name}", @resource)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def edit
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def create
|
|
22
|
+
@resource = resource_class.new(params_hash_for_resource)
|
|
23
|
+
instance_variable_set("@#{resource_instance_variable_name}", @resource)
|
|
24
|
+
|
|
25
|
+
if @resource.save
|
|
26
|
+
redirect_to([:admin, @resource], :notice => 'Object was successfully created.')
|
|
27
|
+
else
|
|
28
|
+
render :action => "new"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def update
|
|
33
|
+
if @resource.update_attributes(params_hash_for_resource)
|
|
34
|
+
redirect_to([:admin, @resource], :notice => 'Object was successfully updated.')
|
|
35
|
+
else
|
|
36
|
+
render :action => "edit"
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def destroy
|
|
41
|
+
@resource.destroy
|
|
42
|
+
|
|
43
|
+
redirect_to :action => :index
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def destroy_all
|
|
47
|
+
destroyed_resources = resource_class.destroy_all(:id => params[:ids])
|
|
48
|
+
flash[:notice] = "#{destroyed_resources.size} objects destroyed."
|
|
49
|
+
redirect_to :action => :index
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
protected
|
|
53
|
+
|
|
54
|
+
def current_resources
|
|
55
|
+
@resources ||= resource_class.paginate(:page => params[:page], :per_page => params[:per_page])
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def current_resource
|
|
59
|
+
@resource ||= resource_class.find(params[:id])
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def resource_class
|
|
63
|
+
controller_name.singularize.camelize.constantize
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def filter_load_resources
|
|
67
|
+
instance_variable_set("@#{resources_instance_variable_name}", current_resources)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def filter_load_resource
|
|
71
|
+
instance_variable_set("@#{resource_instance_variable_name}", current_resource)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def resources_instance_variable_name
|
|
75
|
+
instance_variable_name
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def resource_instance_variable_name
|
|
79
|
+
instance_variable_name.singularize
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# The name of the instance variable that load_object should assign to.
|
|
83
|
+
# By default this is the controller_name.
|
|
84
|
+
def instance_variable_name
|
|
85
|
+
controller_name
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def params_hash_for_resource
|
|
89
|
+
params[resource_instance_variable_name]
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module AdminHelper
|
|
2
|
+
|
|
3
|
+
# Following methods are ripped from RedMine but very nice!
|
|
4
|
+
|
|
5
|
+
def content_for(name, content = nil, &block)
|
|
6
|
+
@has_content ||= {}
|
|
7
|
+
@has_content[name] = true
|
|
8
|
+
super(name, content, &block)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def has_content?(name)
|
|
12
|
+
(@has_content && @has_content[name]) || false
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Renders flash messages
|
|
16
|
+
def render_flash_messages
|
|
17
|
+
flash_string = ''
|
|
18
|
+
flash.each do |k,v|
|
|
19
|
+
flash_string << content_tag('div', v, :class => "flash #{k}")
|
|
20
|
+
end
|
|
21
|
+
flash_string.html_safe
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
K 25
|
|
2
|
+
svn:wc:ra_dav:version-url
|
|
3
|
+
V 43
|
|
4
|
+
/svn/!svn/ver/752/trunk/public/images/22x22
|
|
5
|
+
END
|
|
6
|
+
plugin.png
|
|
7
|
+
K 25
|
|
8
|
+
svn:wc:ra_dav:version-url
|
|
9
|
+
V 54
|
|
10
|
+
/svn/!svn/ver/752/trunk/public/images/22x22/plugin.png
|
|
11
|
+
END
|
|
12
|
+
file.png
|
|
13
|
+
K 25
|
|
14
|
+
svn:wc:ra_dav:version-url
|
|
15
|
+
V 52
|
|
16
|
+
/svn/!svn/ver/157/trunk/public/images/22x22/file.png
|
|
17
|
+
END
|
|
18
|
+
settings.png
|
|
19
|
+
K 25
|
|
20
|
+
svn:wc:ra_dav:version-url
|
|
21
|
+
V 56
|
|
22
|
+
/svn/!svn/ver/167/trunk/public/images/22x22/settings.png
|
|
23
|
+
END
|
|
24
|
+
role.png
|
|
25
|
+
K 25
|
|
26
|
+
svn:wc:ra_dav:version-url
|
|
27
|
+
V 52
|
|
28
|
+
/svn/!svn/ver/157/trunk/public/images/22x22/role.png
|
|
29
|
+
END
|
|
30
|
+
users.png
|
|
31
|
+
K 25
|
|
32
|
+
svn:wc:ra_dav:version-url
|
|
33
|
+
V 53
|
|
34
|
+
/svn/!svn/ver/157/trunk/public/images/22x22/users.png
|
|
35
|
+
END
|
|
36
|
+
comment.png
|
|
37
|
+
K 25
|
|
38
|
+
svn:wc:ra_dav:version-url
|
|
39
|
+
V 55
|
|
40
|
+
/svn/!svn/ver/529/trunk/public/images/22x22/comment.png
|
|
41
|
+
END
|
|
42
|
+
authent.png
|
|
43
|
+
K 25
|
|
44
|
+
svn:wc:ra_dav:version-url
|
|
45
|
+
V 55
|
|
46
|
+
/svn/!svn/ver/157/trunk/public/images/22x22/authent.png
|
|
47
|
+
END
|
|
48
|
+
notifications.png
|
|
49
|
+
K 25
|
|
50
|
+
svn:wc:ra_dav:version-url
|
|
51
|
+
V 61
|
|
52
|
+
/svn/!svn/ver/157/trunk/public/images/22x22/notifications.png
|
|
53
|
+
END
|
|
54
|
+
projects.png
|
|
55
|
+
K 25
|
|
56
|
+
svn:wc:ra_dav:version-url
|
|
57
|
+
V 56
|
|
58
|
+
/svn/!svn/ver/157/trunk/public/images/22x22/projects.png
|
|
59
|
+
END
|
|
60
|
+
workflow.png
|
|
61
|
+
K 25
|
|
62
|
+
svn:wc:ra_dav:version-url
|
|
63
|
+
V 56
|
|
64
|
+
/svn/!svn/ver/157/trunk/public/images/22x22/workflow.png
|
|
65
|
+
END
|
|
66
|
+
info.png
|
|
67
|
+
K 25
|
|
68
|
+
svn:wc:ra_dav:version-url
|
|
69
|
+
V 52
|
|
70
|
+
/svn/!svn/ver/157/trunk/public/images/22x22/info.png
|
|
71
|
+
END
|
|
72
|
+
options.png
|
|
73
|
+
K 25
|
|
74
|
+
svn:wc:ra_dav:version-url
|
|
75
|
+
V 55
|
|
76
|
+
/svn/!svn/ver/157/trunk/public/images/22x22/options.png
|
|
77
|
+
END
|
|
78
|
+
package.png
|
|
79
|
+
K 25
|
|
80
|
+
svn:wc:ra_dav:version-url
|
|
81
|
+
V 55
|
|
82
|
+
/svn/!svn/ver/164/trunk/public/images/22x22/package.png
|
|
83
|
+
END
|
|
84
|
+
tracker.png
|
|
85
|
+
K 25
|
|
86
|
+
svn:wc:ra_dav:version-url
|
|
87
|
+
V 55
|
|
88
|
+
/svn/!svn/ver/157/trunk/public/images/22x22/tracker.png
|
|
89
|
+
END
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
8
|
|
2
|
+
|
|
3
|
+
dir
|
|
4
|
+
2744
|
|
5
|
+
http://redmine.rubyforge.org/svn/trunk/public/images/22x22
|
|
6
|
+
http://redmine.rubyforge.org/svn
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
2007-09-23T17:19:27.414302Z
|
|
11
|
+
752
|
|
12
|
+
jplang
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
svn:special svn:externals svn:needs-lock
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
e93f8b46-1217-0410-a6f0-8f06a7374b81
|
|
28
|
+
|
|
29
|
+
plugin.png
|
|
30
|
+
file
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
2009-05-16T12:05:29.000000Z
|
|
36
|
+
32ae7e9669b540005c55e2fd631ae82f
|
|
37
|
+
2007-09-23T17:19:27.414302Z
|
|
38
|
+
752
|
|
39
|
+
jplang
|
|
40
|
+
has-props
|
|
41
|
+
|
|
42
|
+
file.png
|
|
43
|
+
file
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
2009-05-16T12:05:29.000000Z
|
|
49
|
+
77b52b5eaca4d4d49c2e45e7bb4517ac
|
|
50
|
+
2007-01-08T19:21:59.140156Z
|
|
51
|
+
157
|
|
52
|
+
jplang
|
|
53
|
+
has-props
|
|
54
|
+
|
|
55
|
+
settings.png
|
|
56
|
+
file
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
2009-05-16T12:05:29.000000Z
|
|
62
|
+
be61e0c45535750b21d00fdc958384cf
|
|
63
|
+
2007-01-21T11:50:22.864544Z
|
|
64
|
+
167
|
|
65
|
+
jplang
|
|
66
|
+
has-props
|
|
67
|
+
|
|
68
|
+
role.png
|
|
69
|
+
file
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
2009-05-16T12:05:29.000000Z
|
|
75
|
+
8f90fc8e800d46206b3535c34909547a
|
|
76
|
+
2007-01-08T19:21:59.140156Z
|
|
77
|
+
157
|
|
78
|
+
jplang
|
|
79
|
+
has-props
|
|
80
|
+
|
|
81
|
+
users.png
|
|
82
|
+
file
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
2009-05-16T12:05:29.000000Z
|
|
88
|
+
ecd3405a134857f862a7728c1e37bcb0
|
|
89
|
+
2007-01-08T19:21:59.140156Z
|
|
90
|
+
157
|
|
91
|
+
jplang
|
|
92
|
+
has-props
|
|
93
|
+
|
|
94
|
+
comment.png
|
|
95
|
+
file
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
2009-05-16T12:05:29.000000Z
|
|
101
|
+
751aecd22b463fe4195dc0ca48b7f346
|
|
102
|
+
2007-05-13T17:09:56.765659Z
|
|
103
|
+
529
|
|
104
|
+
jplang
|
|
105
|
+
has-props
|
|
106
|
+
|
|
107
|
+
authent.png
|
|
108
|
+
file
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
2009-05-16T12:05:29.000000Z
|
|
114
|
+
044dc1865020a28ee079d589a56502f9
|
|
115
|
+
2007-01-08T19:21:59.140156Z
|
|
116
|
+
157
|
|
117
|
+
jplang
|
|
118
|
+
has-props
|
|
119
|
+
|
|
120
|
+
notifications.png
|
|
121
|
+
file
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
2009-05-16T12:05:29.000000Z
|
|
127
|
+
122667ef626bce599397e1dcc1f71ec7
|
|
128
|
+
2007-01-08T19:21:59.140156Z
|
|
129
|
+
157
|
|
130
|
+
jplang
|
|
131
|
+
has-props
|
|
132
|
+
|
|
133
|
+
projects.png
|
|
134
|
+
file
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
2009-05-16T12:05:29.000000Z
|
|
140
|
+
09496465ad3e12b20daf7755facbb76b
|
|
141
|
+
2007-01-08T19:21:59.140156Z
|
|
142
|
+
157
|
|
143
|
+
jplang
|
|
144
|
+
has-props
|
|
145
|
+
|
|
146
|
+
workflow.png
|
|
147
|
+
file
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
2009-05-16T12:05:29.000000Z
|
|
153
|
+
0153917416905d5bde62a73eb4c664db
|
|
154
|
+
2007-01-08T19:21:59.140156Z
|
|
155
|
+
157
|
|
156
|
+
jplang
|
|
157
|
+
has-props
|
|
158
|
+
|
|
159
|
+
info.png
|
|
160
|
+
file
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
2009-05-16T12:05:29.000000Z
|
|
166
|
+
e57082db2c35e65f200e2bc8a59bc58d
|
|
167
|
+
2007-01-08T19:21:59.140156Z
|
|
168
|
+
157
|
|
169
|
+
jplang
|
|
170
|
+
has-props
|
|
171
|
+
|
|
172
|
+
options.png
|
|
173
|
+
file
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
2009-05-16T12:05:29.000000Z
|
|
179
|
+
7aa134d4b5879703730cfd508407ddb2
|
|
180
|
+
2007-01-08T19:21:59.140156Z
|
|
181
|
+
157
|
|
182
|
+
jplang
|
|
183
|
+
has-props
|
|
184
|
+
|
|
185
|
+
package.png
|
|
186
|
+
file
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
2009-05-16T12:05:29.000000Z
|
|
192
|
+
17099a3ca91a9e1ed7eb96d009258990
|
|
193
|
+
2007-01-15T20:14:06.587659Z
|
|
194
|
+
164
|
|
195
|
+
jplang
|
|
196
|
+
has-props
|
|
197
|
+
|
|
198
|
+
tracker.png
|
|
199
|
+
file
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
2009-05-16T12:05:29.000000Z
|
|
205
|
+
f7bc5d71c8659e3f1154c6e479e78e10
|
|
206
|
+
2007-01-08T19:21:59.140156Z
|
|
207
|
+
157
|
|
208
|
+
jplang
|
|
209
|
+
has-props
|
|
210
|
+
|