admin_interface 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
|