ab_admin 0.1.2 → 0.2.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/Gemfile +1 -0
- data/Guardfile +1 -1
- data/app/assets/images/admin/flags/b_uk.png +0 -0
- data/app/assets/images/admin/preloader.gif +0 -0
- data/app/assets/javascripts/ab_admin/application.js +1 -28
- data/app/assets/javascripts/ab_admin/components/admin_assets.js.coffee +29 -6
- data/app/assets/javascripts/ab_admin/components/gmaps.js.coffee +120 -91
- data/app/assets/javascripts/ab_admin/components/google_translate.js.coffee +3 -2
- data/app/assets/javascripts/ab_admin/core/batch_actions.js.coffee +4 -7
- data/app/assets/javascripts/ab_admin/core/init.js.coffee +8 -10
- data/app/assets/javascripts/ab_admin/core/ui_utils.js.coffee +53 -24
- data/app/assets/javascripts/ab_admin/core/utils.js.coffee +7 -0
- data/app/assets/javascripts/ab_admin/inputs/datetime_input.js.coffee +1 -2
- data/app/assets/javascripts/ab_admin/main.js +28 -0
- data/app/assets/stylesheets/ab_admin/application.css.scss +1 -10
- data/app/assets/stylesheets/ab_admin/bootstrap_and_overrides.css.scss +4 -0
- data/app/assets/stylesheets/ab_admin/components/_base.css.scss +4 -1
- data/app/assets/stylesheets/ab_admin/components/_form.css.scss +10 -13
- data/app/assets/stylesheets/ab_admin/components/_geo_input.css.scss +5 -9
- data/app/assets/stylesheets/ab_admin/fileupload.css.scss +68 -102
- data/app/assets/stylesheets/ab_admin/main.css.scss +8 -0
- data/app/controllers/admin/base_controller.rb +18 -14
- data/app/controllers/admin/manager_controller.rb +51 -6
- data/app/controllers/admin/users_controller.rb +23 -0
- data/app/views/admin/fileupload/_asset.html.slim +8 -0
- data/app/views/admin/fileupload/_container.html.slim +10 -0
- data/app/views/admin/fileupload/_file.html.slim +5 -0
- data/app/views/admin/fileupload/_ftmpl.html.slim +6 -0
- data/app/views/admin/fileupload/_tmpl.html.slim +9 -0
- data/app/views/admin/users/_form.html.slim +1 -0
- data/config/locales/en.yml +5 -60
- data/config/locales/ru.yml +14 -63
- data/config/routes.rb +7 -4
- data/features/dsl/custom_actions.feature +62 -0
- data/features/dsl/parent_resource.feature +18 -0
- data/features/step_definitions/configuration_steps.rb +6 -0
- data/features/step_definitions/dsl/parent_resource_steps.rb +8 -0
- data/features/step_definitions/settings_steps.rb +1 -1
- data/features/step_definitions/web_steps/transforms_steps.rb +3 -0
- data/features/support/paths.rb +3 -0
- data/lib/ab_admin.rb +5 -0
- data/lib/ab_admin/abstract_resource.rb +28 -4
- data/lib/ab_admin/carrierwave/base_uploader.rb +22 -22
- data/lib/ab_admin/concerns/admin_addition.rb +2 -2
- data/lib/ab_admin/concerns/utilities.rb +4 -4
- data/lib/ab_admin/config/base.rb +18 -0
- data/lib/ab_admin/controllers/head_options.rb +1 -1
- data/lib/ab_admin/core_ext/array.rb +4 -0
- data/lib/ab_admin/core_ext/string.rb +9 -10
- data/lib/ab_admin/hooks/quiet_scope_page.rb +16 -16
- data/lib/ab_admin/hooks/simple_form_hooks.rb +13 -13
- data/lib/ab_admin/i18n_tools/model_translator.rb +67 -0
- data/lib/ab_admin/models/asset.rb +32 -1
- data/lib/ab_admin/models/attachment_file.rb +1 -1
- data/lib/ab_admin/models/locator.rb +7 -0
- data/lib/ab_admin/models/settings.rb +7 -0
- data/lib/ab_admin/models/structure.rb +4 -0
- data/lib/ab_admin/utils.rb +2 -2
- data/lib/ab_admin/version.rb +1 -1
- data/lib/ab_admin/views/admin_helpers.rb +3 -3
- data/lib/ab_admin/views/admin_navigation_helpers.rb +1 -1
- data/lib/ab_admin/views/form_builder.rb +42 -39
- data/lib/ab_admin/views/helpers.rb +5 -0
- data/lib/ab_admin/views/manager_helpers.rb +10 -0
- data/lib/ab_admin/views/search_form_builder.rb +12 -5
- data/lib/generators/ab_admin/install/install_generator.rb +1 -1
- data/lib/generators/ab_admin/install/templates/config/admin_menu.rb +2 -2
- data/lib/generators/ab_admin/install/templates/helpers/admin/structures_helper.rb +1 -1
- data/lib/generators/ab_admin/install/templates/models/attachment_file.rb +2 -0
- data/lib/generators/ab_admin/install/templates/models/locator.rb +0 -1
- data/lib/generators/ab_admin/install/templates/models/settings.rb +0 -1
- data/lib/generators/ab_admin/install/templates/models/static_page.rb +1 -0
- data/lib/generators/ab_admin/install/templates/{scripts → script}/unicorn.sh +0 -0
- data/lib/generators/ab_admin/install/templates/uploaders/avatar_uploader.rb +4 -0
- data/lib/generators/ab_admin/resource/templates/_search_form.haml.erb +1 -1
- data/lib/generators/ab_admin/resource/templates/_search_form.slim.erb +1 -1
- data/lib/generators/ab_admin/resource/templates/_table.haml.erb +1 -2
- data/lib/generators/ab_admin/resource/templates/_table.slim.erb +1 -2
- data/lib/generators/template.rb +1 -0
- data/lib/tasks/i18n.rake +7 -0
- data/spec/dummy/app/models/ab_admin/ab_admin_collection.rb +35 -0
- data/spec/dummy/app/models/ab_admin/ab_admin_product.rb +2 -0
- data/spec/dummy/app/models/admin_menu.rb +4 -2
- data/spec/dummy/app/models/collection.rb +3 -1
- data/spec/generators/install_generator_spec.rb +1 -1
- data/spec/generators/resource_generator_spec.rb +1 -1
- data/spec/models/avatar_spec.rb +29 -2
- metadata +25 -12
- data/app/views/admin/fileupload/_asset.html.erb +0 -5
- data/app/views/admin/fileupload/_container.html.erb +0 -28
- data/app/views/admin/fileupload/_fcontainer.html.erb +0 -25
- data/app/views/admin/fileupload/_file.html.erb +0 -5
- data/app/views/admin/fileupload/_ftmpl.html.erb +0 -7
- data/app/views/admin/fileupload/_tmpl.html.erb +0 -9
- data/lib/ab_admin/utils/csv_builder.rb +0 -52
|
@@ -71,6 +71,13 @@ $.fn.loadSelect = (optionsDataArray) ->
|
|
|
71
71
|
$.fn.scrollToEl = ->
|
|
72
72
|
$('html, body').animate({scrollTop: $(this).offset().top}, 'slow')
|
|
73
73
|
|
|
74
|
+
$.fn.toHref = ->
|
|
75
|
+
$el = $(this)
|
|
76
|
+
if _.isEmpty($el.data())
|
|
77
|
+
window.location.href = $el.attr('href')
|
|
78
|
+
else
|
|
79
|
+
$el.click()
|
|
80
|
+
|
|
74
81
|
$.parseQuery = ->
|
|
75
82
|
window.location.search.replace("?", "").parseQuery()
|
|
76
83
|
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
//= require i18n
|
|
2
|
+
//= require i18n/translations
|
|
3
|
+
//= require jquery_ujs
|
|
4
|
+
//= require jquery.cookie
|
|
5
|
+
//= require jquery.pjax
|
|
6
|
+
//= require jquery.ui.nestedSortable
|
|
7
|
+
//= require jquery_nested_form
|
|
8
|
+
//= require jquery.hotkeys
|
|
9
|
+
//= require bootstrap
|
|
10
|
+
//= require ab_admin/bootstrap-tab-multi
|
|
11
|
+
//= require ab_admin/bootstrap-datepicker/core
|
|
12
|
+
//= require ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.ru.js
|
|
13
|
+
//= require ab_admin/bootstrap-timepicker
|
|
14
|
+
//= require bootstrap-wysihtml5
|
|
15
|
+
//= require bootstrap-wysihtml5/locales/ru
|
|
16
|
+
//= require bootstrap-editable-inline
|
|
17
|
+
//= require select2
|
|
18
|
+
//= require fancybox
|
|
19
|
+
//= require jquery.ui.nestedSortable
|
|
20
|
+
//= require ab_admin/components/sortable_tree
|
|
21
|
+
//= require ab_admin/components/google_translate
|
|
22
|
+
//= require ab_admin/components/locator
|
|
23
|
+
//= require ab_admin/components/admin_assets
|
|
24
|
+
//= require ab_admin/components/gmaps
|
|
25
|
+
//= require ab_admin/components/in_place_edit
|
|
26
|
+
|
|
27
|
+
//= require ab_admin/core/init
|
|
28
|
+
//= require ab_admin/inputs/datetime_input
|
|
@@ -1,10 +1 @@
|
|
|
1
|
-
//= require ab_admin/
|
|
2
|
-
//= require ab_admin/bootstrap-timepicker
|
|
3
|
-
//= require bootstrap-wysihtml5
|
|
4
|
-
//= require bootstrap-editable
|
|
5
|
-
//= require select2
|
|
6
|
-
//= require ab_admin/bootstrap_and_overrides
|
|
7
|
-
//= require ab_admin/fileupload
|
|
8
|
-
|
|
9
|
-
//q= require jquery.fancybox
|
|
10
|
-
//q= require token_input/token-input-facebook
|
|
1
|
+
//= require ab_admin/main
|
|
@@ -17,6 +17,10 @@ $iconWhiteSpritePath: asset-url('glyphicons-halflings-white.png', image);
|
|
|
17
17
|
@import "ab_admin/components/geo_input";
|
|
18
18
|
@import "ab_admin/components/sortable_tree";
|
|
19
19
|
|
|
20
|
+
.dropdown .caret {
|
|
21
|
+
margin-left: 5px;
|
|
22
|
+
}
|
|
23
|
+
|
|
20
24
|
.btn .caret {
|
|
21
25
|
margin-left: 3px;
|
|
22
26
|
}
|
|
@@ -92,19 +92,16 @@ textarea.do_wysihtml5 {
|
|
|
92
92
|
width: 625px;
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
|
|
96
|
-
|
|
95
|
+
textarea {
|
|
96
|
+
width: auto;
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
-
.
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
text-align: center;
|
|
108
|
-
color: #999;
|
|
109
|
-
font-size: 26px;
|
|
99
|
+
.fancy_select, input.token {
|
|
100
|
+
min-width: 220px;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.simple_form {
|
|
104
|
+
.fancy_select, input.token {
|
|
105
|
+
min-width: 400px;
|
|
106
|
+
}
|
|
110
107
|
}
|
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
.admin_map {
|
|
2
2
|
height: 400px;
|
|
3
|
-
|
|
4
|
-
width: 80%;
|
|
5
|
-
margin-top: 0.6em;
|
|
3
|
+
width: 800px;
|
|
6
4
|
img {
|
|
7
5
|
max-width: none;
|
|
8
6
|
}
|
|
9
7
|
}
|
|
10
8
|
.geo_input {
|
|
11
|
-
label {
|
|
12
|
-
display: inline-block;
|
|
13
|
-
width: 10%;
|
|
14
|
-
}
|
|
15
9
|
input {
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
width: 400px;
|
|
11
|
+
&.geo_ac {
|
|
12
|
+
width: 800px;
|
|
13
|
+
}
|
|
18
14
|
}
|
|
19
15
|
}
|
|
@@ -1,120 +1,86 @@
|
|
|
1
|
-
.
|
|
1
|
+
.fileupload {
|
|
2
2
|
overflow: hidden;
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
background: #d1e6dc;
|
|
9
|
-
overflow: hidden;
|
|
10
|
-
}
|
|
11
|
-
.gr-title {
|
|
12
|
-
display: block;
|
|
13
|
-
color: #5b6569;
|
|
14
|
-
font-size: 1.1em;
|
|
15
|
-
padding: 20px 20px 15px 20px;
|
|
16
|
-
}
|
|
17
|
-
.galery {
|
|
18
|
-
display: block;
|
|
19
|
-
overflow: hidden;
|
|
20
|
-
.ill {
|
|
21
|
-
z-index: 3;
|
|
22
|
-
display: block;
|
|
3
|
+
position: relative;
|
|
4
|
+
padding-top: 10px;
|
|
5
|
+
padding-left: 10px;
|
|
6
|
+
&.asset_asset_type {
|
|
7
|
+
.asset {
|
|
23
8
|
float: left;
|
|
24
9
|
overflow: hidden;
|
|
25
|
-
|
|
26
|
-
height: 80px;
|
|
27
|
-
margin-right: 1px;
|
|
28
|
-
margin-bottom: 1px;
|
|
10
|
+
margin: 3px;
|
|
29
11
|
position: relative;
|
|
30
|
-
|
|
31
|
-
|
|
12
|
+
z-index: 3;
|
|
13
|
+
.del_asset, .main_image, .crop_image, .rotate_image {
|
|
32
14
|
position: absolute;
|
|
33
|
-
right: 0px;
|
|
34
|
-
top: 0px;
|
|
35
|
-
background: image_url("admin/transp_cross.png") no-repeat left top;
|
|
36
|
-
width: 17px;
|
|
37
|
-
height: 17px;
|
|
38
15
|
cursor: pointer;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
height: 17px;
|
|
43
|
-
}
|
|
16
|
+
background: rgba(100, 131, 137, 0.6);
|
|
17
|
+
z-index: 4;
|
|
18
|
+
padding: 1px 3px;
|
|
44
19
|
}
|
|
45
|
-
.
|
|
46
|
-
|
|
47
|
-
display: block;
|
|
48
|
-
height: 17px;
|
|
49
|
-
width: 17px;
|
|
50
|
-
text-indent: -2000px;
|
|
51
|
-
position: absolute;
|
|
52
|
-
padding: 0 0 0 20px;
|
|
53
|
-
left: 0;
|
|
20
|
+
.del_asset {
|
|
21
|
+
right: 0;
|
|
54
22
|
top: 0;
|
|
55
|
-
z-index: 1;
|
|
56
23
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
background: image_url("main_pic.png") no-repeat;
|
|
24
|
+
.main_image {
|
|
25
|
+
right: 0;
|
|
26
|
+
bottom: 0;
|
|
61
27
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
.r-ill {
|
|
71
|
-
margin-left: -90px;
|
|
72
|
-
width: 100%;
|
|
73
|
-
float: right;
|
|
74
|
-
.r-ill-data {
|
|
75
|
-
margin-left: 90px;
|
|
28
|
+
.crop_image {
|
|
29
|
+
display: none;
|
|
30
|
+
left: 0;
|
|
31
|
+
bottom: 0;
|
|
32
|
+
}
|
|
33
|
+
.rotate_image {
|
|
34
|
+
left: 0;
|
|
35
|
+
bottm: 0;
|
|
76
36
|
}
|
|
77
37
|
}
|
|
78
|
-
.
|
|
79
|
-
|
|
80
|
-
width: 80px;
|
|
81
|
-
overflow: hidden;
|
|
82
|
-
}
|
|
83
|
-
.file-name {
|
|
84
|
-
color: #5b6569;
|
|
85
|
-
font-size: 0.9em;
|
|
86
|
-
font-weight: bold;
|
|
87
|
-
display: block;
|
|
38
|
+
&.one_asset .main_image {
|
|
39
|
+
display: none;
|
|
88
40
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
41
|
+
}
|
|
42
|
+
&.file_asset_type {
|
|
43
|
+
.asset {
|
|
44
|
+
margin-bottom: 10px;
|
|
45
|
+
z-index: 2;
|
|
46
|
+
position: relative;
|
|
47
|
+
.del_asset {
|
|
48
|
+
margin-left: 15px;
|
|
49
|
+
}
|
|
97
50
|
}
|
|
98
51
|
}
|
|
99
|
-
|
|
52
|
+
.file-name {
|
|
53
|
+
color: #5b6569;
|
|
54
|
+
font-size: 0.9em;
|
|
55
|
+
font-weight: bold;
|
|
56
|
+
}
|
|
57
|
+
.file-types {
|
|
58
|
+
overflow: hidden;
|
|
59
|
+
padding-top: 10px;
|
|
60
|
+
padding-left: 5px;
|
|
61
|
+
z-index: 2;
|
|
62
|
+
}
|
|
63
|
+
.fileupload-button {
|
|
64
|
+
z-index: 3;
|
|
65
|
+
}
|
|
100
66
|
|
|
101
|
-
.file-types {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
67
|
+
.file-types .type-info {
|
|
68
|
+
float: right;
|
|
69
|
+
color: #5b6569;
|
|
70
|
+
font-size: 0.9em;
|
|
71
|
+
text-transform: uppercase;
|
|
72
|
+
}
|
|
73
|
+
.fileupload-drop-area {
|
|
74
|
+
position: absolute;
|
|
75
|
+
top: 0;
|
|
76
|
+
left: 0;
|
|
77
|
+
width: 100%;
|
|
78
|
+
height: 100%;
|
|
79
|
+
min-height: 70px;
|
|
80
|
+
z-index: 1;
|
|
81
|
+
text-align: center;
|
|
82
|
+
color: #999;
|
|
83
|
+
font-size: 18px;
|
|
84
|
+
}
|
|
106
85
|
|
|
107
|
-
.file-types .type-info {
|
|
108
|
-
display: block;
|
|
109
|
-
float: right;
|
|
110
|
-
color: #5b6569;
|
|
111
|
-
font-size: 0.9em;
|
|
112
86
|
}
|
|
113
|
-
.fileupload.file_asset_type {
|
|
114
|
-
.fileupload-list .asset {
|
|
115
|
-
width: auto !important;
|
|
116
|
-
height: auto !important;
|
|
117
|
-
float: none;
|
|
118
|
-
margin-bottom: 10px;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
//= require ab_admin/bootstrap-datepicker
|
|
2
|
+
//= require ab_admin/bootstrap-timepicker
|
|
3
|
+
//= require bootstrap-wysihtml5
|
|
4
|
+
//= require bootstrap-editable
|
|
5
|
+
//= require select2
|
|
6
|
+
//= require fancybox
|
|
7
|
+
//= require ab_admin/bootstrap_and_overrides
|
|
8
|
+
//= require ab_admin/fileupload
|
|
@@ -9,17 +9,17 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
|
9
9
|
before_filter :authenticate_user!, :require_moderator
|
|
10
10
|
before_filter :add_breadcrumbs, :set_title, :set_user_vars, :unless => :xhr?
|
|
11
11
|
|
|
12
|
-
class_attribute :
|
|
12
|
+
class_attribute :export_builder, :batch_action_list, :instance_reader => false, :instance_writer => false
|
|
13
13
|
self.batch_action_list = [AbAdmin::Config::BatchAction.new(:destroy, :confirm => I18n.t('admin.delete_confirmation'))]
|
|
14
14
|
|
|
15
15
|
has_scope :ids, :type => :array
|
|
16
16
|
|
|
17
17
|
helper_method :admin?, :moderator?
|
|
18
18
|
|
|
19
|
-
helper_method :button_scopes, :collection_action?, :action_items, :resource_action_items,
|
|
19
|
+
helper_method :button_scopes, :collection_action?, :action_items, :resource_action_items,
|
|
20
20
|
:preview_resource_path, :get_subject, :settings, :batch_action_list, :tree_node_renderer
|
|
21
21
|
|
|
22
|
-
respond_to :json
|
|
22
|
+
respond_to :json
|
|
23
23
|
|
|
24
24
|
rescue_from ::CanCan::AccessDenied, :with => :render_unauthorized
|
|
25
25
|
|
|
@@ -98,10 +98,6 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
|
98
98
|
self.class.batch_action_list
|
|
99
99
|
end
|
|
100
100
|
|
|
101
|
-
def export_options
|
|
102
|
-
{:column_names => csv_builder.columns.map(&:name), :column_data => csv_builder.columns.map(&:data), :column_separator => csv_builder.column_separator}
|
|
103
|
-
end
|
|
104
|
-
|
|
105
101
|
def self.inherited(base)
|
|
106
102
|
super
|
|
107
103
|
base.class_eval do
|
|
@@ -114,12 +110,16 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
|
114
110
|
{:errors => resource.errors.full_messages.map { |m| "<br/> - #{m}" }.join.html_safe}
|
|
115
111
|
end
|
|
116
112
|
|
|
117
|
-
def self.
|
|
118
|
-
self.
|
|
113
|
+
def self.export(options={}, &block)
|
|
114
|
+
self.export_builder = ::AbAdmin::Config::Export.new(options, &block)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def export_builder
|
|
118
|
+
self.class.export_builder ||= ::AbAdmin::Config::Export.default_for_model(resource_class)
|
|
119
119
|
end
|
|
120
120
|
|
|
121
|
-
def
|
|
122
|
-
|
|
121
|
+
def export_options
|
|
122
|
+
export_builder.render_options
|
|
123
123
|
end
|
|
124
124
|
|
|
125
125
|
def set_title
|
|
@@ -171,8 +171,7 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
|
171
171
|
def add_breadcrumbs
|
|
172
172
|
@breadcrumbs = []
|
|
173
173
|
if parent?
|
|
174
|
-
@breadcrumbs << {:name => parent_class.model_name.human(:count => 9),
|
|
175
|
-
:url => {:action => :index, :controller => "admin/#{parent_class.model_name.plural}"}}
|
|
174
|
+
@breadcrumbs << {:name => parent_class.model_name.human(:count => 9), :url => parent_collection_path}
|
|
176
175
|
@breadcrumbs << {:name => AbAdmin.display_name(parent), :url => parent_path}
|
|
177
176
|
end
|
|
178
177
|
@breadcrumbs << {:name => resource_class.model_name.human(:count => 9), :url => collection_path}
|
|
@@ -181,6 +180,10 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
|
181
180
|
end
|
|
182
181
|
end
|
|
183
182
|
|
|
183
|
+
def parent_collection_path
|
|
184
|
+
{:action => :index, :controller => "admin/#{parent_class.model_name.plural}"}
|
|
185
|
+
end
|
|
186
|
+
|
|
184
187
|
def tree_node_renderer
|
|
185
188
|
@tree_node_renderer ||= lambda { |r| link_to AbAdmin.display_name(r), resource_path(r), :class => 'tree-item_link' }
|
|
186
189
|
end
|
|
@@ -277,7 +280,8 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
|
277
280
|
end
|
|
278
281
|
|
|
279
282
|
def get_role
|
|
280
|
-
return :admin if admin?
|
|
283
|
+
return [:admin, :moderator] if admin?
|
|
284
|
+
return [:moderator] if moderator?
|
|
281
285
|
nil
|
|
282
286
|
end
|
|
283
287
|
|
|
@@ -8,8 +8,53 @@ class ::Admin::ManagerController < ::Admin::BaseController
|
|
|
8
8
|
|
|
9
9
|
helper_method :manager, :admin_partial_name
|
|
10
10
|
|
|
11
|
+
def custom_action
|
|
12
|
+
custom_action = manager.custom_action_for(params[:custom_action], self)
|
|
13
|
+
if custom_action.options[:method] && custom_action.options[:method] != request.method_symbol
|
|
14
|
+
raise ActionController::RoutingError.new("AbAdmin custom action for #{params[:custom_action]} not found")
|
|
15
|
+
end
|
|
16
|
+
instance_exec(&custom_action.data)
|
|
17
|
+
end
|
|
18
|
+
|
|
11
19
|
protected
|
|
12
20
|
|
|
21
|
+
def begin_of_association_chain
|
|
22
|
+
parent
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def parent
|
|
26
|
+
return @parent if defined?(@parent)
|
|
27
|
+
@parent = begin
|
|
28
|
+
return if !params[:parent_resource] && !params[:parent_id]
|
|
29
|
+
assoc_name, r_id = params[:parent_resource].singularize.to_sym, params[:parent_id]
|
|
30
|
+
parent_config = manager.parent_resources.detect { |conf| conf.name == assoc_name }
|
|
31
|
+
return unless parent_config
|
|
32
|
+
assoc = resource_class.reflect_on_association(parent_config.name)
|
|
33
|
+
return unless assoc
|
|
34
|
+
assoc.klass.find(r_id)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def parent?
|
|
39
|
+
!!parent
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def parent_type
|
|
43
|
+
parent.class.name.underscore.to_sym
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def parent_class
|
|
47
|
+
parent.class
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def parent_path
|
|
51
|
+
"/admin/#{parent_class.model_name.plural}/#{parent.id}"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def parent_collection_path
|
|
55
|
+
"/admin/#{parent_class.model_name.plural}"
|
|
56
|
+
end
|
|
57
|
+
|
|
13
58
|
def tree_node_renderer
|
|
14
59
|
manager.tree_node_renderer || super
|
|
15
60
|
end
|
|
@@ -49,16 +94,16 @@ class ::Admin::ManagerController < ::Admin::BaseController
|
|
|
49
94
|
raise ActionController::RoutingError.new("AbAdmin action #{action_name} for #{resource_class.name} not found")
|
|
50
95
|
end
|
|
51
96
|
manager_instance
|
|
52
|
-
|
|
53
|
-
|
|
97
|
+
rescue NameError => e
|
|
98
|
+
raise ActionController::RoutingError.new("AbAdmin manager_model for #{resource_class.name} not found (#{e.message})")
|
|
54
99
|
end
|
|
55
100
|
end
|
|
56
101
|
|
|
57
102
|
def resource_class
|
|
58
103
|
@model ||= begin
|
|
59
104
|
params[:model_name].singularize.classify.constantize
|
|
60
|
-
rescue NameError
|
|
61
|
-
raise ActionController::RoutingError.new("AbAdmin model #{params[:model_name]} not found")
|
|
105
|
+
rescue NameError => e
|
|
106
|
+
raise ActionController::RoutingError.new("AbAdmin model #{params[:model_name]} not found (#{e.message})")
|
|
62
107
|
end
|
|
63
108
|
end
|
|
64
109
|
|
|
@@ -98,12 +143,12 @@ class ::Admin::ManagerController < ::Admin::BaseController
|
|
|
98
143
|
|
|
99
144
|
def edit_resource_path(record=nil, options={})
|
|
100
145
|
record ||= resource
|
|
101
|
-
admin_edit_path(options.merge(:model_name =>
|
|
146
|
+
admin_edit_path(options.merge(:model_name => record.class.model_name.plural, :id => record.id))
|
|
102
147
|
end
|
|
103
148
|
|
|
104
149
|
def resource_path(record=nil, options={})
|
|
105
150
|
record ||= resource
|
|
106
|
-
admin_show_path(options.merge(:model_name =>
|
|
151
|
+
admin_show_path(options.merge(:model_name => record.class.model_name.plural, :id => record.id))
|
|
107
152
|
end
|
|
108
153
|
|
|
109
154
|
def self.cancan_resource_class
|