ab_admin 0.6.1 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/ab_admin/components/admin_assets.js.coffee +6 -2
- data/app/assets/javascripts/ab_admin/components/base_assets.js.coffee +9 -0
- data/app/assets/javascripts/ab_admin/components/gmaps.js.coffee +1 -1
- data/app/assets/javascripts/ab_admin/components/in_place_edit.js.coffee +6 -0
- data/app/assets/javascripts/ab_admin/components/select2_bridge.js.coffee +2 -2
- data/app/assets/javascripts/ab_admin/core/batch_actions.js.coffee +52 -12
- data/app/assets/javascripts/ab_admin/core/init.js.coffee +2 -0
- data/app/assets/javascripts/ab_admin/core/pjax.js.coffee +3 -2
- data/app/assets/javascripts/ab_admin/core/ui_utils.js.coffee +3 -4
- data/app/assets/stylesheets/ab_admin/bootstrap_and_overrides.scss +4 -0
- data/app/assets/stylesheets/ab_admin/components/_colored_tabs.scss +4 -0
- data/app/assets/stylesheets/ab_admin/components/_form.scss +36 -3
- data/app/controllers/admin/admin_comments_controller.rb +4 -0
- data/app/controllers/admin/assets_controller.rb +5 -2
- data/app/controllers/admin/base_controller.rb +50 -41
- data/app/controllers/admin/locators_controller.rb +1 -1
- data/app/controllers/admin/manager_controller.rb +32 -3
- data/app/controllers/admin/settings_controller.rb +2 -3
- data/app/controllers/admin/static_pages_controller.rb +5 -0
- data/app/controllers/admin/structures_controller.rb +10 -4
- data/app/controllers/admin/users_controller.rb +9 -2
- data/app/views/admin/base/_search_layout.html.slim +0 -1
- data/app/views/admin/base/index.html.slim +1 -2
- data/app/views/admin/fileupload/_container.html.slim +17 -10
- data/app/views/admin/shared/_content_actions.html.slim +18 -6
- data/app/views/admin/shared/_locale_tabs.html.slim +3 -3
- data/app/views/admin/structures/_form.html.slim +2 -1
- data/app/views/layouts/admin/_footer.html.slim +5 -4
- data/app/views/layouts/admin/application.html.slim +2 -0
- data/config/locales/ru.yml +1 -0
- data/config/routes.rb +17 -22
- data/lib/ab_admin.rb +11 -1
- data/lib/ab_admin/abstract_resource.rb +11 -2
- data/lib/ab_admin/carrierwave/base_uploader.rb +45 -25
- data/lib/ab_admin/carrierwave/file_size_validator.rb +0 -1
- data/lib/ab_admin/carrierwave/glue.rb +2 -4
- data/lib/ab_admin/concerns/admin_addition.rb +12 -4
- data/lib/ab_admin/concerns/deep_cloneable.rb +0 -1
- data/lib/ab_admin/concerns/fileuploads.rb +0 -1
- data/lib/ab_admin/concerns/headerable.rb +0 -4
- data/lib/ab_admin/concerns/nested_set.rb +2 -3
- data/lib/ab_admin/concerns/reloadable.rb +0 -2
- data/lib/ab_admin/concerns/silencer.rb +0 -3
- data/lib/ab_admin/concerns/utilities.rb +2 -4
- data/lib/ab_admin/concerns/validations.rb +1 -1
- data/lib/ab_admin/config/base.rb +26 -6
- data/lib/ab_admin/controllers/callbacks.rb +6 -6
- data/lib/ab_admin/controllers/head_options.rb +0 -1
- data/lib/ab_admin/controllers/tree.rb +0 -2
- data/lib/ab_admin/core_ext.rb +1 -1
- data/lib/ab_admin/core_ext/array.rb +0 -1
- data/lib/ab_admin/core_ext/hash.rb +11 -0
- data/lib/ab_admin/core_ext/string.rb +0 -1
- data/lib/ab_admin/devise.rb +1 -1
- data/lib/ab_admin/engine.rb +2 -1
- data/lib/ab_admin/hooks/globalize_locale_suffix_accessors.rb +17 -31
- data/lib/ab_admin/hooks/will_paginate_no_uri.rb +1 -1
- data/lib/ab_admin/i18n_tools/google_translate.rb +0 -1
- data/lib/ab_admin/i18n_tools/translate_app.rb +0 -1
- data/lib/ab_admin/menu/builder.rb +3 -2
- data/lib/ab_admin/menu/group.rb +3 -1
- data/lib/ab_admin/models/asset.rb +9 -6
- data/lib/ab_admin/models/header.rb +2 -3
- data/lib/ab_admin/models/locator.rb +1 -1
- data/lib/ab_admin/models/settings.rb +6 -6
- data/lib/ab_admin/models/structure.rb +0 -6
- data/lib/ab_admin/models/track.rb +12 -3
- data/lib/ab_admin/models/type_model.rb +0 -1
- data/lib/ab_admin/models/user.rb +0 -1
- data/lib/ab_admin/models/validations/all.rb +4 -0
- data/lib/ab_admin/models/validations/domain_name_validator.rb +9 -0
- data/lib/ab_admin/models/validations/email_validator.rb +9 -0
- data/lib/ab_admin/utils.rb +12 -4
- data/lib/ab_admin/utils/eval_helpers.rb +1 -1
- data/lib/ab_admin/utils/logger.rb +0 -2
- data/lib/ab_admin/utils/xls_document.rb +25 -6
- data/lib/ab_admin/version.rb +1 -1
- data/lib/ab_admin/views/admin_helpers.rb +5 -4
- data/lib/ab_admin/views/admin_navigation_helpers.rb +16 -5
- data/lib/ab_admin/views/form_builder.rb +41 -10
- data/lib/ab_admin/views/helpers.rb +0 -2
- data/lib/ab_admin/views/inputs/uploader_input.rb +1 -0
- data/lib/ab_admin/views/search_form_builder.rb +33 -7
- data/lib/generators/ab_admin/ckeditor_assets/ckeditor_assets_generator.rb +0 -1
- data/lib/generators/ab_admin/glob/glob_generator.rb +2 -2
- data/lib/generators/ab_admin/glob/templates/migration.erb +1 -1
- data/lib/generators/ab_admin/install/install_generator.rb +0 -1
- data/lib/generators/ab_admin/install/templates/config/seeds.rb +0 -2
- data/lib/generators/ab_admin/install/templates/helpers/admin/structures_helper.rb +1 -4
- data/lib/generators/ab_admin/install/templates/models/admin_comment.rb +1 -3
- data/lib/generators/ab_admin/install/templates/models/asset.rb +3 -5
- data/lib/generators/ab_admin/install/templates/models/header.rb +1 -5
- data/lib/generators/ab_admin/install/templates/models/static_page.rb +1 -4
- data/lib/generators/ab_admin/install/templates/models/structure.rb +1 -5
- data/lib/generators/ab_admin/install/templates/models/track.rb +1 -2
- data/lib/generators/ab_admin/install/templates/models/user.rb +1 -9
- data/lib/generators/ab_admin/install/templates/uploaders/attachment_file_uploader.rb +1 -1
- data/lib/generators/ab_admin/install/templates/uploaders/avatar_uploader.rb +1 -1
- data/lib/generators/ab_admin/install/templates/uploaders/picture_uploader.rb +1 -1
- data/lib/generators/ab_admin/model/templates/resource.erb +1 -0
- data/lib/generators/template.rb +39 -59
- metadata +38 -36
- data/lib/ab_admin/hooks/active_model_attr_accessible_few_roles.rb +0 -50
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aaedc8d3ac86c03428e71248fb4dcd4d21f04627
|
4
|
+
data.tar.gz: 184c8970705793cb444da77d63d9d96b7f7952fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: beb13940643e8e8480cf0cd61b3071722b7ce2fef2cb15669b52bd7e335276d3a565679f002ac619259c9cdb16d24a0e34a449da973d2204233798b0eecaff14
|
7
|
+
data.tar.gz: be2111af7a9ebb8462c57acc04f8d66b94b0d96dd42fa26c6bf01f5a5f4114e5013c221daa24b09c2db2fae6e93c5ce173936ee6e55a11e5d0e3e06a50575e9d
|
@@ -18,6 +18,10 @@ class window.AdminAssets extends BaseAssets
|
|
18
18
|
[file.name, "<b>#{file.error}</b>"].join(' - ')).join('<br/>')
|
19
19
|
bootbox.alert("<h3>#{errors}</h3>")
|
20
20
|
|
21
|
+
initDisabled: ->
|
22
|
+
super
|
23
|
+
@initFancybox() if $.fn.fancybox
|
24
|
+
|
21
25
|
initHandlers: ->
|
22
26
|
super
|
23
27
|
@initFancybox() if $.fn.fancybox
|
@@ -25,7 +29,7 @@ class window.AdminAssets extends BaseAssets
|
|
25
29
|
@initEditMeta() if @options.edit_meta
|
26
30
|
|
27
31
|
initFancybox: =>
|
28
|
-
@list.find("
|
32
|
+
@list.find("a.fancybox")
|
29
33
|
.click (e) ->
|
30
34
|
e.preventDefault()
|
31
35
|
.fancybox
|
@@ -48,7 +52,7 @@ class window.AdminAssets extends BaseAssets
|
|
48
52
|
bootbox.dialog(data, [
|
49
53
|
{label: I18n.t('admin.js.cancel'), class: ' '},
|
50
54
|
{label: I18n.t('admin.js.save'), class: 'btn-primary btn-large fileupload-edit-submit', callback: -> $('form.fileupload-edit-form').submit()}
|
51
|
-
])
|
55
|
+
], {animate: false})
|
52
56
|
max_h = $(window).height() - 100
|
53
57
|
$('.bootbox.modal').css
|
54
58
|
height: max_h
|
@@ -3,6 +3,15 @@ class window.BaseAssets
|
|
3
3
|
@el = $('#' + @options.container_id)
|
4
4
|
@el.data('assets', this)
|
5
5
|
@list = @el.find('.fileupload-list')
|
6
|
+
if @options.disabled
|
7
|
+
@initDisabled()
|
8
|
+
else
|
9
|
+
@initEnabled()
|
10
|
+
|
11
|
+
initDisabled: ->
|
12
|
+
@el.find('.destroy_asset, .rotate_image, .main_image').hide()
|
13
|
+
|
14
|
+
initEnabled: ->
|
6
15
|
@files_in_progress = 0
|
7
16
|
@template = Handlebars.compile($("##{@options.asset_template}_template").html())
|
8
17
|
@initFileupload()
|
@@ -42,3 +42,9 @@ $(document).on 'admin:init', (e) ->
|
|
42
42
|
withCredentials: true
|
43
43
|
headers:
|
44
44
|
Accept: 'application/json'
|
45
|
+
$ ->
|
46
|
+
_.each $('.editable'), (el) ->
|
47
|
+
$el = $(el)
|
48
|
+
return unless $el.data('type') == 'select2'
|
49
|
+
options = new window.Select2Bridge($el, false).buildOptions()
|
50
|
+
$el.data('select2', options)
|
@@ -1,9 +1,9 @@
|
|
1
1
|
class window.Select2Bridge
|
2
|
-
constructor: (@el) ->
|
2
|
+
constructor: (@el, init = true) ->
|
3
3
|
return if fv.test && !fv.enable_fancy_select
|
4
4
|
@el.prop('required', null)
|
5
5
|
@modal = $('#modal_form')
|
6
|
-
@el.select2
|
6
|
+
@el.select2(@buildOptions()) if init
|
7
7
|
@initHandlers()
|
8
8
|
@initSortable() if @el.data('sortable')
|
9
9
|
|
@@ -5,19 +5,46 @@ $ ->
|
|
5
5
|
checked = $(this).is(":checked")
|
6
6
|
$("#list [name='#{input_name}[]']").attr "checked", checked
|
7
7
|
$('#list tbody tr').toggleClass('active_row', checked)
|
8
|
+
$('#list').data('lastChecked', null) unless checked
|
8
9
|
|
9
|
-
$(document).on 'click', '#list input.batch_check', ->
|
10
|
-
$(this).closest('tr')
|
10
|
+
$(document).on 'click', '#list input.batch_check', (e) ->
|
11
|
+
$el = $(this).closest('tr')
|
12
|
+
$wrap = $('#list')
|
13
|
+
if $el.hasClass('active_row')
|
14
|
+
$wrap.data('lastChecked', null)
|
15
|
+
$el.removeClass('active_row')
|
16
|
+
else
|
17
|
+
$el.addClass('active_row')
|
18
|
+
if e.shiftKey && $wrap.data('lastChecked')
|
19
|
+
$prev = $wrap.data('lastChecked')
|
20
|
+
idx = [$prev.index(), $el.index()].sort()
|
21
|
+
$items = $("#list > tbody > tr:eq(#{idx[0]})").nextUntil("#list > tbody > tr:eq(#{idx[1]})")
|
22
|
+
$items.addClass('active_row')
|
23
|
+
$items.find('> td:first input').attr('checked', true)
|
24
|
+
$wrap.data('lastChecked', $el)
|
11
25
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
26
|
+
batchIds = ->
|
27
|
+
$("#list [name='#{input_name}[]']:checked").map(-> $(this).val()).get()
|
28
|
+
|
29
|
+
idsInputs = ->
|
30
|
+
inputs = ''
|
31
|
+
for id in batchIds()
|
32
|
+
inputs += "<input type='checkbox' name='#{input_name}[]' checked='1' value='#{id}' style='display:none;'/>"
|
33
|
+
$(inputs)
|
34
|
+
|
35
|
+
submitBatch = (el, $extraData = null) ->
|
36
|
+
return unless batchIds().length
|
37
|
+
$el = $(el)
|
38
|
+
action = $el.data('action')
|
39
|
+
$('#batch_action').val(action)
|
40
|
+
$form = $('#batch_action_form')
|
41
|
+
$idsInputs = idsInputs()
|
42
|
+
$form.append($idsInputs)
|
43
|
+
$form.append($extraData)
|
44
|
+
$form.submit()
|
45
|
+
$.fancybox.close()
|
46
|
+
$extraData?.remove()
|
47
|
+
$idsInputs.remove()
|
21
48
|
|
22
49
|
$(document).on 'click', '#list > tbody > tr', (e) ->
|
23
50
|
return true unless _.include(['TR', 'TD'], e.target.tagName)
|
@@ -29,5 +56,18 @@ $ ->
|
|
29
56
|
$el.find('td:first input').attr 'checked', (i, v) -> !v
|
30
57
|
|
31
58
|
$(document).on 'click confirm:success', '.batch_action_link', (e) ->
|
59
|
+
return unless batchIds().length
|
60
|
+
e.preventDefault()
|
61
|
+
$el = $(this)
|
62
|
+
if $el.data('form')
|
63
|
+
$form = $($el.data('form'))
|
64
|
+
unless $form.find('.js-batch_form_submit').length
|
65
|
+
$form.append("<div class='btn btn-primary js-batch_form_submit' data-form=#{$el.data('form')} data-action=#{$el.data('action')}><i class='icon-ok icon-white'></i></div>")
|
66
|
+
$form.append("<div class='btn' onclick='$.fancybox.close()'><i class='icon-remove'></i></div>")
|
67
|
+
$.fancybox($form)
|
68
|
+
else
|
69
|
+
submitBatch(this)
|
70
|
+
|
71
|
+
$(document).on 'click', '.js-batch_form_submit', (e) ->
|
32
72
|
e.preventDefault()
|
33
|
-
submitBatch(this)
|
73
|
+
submitBatch(this, $($(this).data('form')).find('input,textarea,select').clone())
|
@@ -1,5 +1,6 @@
|
|
1
|
-
window.toggleLoading = (
|
2
|
-
$('#loading').toggle(
|
1
|
+
window.toggleLoading = (isLoading=true) ->
|
2
|
+
$('#loading').toggle(isLoading)
|
3
|
+
$.rails.enableFormElements($('#search_form')) unless isLoading
|
3
4
|
|
4
5
|
$ ->
|
5
6
|
$(document).on 'click', '.pjax, .pagination a, .pjax_links a', (e) ->
|
@@ -23,13 +23,12 @@ window.initAcFileds = ->
|
|
23
23
|
width: 220
|
24
24
|
|
25
25
|
window.initTooltip = ->
|
26
|
-
$('.
|
26
|
+
$('.js-tooltip').tooltip
|
27
27
|
animation: false
|
28
|
-
placement: 'right'
|
29
28
|
|
30
|
-
window.initEditor = ->
|
29
|
+
window.initEditor = (baseSelector='form') ->
|
31
30
|
return if fv.test
|
32
|
-
$(
|
31
|
+
$("#{baseSelector} .do_wysihtml5").each ->
|
33
32
|
$el = $(this)
|
34
33
|
return if $el.hasClass('wysihtml5_done')
|
35
34
|
editor = $el.wysihtml5({html: true, locale: 'ru'}).data('wysihtml5').editor
|
@@ -72,12 +72,12 @@ input[type="color"],
|
|
72
72
|
.input-large { width: 210px; }
|
73
73
|
.input-xlarge { width: 270px; }
|
74
74
|
.input-xxlarge { width: 530px; }
|
75
|
+
textarea.cke_source {
|
76
|
+
max-width: none;
|
77
|
+
}
|
75
78
|
}
|
76
79
|
|
77
80
|
#search_form {
|
78
|
-
select.input-small {
|
79
|
-
margin-right: 30px;
|
80
|
-
}
|
81
81
|
.right-label {
|
82
82
|
padding: 5px 0 0 130px;
|
83
83
|
}
|
@@ -87,6 +87,39 @@ input[type="color"],
|
|
87
87
|
label {
|
88
88
|
margin-top: 5px;
|
89
89
|
}
|
90
|
+
.string input {
|
91
|
+
width: 100%;
|
92
|
+
box-sizing: border-box;
|
93
|
+
padding: 13px 4px;
|
94
|
+
}
|
95
|
+
.number .controls {
|
96
|
+
select {
|
97
|
+
float: left;
|
98
|
+
}
|
99
|
+
input {
|
100
|
+
float: right;
|
101
|
+
}
|
102
|
+
}
|
103
|
+
.date .controls {
|
104
|
+
text-align: center;
|
105
|
+
line-height: 2.3;
|
106
|
+
input:first-child {
|
107
|
+
float: left;
|
108
|
+
}
|
109
|
+
input {
|
110
|
+
float: right;
|
111
|
+
}
|
112
|
+
}
|
113
|
+
.select select {
|
114
|
+
width: 100%;
|
115
|
+
}
|
116
|
+
.tooltip.left {
|
117
|
+
-moz-transform: translateX(-10px) translateY(-4px);
|
118
|
+
-ms-transform: translateX(-10px) translateY(-4px);
|
119
|
+
-o-transform: translateX(-10px) translateY(-4px);
|
120
|
+
-webkit-transform: translateX(-10px) translateY(-4px);
|
121
|
+
transform: translateX(-10px) translateY(-4px);
|
122
|
+
}
|
90
123
|
}
|
91
124
|
|
92
125
|
.datetimepicker-bottom-left-custom {
|
@@ -28,4 +28,8 @@ class Admin::AdminCommentsController < Admin::BaseController
|
|
28
28
|
def commentable
|
29
29
|
@commentable ||= AdminComment.find_resource(params[:resource_type], params[:resource_id])
|
30
30
|
end
|
31
|
+
|
32
|
+
def permitted_params
|
33
|
+
params[:admin_comment].try!(:permit, :body, :resource_id, :resource_type, *AbAdmin.default_permitted_params)
|
34
|
+
end
|
31
35
|
end
|
@@ -7,7 +7,7 @@ class Admin::AssetsController < ApplicationController
|
|
7
7
|
respond_to :json
|
8
8
|
|
9
9
|
def create
|
10
|
-
@asset = build_asset(
|
10
|
+
@asset = build_asset(permitted_params)
|
11
11
|
@asset.guid = params[:guid]
|
12
12
|
@asset.data = prepared_data
|
13
13
|
@asset.user = current_user
|
@@ -52,6 +52,10 @@ class Admin::AssetsController < ApplicationController
|
|
52
52
|
|
53
53
|
protected
|
54
54
|
|
55
|
+
def permitted_params
|
56
|
+
params[:asset].try!(:permit, :data, :is_main, :original_name, :base_filename, *Asset.all_translated_attribute_names)
|
57
|
+
end
|
58
|
+
|
55
59
|
def find_asset
|
56
60
|
@asset = Asset.find(params[:id])
|
57
61
|
end
|
@@ -85,5 +89,4 @@ class Admin::AssetsController < ApplicationController
|
|
85
89
|
end
|
86
90
|
end
|
87
91
|
end
|
88
|
-
|
89
92
|
end
|
@@ -21,7 +21,7 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
21
21
|
|
22
22
|
helper_method :button_scopes, :collection_action?, :action_items, :resource_action_items,
|
23
23
|
:preview_resource_path, :get_subject, :settings, :batch_action_list, :tree_node_renderer,
|
24
|
-
:normalized_index_views, :current_index_view, :pjax?, :xhr?, :max_per_page
|
24
|
+
:normalized_index_views, :current_index_view, :pjax?, :xhr?, :max_per_page, :params_for_links
|
25
25
|
|
26
26
|
rescue_from ::CanCan::AccessDenied, with: :render_unauthorized
|
27
27
|
|
@@ -31,13 +31,13 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
31
31
|
format.csv do
|
32
32
|
authorize! :export, resource_class
|
33
33
|
doc = AbAdmin::Utils::CsvDocument.new(collection, export_options)
|
34
|
-
send_data(doc.render, filename: doc.filename, type: Mime
|
34
|
+
send_data(doc.render, filename: doc.filename, type: Mime[:csv], disposition: 'attachment')
|
35
35
|
end
|
36
|
-
if
|
37
|
-
format.
|
36
|
+
if Mime[:xlsx]
|
37
|
+
format.xlsx do
|
38
38
|
authorize! :export, resource_class
|
39
39
|
doc = AbAdmin::Utils::XlsDocument.new(collection, export_options)
|
40
|
-
send_data(doc.render, filename: doc.filename, type: Mime
|
40
|
+
send_data(doc.render, filename: doc.filename, type: Mime[:xlsx], disposition: 'attachment')
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
@@ -95,10 +95,17 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
95
95
|
if allow_batch_action?(batch_action) && collection.all?{|item| can?(batch_action, item) }
|
96
96
|
if batch_action.to_s.end_with?('_collection')
|
97
97
|
count = collection.size
|
98
|
-
resource_class.public_send(batch_action, collection)
|
99
|
-
|
98
|
+
resource_class.public_send(batch_action, collection, *[params[:batch_params]].compact)
|
99
|
+
if settings[:history]
|
100
|
+
if Object.const_defined?('ActiveRecord::Import') && Track.respond_to?(:import)
|
101
|
+
tracks = collection.map { |item| track_action("batch_#{batch_action}", item) }
|
102
|
+
Track.import_from_batch_collection_action(tracks)
|
103
|
+
else
|
104
|
+
collection.each { |item| track_action!("batch_#{batch_action}", item) }
|
105
|
+
end
|
106
|
+
end
|
100
107
|
else
|
101
|
-
count = collection.inject(0) { |c, item| apply_batch_action(item, batch_action) ? c + 1 : c }
|
108
|
+
count = collection.inject(0) { |c, item| apply_batch_action(item, batch_action, *[params[:batch_params]].compact) ? c + 1 : c }
|
102
109
|
end
|
103
110
|
batch_action_name = I18n.t("admin.actions.batch_#{batch_action}.title", default: batch_action.to_s.humanize)
|
104
111
|
flash[:success] = I18n.t('admin.batch_actions.status', count: count, action: batch_action_name)
|
@@ -110,6 +117,14 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
110
117
|
|
111
118
|
protected
|
112
119
|
|
120
|
+
def build_resource_params
|
121
|
+
permitted_params || params[resource_class.model_name.param_key]
|
122
|
+
end
|
123
|
+
|
124
|
+
def params_for_links
|
125
|
+
params.slice(:q, :s, :model_name, :per_page, :page).permit!
|
126
|
+
end
|
127
|
+
|
113
128
|
def respond_to_format?(format)
|
114
129
|
self.class.mimes_for_respond_to[format]
|
115
130
|
end
|
@@ -121,18 +136,18 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
121
136
|
options
|
122
137
|
end
|
123
138
|
|
124
|
-
def apply_batch_action(item, batch_action)
|
125
|
-
success = item.send(batch_action)
|
139
|
+
def apply_batch_action(item, batch_action, *batch_params)
|
140
|
+
success = item.send(batch_action, *batch_params)
|
126
141
|
track_action!("batch_#{batch_action}", item) if settings[:history]
|
127
142
|
success
|
128
143
|
end
|
129
144
|
|
130
145
|
def allow_batch_action?(batch_action)
|
131
|
-
|
146
|
+
batch_action_list.detect { |a| a.name == batch_action }
|
132
147
|
end
|
133
148
|
|
134
149
|
def redirect_to_back_or_root
|
135
|
-
|
150
|
+
redirect_back fallback_location: admin_root_path
|
136
151
|
end
|
137
152
|
|
138
153
|
def track_action(key=nil, item=nil)
|
@@ -147,6 +162,10 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
147
162
|
self.class.batch_action_list ||= begin
|
148
163
|
resource_class.batch_actions.map do |a|
|
149
164
|
opts = a == :destroy ? {confirm: I18n.t('admin.delete_confirmation')} : {}
|
165
|
+
if a.is_a?(Hash)
|
166
|
+
opts.merge!(a.except(:name))
|
167
|
+
a = a[:name]
|
168
|
+
end
|
150
169
|
AbAdmin::Config::BatchAction.new(a, opts)
|
151
170
|
end
|
152
171
|
end
|
@@ -165,7 +184,7 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
165
184
|
track_action if settings[:history]
|
166
185
|
end
|
167
186
|
|
168
|
-
def
|
187
|
+
def flash_interpolation_options
|
169
188
|
return {} if collection_action? || resource.errors.empty?
|
170
189
|
{errors: resource.errors.full_messages.map { |m| "<br/> - #{m}" }.join.html_safe}
|
171
190
|
end
|
@@ -217,8 +236,16 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
217
236
|
%w(index search batch rebuild).include?(action_name)
|
218
237
|
end
|
219
238
|
|
239
|
+
def self.scope(name, options={})
|
240
|
+
has_scope name, options.without(:badge)
|
241
|
+
options[:badge] = {} if options[:badge] && !options[:badge].is_a?(Hash)
|
242
|
+
self.button_scopes ||= []
|
243
|
+
self.button_scopes << [name, options]
|
244
|
+
end
|
245
|
+
|
220
246
|
def button_scopes
|
221
|
-
self.class.button_scopes ||= self.class.scopes_configuration.except(:by_ids).find_all{|_, s| s[:type] == :boolean }
|
247
|
+
self.class.button_scopes ||= self.class.scopes_configuration.except(:by_ids).find_all{|_, s| s[:type] == :boolean }
|
248
|
+
self.class.button_scopes.to_h
|
222
249
|
end
|
223
250
|
|
224
251
|
def add_breadcrumbs
|
@@ -252,13 +279,17 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
252
279
|
end
|
253
280
|
|
254
281
|
def search_collection
|
255
|
-
params[:q]
|
282
|
+
query = params[:q].try!{|q| q.permit!.to_h } || {}
|
256
283
|
nested = resource_class.respond_to?(:acts_as_nested_set_options) && current_index_view == 'tree'
|
257
|
-
|
258
|
-
@search = end_of_association_chain.accessible_by(current_ability).admin.ransack(
|
284
|
+
query[:s] ||= settings[:default_order] || ('id desc' unless nested)
|
285
|
+
@search = with_scopes(end_of_association_chain.accessible_by(current_ability).admin).ransack(query.no_blank)
|
259
286
|
@search.result(distinct: @search.object.joins_values.present?)
|
260
287
|
end
|
261
288
|
|
289
|
+
def with_scopes(relation)
|
290
|
+
relation
|
291
|
+
end
|
292
|
+
|
262
293
|
def collection
|
263
294
|
@collection ||= begin
|
264
295
|
result = search_collection
|
@@ -339,7 +370,6 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
339
370
|
end
|
340
371
|
end
|
341
372
|
|
342
|
-
# utility methods
|
343
373
|
def pjax?
|
344
374
|
request.headers['X-PJAX']
|
345
375
|
end
|
@@ -348,7 +378,6 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
348
378
|
request.xhr?
|
349
379
|
end
|
350
380
|
|
351
|
-
# user role logic
|
352
381
|
def moderator?
|
353
382
|
user_signed_in? && current_user.moderator?
|
354
383
|
end
|
@@ -369,34 +398,14 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
369
398
|
raise CanCan::AccessDenied unless admin?
|
370
399
|
end
|
371
400
|
|
372
|
-
def bind_current_user(*
|
401
|
+
def bind_current_user(*)
|
373
402
|
resource.user_id = current_user.id if !settings[:skip_bind_current_user] && resource.respond_to?(:user_id)
|
374
403
|
end
|
375
404
|
|
376
|
-
def bind_current_updater(*
|
405
|
+
def bind_current_updater(*)
|
377
406
|
resource.updater_id = current_user.id if !settings[:skip_bind_current_updater] && resource.respond_to?(:updater_id)
|
378
407
|
end
|
379
408
|
|
380
|
-
# roles logic
|
381
|
-
def role_given?
|
382
|
-
fetch_role
|
383
|
-
end
|
384
|
-
|
385
|
-
def as_role
|
386
|
-
{as: fetch_role}
|
387
|
-
end
|
388
|
-
|
389
|
-
def get_role
|
390
|
-
return [:default, :moderator, :admin] if admin?
|
391
|
-
return [:default, :moderator] if moderator?
|
392
|
-
nil
|
393
|
-
end
|
394
|
-
|
395
|
-
def fetch_role
|
396
|
-
return @as_role if defined?(@as_role)
|
397
|
-
@as_role = get_role
|
398
|
-
end
|
399
|
-
|
400
409
|
def get_subject
|
401
410
|
params[:id] ? resource : resource_class
|
402
411
|
end
|