ab_admin 0.3.6 → 0.4.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.
Files changed (419) hide show
  1. checksums.yaml +7 -0
  2. data/{LICENSE.txt → MIT-LICENSE} +2 -4
  3. data/README.md +3 -3
  4. data/Rakefile +21 -3
  5. data/app/assets/images/admin/flags/b_de.png +0 -0
  6. data/app/assets/images/admin/flags/b_es.png +0 -0
  7. data/app/assets/images/admin/flags/b_fr.png +0 -0
  8. data/app/assets/images/admin/flags/flag_de.gif +0 -0
  9. data/app/assets/images/admin/flags/flag_de_nonact.gif +0 -0
  10. data/app/assets/images/admin/flags/flag_es.gif +0 -0
  11. data/app/assets/images/admin/flags/flag_es_nonact.gif +0 -0
  12. data/app/assets/images/admin/flags/flag_fr.gif +0 -0
  13. data/app/assets/images/admin/flags/flag_fr_nonact.gif +0 -0
  14. data/app/assets/javascripts/ab_admin/components/admin_assets.js.coffee +50 -60
  15. data/app/assets/javascripts/ab_admin/components/base_assets.js.coffee +86 -0
  16. data/app/assets/javascripts/ab_admin/components/croppable_image.js.coffee +4 -4
  17. data/app/assets/javascripts/ab_admin/components/gmaps.js.coffee +5 -0
  18. data/app/assets/javascripts/ab_admin/components/google_translate.js.coffee +0 -1
  19. data/app/assets/javascripts/ab_admin/components/in_place_edit.js.coffee +7 -3
  20. data/app/assets/javascripts/ab_admin/components/locator.js.coffee +1 -1
  21. data/app/assets/javascripts/ab_admin/components/select2_bridge.js.coffee +152 -0
  22. data/app/assets/javascripts/ab_admin/components/sortable_tree.js.coffee +1 -1
  23. data/app/assets/javascripts/ab_admin/core/batch_actions.js.coffee +5 -4
  24. data/app/assets/javascripts/ab_admin/core/columns_hider.js.coffee +4 -11
  25. data/app/assets/javascripts/ab_admin/core/confirmation.js.coffee +4 -43
  26. data/app/assets/javascripts/ab_admin/core/deprecated_utils.js.coffee +44 -0
  27. data/app/assets/javascripts/ab_admin/core/init.js.coffee +8 -25
  28. data/app/assets/javascripts/ab_admin/core/pjax.js.coffee +18 -4
  29. data/app/assets/javascripts/ab_admin/core/search_form.js.coffee +5 -5
  30. data/app/assets/javascripts/ab_admin/core/ui_utils.js.coffee +15 -86
  31. data/app/assets/javascripts/ab_admin/core/utils.js.coffee +38 -51
  32. data/app/assets/javascripts/ab_admin/core/view_layout.js.coffee +1 -1
  33. data/app/assets/javascripts/ab_admin/inputs/datetime_input.js.coffee +16 -18
  34. data/app/assets/javascripts/ab_admin/main.js +7 -7
  35. data/app/assets/stylesheets/ab_admin/bootstrap_and_overrides.css.scss +21 -8
  36. data/app/assets/stylesheets/ab_admin/components/_admin_comments.css.scss +17 -5
  37. data/app/assets/stylesheets/ab_admin/components/_base.css.scss +4 -0
  38. data/app/assets/stylesheets/ab_admin/components/_colored_tabs.css.scss +1 -4
  39. data/app/assets/stylesheets/ab_admin/components/_columns_hider.css.scss +5 -0
  40. data/app/assets/stylesheets/ab_admin/components/_form.css.scss +45 -16
  41. data/app/assets/stylesheets/ab_admin/components/_grid_view.css.scss +11 -0
  42. data/app/assets/stylesheets/ab_admin/components/_locale_tabs.css.scss +1 -1
  43. data/app/assets/stylesheets/ab_admin/components/_navigation.css.scss +11 -9
  44. data/app/assets/stylesheets/ab_admin/components/_table_view.css.scss +1 -1
  45. data/app/assets/stylesheets/ab_admin/components/_translations.css.scss +1 -0
  46. data/app/assets/stylesheets/ab_admin/components/{_sortable_tree.css.scss → _tree_view.css.scss} +8 -3
  47. data/app/assets/stylesheets/ab_admin/fileupload.css.scss +51 -43
  48. data/app/assets/stylesheets/ab_admin/main.css.scss +1 -3
  49. data/app/controllers/admin/admin_comments_controller.rb +14 -4
  50. data/app/controllers/admin/assets_controller.rb +44 -35
  51. data/app/controllers/admin/base_controller.rb +93 -38
  52. data/app/controllers/admin/locators_controller.rb +3 -2
  53. data/app/controllers/admin/manager_controller.rb +20 -9
  54. data/app/controllers/admin/structures_controller.rb +9 -1
  55. data/app/controllers/admin/users_controller.rb +1 -2
  56. data/app/views/ab_admin/devise/sessions/new.html.slim +1 -1
  57. data/app/views/admin/admin_comments/_comment.html.slim +21 -7
  58. data/app/views/admin/admin_comments/_comments.html.slim +1 -1
  59. data/app/views/admin/admin_comments/_form.html.slim +8 -3
  60. data/app/views/admin/admin_comments/_list_block.html.slim +7 -0
  61. data/app/views/admin/admin_comments/create.js.erb +3 -2
  62. data/app/views/admin/admin_comments/destroy.js.erb +1 -1
  63. data/app/views/admin/admin_comments/index.js.erb +14 -0
  64. data/app/views/admin/assets/batch_edit.html.slim +14 -0
  65. data/app/views/admin/base/_modal_form_layout.html.slim +12 -0
  66. data/app/views/admin/base/_search_layout.html.slim +4 -3
  67. data/app/views/admin/base/_table.html.slim +2 -2
  68. data/app/views/admin/base/create.js.erb +13 -8
  69. data/app/views/admin/base/history.html.slim +18 -0
  70. data/app/views/admin/base/index.html.slim +3 -3
  71. data/app/views/admin/base/new.js.erb +14 -8
  72. data/app/views/admin/base/show.html.slim +1 -2
  73. data/app/views/admin/base/show.js.erb +7 -0
  74. data/app/views/admin/fileupload/_asset_templates.html.slim +29 -0
  75. data/app/views/admin/fileupload/_container.html.slim +13 -12
  76. data/app/views/admin/fileupload/_file.html.slim +2 -2
  77. data/app/views/admin/fileupload/_image.html.slim +8 -0
  78. data/app/views/admin/fileupload/_video.html.slim +2 -2
  79. data/app/views/admin/headers/_form.html.slim +2 -0
  80. data/app/views/admin/locators/edit.html.slim +1 -1
  81. data/app/views/admin/locators/show.html.slim +1 -2
  82. data/app/views/admin/manager/_form.html.slim +17 -3
  83. data/app/views/admin/manager/_modal_form.html.slim +19 -0
  84. data/app/views/admin/manager/_table.html.slim +3 -3
  85. data/app/views/admin/manager/show.html.slim +1 -0
  86. data/app/views/admin/shared/_content_actions.html.slim +39 -0
  87. data/app/views/admin/shared/_locale_tabs.html.slim +3 -3
  88. data/app/views/admin/shared/inputs/_checkbox_tree.html.slim +9 -3
  89. data/app/views/admin/structures/_form.html.slim +4 -7
  90. data/app/views/admin/users/_form.html.slim +2 -4
  91. data/app/views/admin/users/_search_form.html.slim +0 -1
  92. data/app/views/admin/users/_table.html.slim +8 -10
  93. data/app/views/layouts/admin/_footer.html.slim +3 -4
  94. data/app/views/layouts/admin/_navigation.html.slim +2 -2
  95. data/app/views/layouts/admin/application.html.slim +7 -9
  96. data/app/views/layouts/admin/devise.html.slim +3 -4
  97. data/config/locales/de.yml +319 -0
  98. data/config/locales/en.devise.yml +44 -31
  99. data/config/locales/en.yml +166 -143
  100. data/config/locales/it.devise.yml +54 -41
  101. data/config/locales/it.yml +178 -163
  102. data/config/locales/ru.devise.yml +70 -56
  103. data/config/locales/ru.yml +280 -264
  104. data/config/routes.rb +6 -3
  105. data/db/migrate/20130101000001_create_users.rb +7 -11
  106. data/db/migrate/20130101000003_create_assets.rb +5 -5
  107. data/db/migrate/20130101000004_create_headers.rb +2 -6
  108. data/db/migrate/20130101000005_create_static_pages.rb +1 -5
  109. data/db/migrate/20130101000006_create_structures.rb +5 -9
  110. data/db/migrate/20130101000007_base_translations.rb +3 -1
  111. data/db/migrate/20130101000008_create_admin_comments.rb +5 -5
  112. data/db/migrate/20130101000009_create_tracks.rb +20 -0
  113. data/lib/ab_admin.rb +36 -4
  114. data/lib/ab_admin/abstract_resource.rb +28 -7
  115. data/lib/ab_admin/carrierwave/base_uploader.rb +85 -5
  116. data/lib/ab_admin/carrierwave/glue.rb +6 -1
  117. data/lib/ab_admin/concerns/admin_addition.rb +26 -9
  118. data/lib/ab_admin/concerns/asset_human_names.rb +23 -0
  119. data/lib/ab_admin/concerns/fileuploads.rb +102 -0
  120. data/lib/ab_admin/concerns/has_tracking.rb +32 -0
  121. data/lib/ab_admin/concerns/nested_set.rb +9 -9
  122. data/lib/ab_admin/concerns/silencer.rb +5 -5
  123. data/lib/ab_admin/concerns/utilities.rb +28 -16
  124. data/lib/ab_admin/concerns/validations.rb +1 -1
  125. data/lib/ab_admin/config/base.rb +10 -2
  126. data/lib/ab_admin/controllers/callbacks.rb +2 -2
  127. data/lib/ab_admin/controllers/can_can_manager_resource.rb +3 -2
  128. data/lib/ab_admin/controllers/fv.rb +16 -0
  129. data/lib/ab_admin/controllers/head_options.rb +6 -4
  130. data/lib/ab_admin/core_ext/hash.rb +25 -70
  131. data/lib/ab_admin/core_ext/string.rb +17 -4
  132. data/lib/ab_admin/engine.rb +2 -8
  133. data/lib/ab_admin/hooks.rb +8 -3
  134. data/lib/ab_admin/hooks/active_model_hooks.rb +1 -1
  135. data/lib/ab_admin/hooks/globalize_hooks.rb +35 -0
  136. data/lib/ab_admin/hooks/paginate_hooks.rb +3 -1
  137. data/lib/ab_admin/i18n_tools/model_translator.rb +1 -1
  138. data/lib/ab_admin/menu/abstract_builder.rb +14 -0
  139. data/lib/ab_admin/menu/base_group.rb +26 -0
  140. data/lib/ab_admin/menu/builder.rb +16 -0
  141. data/lib/ab_admin/menu/group.rb +24 -0
  142. data/lib/ab_admin/menu/item.rb +23 -0
  143. data/lib/ab_admin/models/admin_comment.rb +68 -0
  144. data/lib/ab_admin/models/asset.rb +30 -19
  145. data/lib/ab_admin/models/attachment_file.rb +2 -1
  146. data/lib/ab_admin/models/header.rb +15 -0
  147. data/lib/ab_admin/models/locator.rb +1 -3
  148. data/lib/ab_admin/models/settings.rb +10 -10
  149. data/lib/ab_admin/models/structure.rb +20 -9
  150. data/lib/ab_admin/models/track.rb +61 -0
  151. data/lib/ab_admin/models/type_model.rb +30 -17
  152. data/lib/ab_admin/models/user.rb +18 -49
  153. data/lib/ab_admin/utils.rb +16 -7
  154. data/lib/ab_admin/utils/logger.rb +11 -7
  155. data/lib/ab_admin/utils/mysql.rb +10 -0
  156. data/lib/ab_admin/version.rb +1 -1
  157. data/lib/ab_admin/views/admin_helpers.rb +20 -9
  158. data/lib/ab_admin/views/admin_navigation_helpers.rb +44 -21
  159. data/lib/ab_admin/views/content_only_wrapper.rb +14 -0
  160. data/lib/ab_admin/views/form_builder.rb +27 -89
  161. data/lib/ab_admin/views/helpers.rb +1 -28
  162. data/lib/ab_admin/views/inputs/capture_block_input.rb +16 -0
  163. data/lib/ab_admin/views/inputs/date_time_picker_input.rb +45 -0
  164. data/lib/ab_admin/views/inputs/token_input.rb +2 -1
  165. data/lib/ab_admin/views/inputs/uploader_input.rb +101 -0
  166. data/lib/ab_admin/views/manager_helpers.rb +12 -0
  167. data/lib/ab_admin/views/search_form_builder.rb +36 -13
  168. data/lib/generators/ab_admin/ckeditor_assets/ckeditor_assets_generator.rb +1 -1
  169. data/lib/generators/ab_admin/install/install_generator.rb +3 -2
  170. data/lib/generators/ab_admin/install/templates/config/ab_admin.rb.erb +1 -1
  171. data/lib/generators/ab_admin/install/templates/config/admin_menu.rb +1 -1
  172. data/lib/generators/ab_admin/install/templates/config/i18n-js.yml +1 -1
  173. data/lib/generators/ab_admin/install/templates/config/nginx.conf +22 -9
  174. data/lib/generators/ab_admin/install/templates/config/robots.txt +7 -0
  175. data/lib/generators/ab_admin/install/templates/config/seeds.rb +2 -1
  176. data/lib/generators/ab_admin/install/templates/models/ability.rb +2 -7
  177. data/lib/generators/ab_admin/install/templates/models/admin_comment.rb +3 -28
  178. data/lib/generators/ab_admin/install/templates/models/asset.rb +4 -2
  179. data/lib/generators/ab_admin/install/templates/models/attachment_file.rb +1 -1
  180. data/lib/generators/ab_admin/install/templates/models/avatar.rb +2 -2
  181. data/lib/generators/ab_admin/install/templates/models/gender_type.rb +1 -1
  182. data/lib/generators/ab_admin/install/templates/models/header.rb +2 -2
  183. data/lib/generators/ab_admin/install/templates/models/locator.rb +0 -1
  184. data/lib/generators/ab_admin/install/templates/models/picture.rb +1 -1
  185. data/lib/generators/ab_admin/install/templates/models/settings.rb +1 -1
  186. data/lib/generators/ab_admin/install/templates/models/structure.rb +6 -8
  187. data/lib/generators/ab_admin/install/templates/models/track.rb +5 -0
  188. data/lib/generators/ab_admin/install/templates/models/user.rb +2 -3
  189. data/lib/generators/ab_admin/install/templates/script/unicorn.sh +0 -2
  190. data/lib/generators/ab_admin/install/templates/spec/factories/user_factory.rb +1 -2
  191. data/lib/generators/ab_admin/install/templates/uploaders/attachment_file_uploader.rb +1 -1
  192. data/lib/generators/ab_admin/install/templates/uploaders/avatar_uploader.rb +1 -1
  193. data/lib/generators/ab_admin/install/templates/uploaders/picture_uploader.rb +1 -1
  194. data/lib/generators/ab_admin/model/templates/resource.erb +1 -1
  195. data/lib/generators/ab_admin/resource/templates/_form.slim.erb +49 -45
  196. data/lib/generators/ab_admin/resource/templates/_table.slim.erb +1 -1
  197. data/lib/generators/template.rb +32 -56
  198. data/lib/tasks/assets.rake +1 -0
  199. metadata +197 -698
  200. data/.gitignore +0 -41
  201. data/Gemfile +0 -77
  202. data/Guardfile +0 -35
  203. data/TODO +0 -4
  204. data/ab_admin.gemspec +0 -59
  205. data/app/views/admin/fileupload/_asset.html.slim +0 -8
  206. data/app/views/admin/fileupload/_ftmpl.html.slim +0 -6
  207. data/app/views/admin/fileupload/_tmpl.html.slim +0 -9
  208. data/app/views/admin/fileupload/_vtmpl.html.slim +0 -10
  209. data/app/views/admin/shared/_batch_actions.html.slim +0 -27
  210. data/cucumber.yml +0 -10
  211. data/features/dsl/action_items.feature +0 -79
  212. data/features/dsl/admin_comments.feature +0 -30
  213. data/features/dsl/batch_actions.feature +0 -69
  214. data/features/dsl/config.feature +0 -44
  215. data/features/dsl/custom_actions.feature +0 -62
  216. data/features/dsl/export.feature +0 -42
  217. data/features/dsl/form.feature +0 -77
  218. data/features/dsl/in_place_edit.feature +0 -26
  219. data/features/dsl/list_edit.feature +0 -46
  220. data/features/dsl/parent_resource.feature +0 -18
  221. data/features/dsl/resource_action_items.feature +0 -40
  222. data/features/dsl/search.feature +0 -41
  223. data/features/dsl/show.feature +0 -37
  224. data/features/dsl/table.feature +0 -71
  225. data/features/dsl/tree.feature +0 -37
  226. data/features/index_views/table.feature +0 -20
  227. data/features/locators.feature +0 -40
  228. data/features/menu.feature +0 -35
  229. data/features/settings.feature +0 -36
  230. data/features/step_definitions/configuration_steps.rb +0 -94
  231. data/features/step_definitions/dsl/action_items_steps.rb +0 -13
  232. data/features/step_definitions/dsl/admin_comments_steps.rb +0 -12
  233. data/features/step_definitions/dsl/batch_actions_steps.rb +0 -27
  234. data/features/step_definitions/dsl/in_place_edit_steps.rb +0 -7
  235. data/features/step_definitions/dsl/parent_resource_steps.rb +0 -8
  236. data/features/step_definitions/dsl/resource_action_items_steps.rb +0 -14
  237. data/features/step_definitions/dsl/show_steps.rb +0 -8
  238. data/features/step_definitions/dsl/table_steps.rb +0 -38
  239. data/features/step_definitions/dsl/tree_steps.rb +0 -28
  240. data/features/step_definitions/menu_steps.rb +0 -20
  241. data/features/step_definitions/settings_steps.rb +0 -7
  242. data/features/step_definitions/structure_steps.rb +0 -7
  243. data/features/step_definitions/table_steps.rb +0 -23
  244. data/features/step_definitions/user_steps.rb +0 -72
  245. data/features/step_definitions/web_steps/browsing_steps.rb +0 -108
  246. data/features/step_definitions/web_steps/debug_steps.rb +0 -6
  247. data/features/step_definitions/web_steps/form_steps.rb +0 -190
  248. data/features/step_definitions/web_steps/i18n_steps.rb +0 -8
  249. data/features/step_definitions/web_steps/step_scoper.rb +0 -9
  250. data/features/step_definitions/web_steps/transforms_steps.rb +0 -3
  251. data/features/structure/tree.feature +0 -21
  252. data/features/support/capybara_helpers.rb +0 -15
  253. data/features/support/carrierwave.rb +0 -21
  254. data/features/support/env.rb +0 -40
  255. data/features/support/paths.rb +0 -55
  256. data/features/support/selector_helpers.rb +0 -9
  257. data/features/support/selectors.rb +0 -43
  258. data/features/support/tolerance_for_selenium_sync_issues.rb +0 -27
  259. data/features/user/sign_in.feature +0 -27
  260. data/features/user/sign_out.feature +0 -11
  261. data/features/user/user_edit.feature +0 -19
  262. data/features/user/user_show.feature +0 -9
  263. data/lib/ab_admin/hooks/quiet_scope_page.rb +0 -16
  264. data/lib/ab_admin/hooks/simple_form_hooks.rb +0 -31
  265. data/lib/ab_admin/menu_builder.rb +0 -89
  266. data/lib/ab_admin/views/inputs/date_time_input.rb +0 -65
  267. data/lib/generators/ab_admin/install/templates/models/user_state.rb +0 -6
  268. data/lib/generators/ab_admin/resource/templates/_form.haml.erb +0 -71
  269. data/lib/generators/ab_admin/resource/templates/_search_form.haml.erb +0 -35
  270. data/lib/generators/ab_admin/resource/templates/_table.haml.erb +0 -33
  271. data/spec/ab_admin_spec.rb +0 -23
  272. data/spec/dummy/Rakefile +0 -7
  273. data/spec/dummy/app/assets/images/rails.png +0 -0
  274. data/spec/dummy/app/assets/javascripts/application.js +0 -15
  275. data/spec/dummy/app/assets/stylesheets/application.css +0 -13
  276. data/spec/dummy/app/controllers/application_controller.rb +0 -3
  277. data/spec/dummy/app/controllers/products_controller.rb +0 -5
  278. data/spec/dummy/app/controllers/welcome_controller.rb +0 -5
  279. data/spec/dummy/app/mailers/.gitkeep +0 -0
  280. data/spec/dummy/app/models/ab_admin/ab_admin_catalogue.rb +0 -5
  281. data/spec/dummy/app/models/ab_admin/ab_admin_collection.rb +0 -35
  282. data/spec/dummy/app/models/ab_admin/ab_admin_product.rb +0 -74
  283. data/spec/dummy/app/models/admin_menu.rb +0 -18
  284. data/spec/dummy/app/models/catalogue.rb +0 -10
  285. data/spec/dummy/app/models/ckeditor/asset.rb +0 -7
  286. data/spec/dummy/app/models/ckeditor/attachment_file.rb +0 -7
  287. data/spec/dummy/app/models/ckeditor/picture.rb +0 -7
  288. data/spec/dummy/app/models/collection.rb +0 -20
  289. data/spec/dummy/app/models/product.rb +0 -32
  290. data/spec/dummy/app/uploaders/ckeditor_attachment_file_uploader.rb +0 -42
  291. data/spec/dummy/app/uploaders/ckeditor_picture_uploader.rb +0 -53
  292. data/spec/dummy/app/views/admin/collections/_form.html.slim +0 -24
  293. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  294. data/spec/dummy/app/views/products/show.html.erb +0 -2
  295. data/spec/dummy/app/views/welcome/index.html.erb +0 -2
  296. data/spec/dummy/config.ru +0 -4
  297. data/spec/dummy/config/application.rb +0 -82
  298. data/spec/dummy/config/boot.rb +0 -10
  299. data/spec/dummy/config/database.yml +0 -26
  300. data/spec/dummy/config/environment.rb +0 -5
  301. data/spec/dummy/config/environments/development.rb +0 -37
  302. data/spec/dummy/config/environments/production.rb +0 -67
  303. data/spec/dummy/config/environments/test.rb +0 -37
  304. data/spec/dummy/config/i18n-js.yml +0 -21
  305. data/spec/dummy/config/initializers/ab_admin.rb +0 -15
  306. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  307. data/spec/dummy/config/initializers/ckeditor.rb +0 -18
  308. data/spec/dummy/config/initializers/devise.rb +0 -232
  309. data/spec/dummy/config/initializers/inflections.rb +0 -15
  310. data/spec/dummy/config/initializers/mime_types.rb +0 -5
  311. data/spec/dummy/config/initializers/secret_token.rb +0 -7
  312. data/spec/dummy/config/initializers/session_store.rb +0 -8
  313. data/spec/dummy/config/initializers/simple_form.rb +0 -142
  314. data/spec/dummy/config/initializers/simple_form_bootstrap.rb +0 -45
  315. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  316. data/spec/dummy/config/locales/devise.en.yml +0 -60
  317. data/spec/dummy/config/locales/en.yml +0 -5
  318. data/spec/dummy/config/locales/simple_form.en.yml +0 -26
  319. data/spec/dummy/config/routes.rb +0 -14
  320. data/spec/dummy/config/settings/development.local.yml +0 -9
  321. data/spec/dummy/config/settings/development.yml +0 -7
  322. data/spec/dummy/db/migrate/20130129151853_create_ckeditor_assets.rb +0 -26
  323. data/spec/dummy/db/migrate/20130130161853_create_collections.rb +0 -10
  324. data/spec/dummy/db/migrate/20130130162046_create_products.rb +0 -13
  325. data/spec/dummy/db/migrate/20130130175446_create_globalize_collection_product.rb +0 -11
  326. data/spec/dummy/db/migrate/20130207224516_create_catalogues.rb +0 -16
  327. data/spec/dummy/db/migrate/20130209223506_add_lat_lon_zoom_to_products.rb +0 -7
  328. data/spec/dummy/db/seeds.rb +0 -46
  329. data/spec/dummy/lib/assets/.gitkeep +0 -0
  330. data/spec/dummy/lib/capybara_irb.rb +0 -42
  331. data/spec/dummy/lib/tasks/.gitkeep +0 -0
  332. data/spec/dummy/lib/tasks/cucumber.rake +0 -65
  333. data/spec/dummy/lib/templates/slim/scaffold/_form.html.slim +0 -10
  334. data/spec/dummy/log/.gitkeep +0 -0
  335. data/spec/dummy/public/404.html +0 -26
  336. data/spec/dummy/public/422.html +0 -26
  337. data/spec/dummy/public/500.html +0 -25
  338. data/spec/dummy/public/favicon.ico +0 -0
  339. data/spec/dummy/script/cucumber +0 -10
  340. data/spec/dummy/script/rails +0 -6
  341. data/spec/factories/assets.rb +0 -52
  342. data/spec/factories/catalogues.rb +0 -7
  343. data/spec/factories/collections.rb +0 -8
  344. data/spec/factories/files/rails.png +0 -0
  345. data/spec/factories/products.rb +0 -17
  346. data/spec/factories/sequences.rb +0 -7
  347. data/spec/factories/structures.rb +0 -17
  348. data/spec/factories/users.rb +0 -30
  349. data/spec/generators/ckeditor_assets_generator_spec.rb +0 -19
  350. data/spec/generators/install_generator_spec.rb +0 -48
  351. data/spec/generators/model_generator_spec.rb +0 -31
  352. data/spec/generators/resource_generator_spec.rb +0 -36
  353. data/spec/models/ab_admin/abstract_resource_spec.rb +0 -5
  354. data/spec/models/avatar_spec.rb +0 -162
  355. data/spec/models/picture_uploader_spec.rb +0 -49
  356. data/spec/models/structure_spec.rb +0 -69
  357. data/spec/models/user_spec.rb +0 -159
  358. data/spec/shared_behaviors/concerns.rb +0 -20
  359. data/spec/spec_helper.rb +0 -96
  360. data/spec/support/controller_macros.rb +0 -52
  361. data/spec/support/custom_capybara_matchers.rb +0 -58
  362. data/spec/support/mailer_macros.rb +0 -17
  363. data/spec/support/shared_connection.rb +0 -11
  364. data/vendor/assets/images/ab_admin/clear.png +0 -0
  365. data/vendor/assets/images/ab_admin/loading.gif +0 -0
  366. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/core.js +0 -899
  367. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/index.js +0 -2
  368. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.bg.js +0 -14
  369. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.br.js +0 -13
  370. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.cs.js +0 -14
  371. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.da.js +0 -14
  372. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.de.js +0 -14
  373. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.es.js +0 -14
  374. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.fi.js +0 -14
  375. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.fr.js +0 -14
  376. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.id.js +0 -13
  377. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.is.js +0 -14
  378. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.it.js +0 -14
  379. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.ja.js +0 -13
  380. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.kr.js +0 -13
  381. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.lt.js +0 -15
  382. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.lv.js +0 -16
  383. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.ms.js +0 -14
  384. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.nb.js +0 -14
  385. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.nl.js +0 -14
  386. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.pl.js +0 -14
  387. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.pt-BR.js +0 -14
  388. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.pt.js +0 -14
  389. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.ro.js +0 -15
  390. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.ru.js +0 -14
  391. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.sk.js +0 -14
  392. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.sl.js +0 -14
  393. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.sv.js +0 -14
  394. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.th.js +0 -14
  395. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.tr.js +0 -15
  396. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.js +0 -14
  397. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.zh-TW.js +0 -13
  398. data/vendor/assets/javascripts/ab_admin/bootstrap-editable-inline.js +0 -2895
  399. data/vendor/assets/javascripts/ab_admin/bootstrap-editable.js +0 -4523
  400. data/vendor/assets/javascripts/ab_admin/bootstrap-tab-multi.js +0 -135
  401. data/vendor/assets/javascripts/ab_admin/bootstrap-timepicker.js +0 -377
  402. data/vendor/assets/javascripts/ab_admin/fileupload/admin-fileuploader.js.coffee +0 -111
  403. data/vendor/assets/javascripts/ab_admin/fileupload/fileuploader.js +0 -1301
  404. data/vendor/assets/javascripts/ab_admin/jquery.Jcrop.js +0 -1083
  405. data/vendor/assets/javascripts/ab_admin/jquery_nested_form.js.coffee +0 -66
  406. data/vendor/assets/javascripts/bootstrap-wysihtml5/locales/ru.js +0 -48
  407. data/vendor/assets/javascripts/handlebars.min.js +0 -1
  408. data/vendor/assets/javascripts/jquery.cookie.js +0 -42
  409. data/vendor/assets/javascripts/jquery.hotkeys.js +0 -106
  410. data/vendor/assets/javascripts/jquery.pjax.js +0 -688
  411. data/vendor/assets/javascripts/jquery.tmpl.min.js +0 -10
  412. data/vendor/assets/javascripts/jquery.ui.nestedSortable.js +0 -356
  413. data/vendor/assets/javascripts/jquery/jquery-ui.min.js +0 -15
  414. data/vendor/assets/javascripts/jquery/jquery.min.js +0 -4
  415. data/vendor/assets/javascripts/underscore.min.js +0 -5
  416. data/vendor/assets/stylesheets/ab_admin/bootstrap-datepicker.css.scss +0 -274
  417. data/vendor/assets/stylesheets/ab_admin/bootstrap-editable.scss +0 -461
  418. data/vendor/assets/stylesheets/ab_admin/bootstrap-timepicker.css.scss +0 -88
  419. data/vendor/assets/stylesheets/ab_admin/jquery.Jcrop.min.css.scss +0 -28
data/config/routes.rb CHANGED
@@ -17,6 +17,8 @@ Rails.application.routes.draw do
17
17
  resources :assets, only: [:create, :destroy] do
18
18
  post :rotate, :main, :crop, on: :member
19
19
  post :sort, on: :collection
20
+ get :batch_edit, on: :collection
21
+ post :batch_update, on: :collection
20
22
  end
21
23
 
22
24
  resource :settings, only: [:edit, :update] do
@@ -36,13 +38,14 @@ Rails.application.routes.draw do
36
38
  get '/new', to: :new, as: 'new'
37
39
  post '/batch', to: :batch, as: 'batch'
38
40
  post '/rebuild', to: :rebuild, as: 'rebuild'
39
- match '/custom_action', to: :custom_action, as: 'collection_action'
41
+ match '/custom_action', to: :custom_action, as: 'collection_action', via: :all
40
42
 
41
43
  scope ':id' do
42
44
  get '/edit', to: :edit, as: 'edit'
43
- match '/custom_action', to: :custom_action, as: 'member_action'
45
+ get '/history', to: :history, as: 'history'
46
+ match '/custom_action', to: :custom_action, as: 'member_action', via: :all
44
47
  get '/', to: :show, as: 'show'
45
- put '/', to: :update, as: 'update'
48
+ patch '/', to: :update, as: 'update'
46
49
  delete '/', to: :destroy, as: 'destroy'
47
50
  end
48
51
 
@@ -1,9 +1,8 @@
1
1
  class CreateUsers < ActiveRecord::Migration
2
- def self.up
2
+ def change
3
3
  create_table(:users) do |t|
4
4
  t.string :login
5
5
  t.integer :user_role_id, limit: 1, default: 1
6
- t.integer :trust_state, limit: 1, default: 1
7
6
  t.integer :gender, limit: 1, default: 1
8
7
  t.string :first_name
9
8
  t.string :last_name
@@ -50,18 +49,15 @@ class CreateUsers < ActiveRecord::Migration
50
49
  t.string :unlock_token # Only if unlock strategy is :email or :both
51
50
  t.datetime :locked_at
52
51
 
53
- # Token authenticatable
54
- # t.string :authentication_token
52
+ ## Token authenticatable
53
+ ## t.string :authentication_token
55
54
 
56
55
  t.timestamps
57
56
  end
58
57
 
59
- add_index :users, :email, unique: true
60
- add_index :users, :reset_password_token, unique: true
61
- add_index :users, :confirmation_token, unique: true
62
- end
63
-
64
- def self.down
65
- drop_table :users
58
+ add_index :users, :email, :unique => true
59
+ add_index :users, :reset_password_token, :unique => true
60
+ add_index :users, :confirmation_token, :unique => true
61
+ add_index :users, :unlock_token, :unique => true
66
62
  end
67
63
  end
@@ -1,5 +1,5 @@
1
1
  class CreateAssets < ActiveRecord::Migration
2
- def self.up
2
+ def change
3
3
  create_table :assets do |t|
4
4
  t.string :data_file_name, null: false
5
5
  t.string :data_content_type
@@ -19,16 +19,16 @@ class CreateAssets < ActiveRecord::Migration
19
19
 
20
20
  t.boolean :is_main, default: false, null: false
21
21
  t.string :original_name
22
+ t.string :data_secure_token, limit: 20
23
+ t.string :cached_alt
24
+ t.string :cached_title
22
25
 
23
26
  t.timestamps
24
27
  end
25
28
 
26
29
  add_index :assets, [:assetable_type, :type, :assetable_id]
27
30
  add_index :assets, :guid
31
+ add_index :assets, :data_secure_token
28
32
  add_index :assets, :user_id
29
33
  end
30
-
31
- def self.down
32
- drop_table :assets
33
- end
34
34
  end
@@ -1,7 +1,7 @@
1
1
  class CreateHeaders < ActiveRecord::Migration
2
- def self.up
2
+ def change
3
3
  create_table :headers do |t|
4
- t.string :headerable_type, limit: 30, null: false
4
+ t.string :headerable_type, limit: 50, null: false
5
5
  t.integer :headerable_id, null: false
6
6
 
7
7
  t.timestamps
@@ -9,8 +9,4 @@ class CreateHeaders < ActiveRecord::Migration
9
9
 
10
10
  add_index :headers, [:headerable_type, :headerable_id], unique: true
11
11
  end
12
-
13
- def self.down
14
- drop_table :headers
15
- end
16
12
  end
@@ -1,5 +1,5 @@
1
1
  class CreateStaticPages < ActiveRecord::Migration
2
- def self.up
2
+ def change
3
3
  create_table :static_pages do |t|
4
4
  t.integer :structure_id, null: false
5
5
  t.references :user
@@ -11,8 +11,4 @@ class CreateStaticPages < ActiveRecord::Migration
11
11
  add_index :static_pages, :user_id
12
12
  add_index :static_pages, :structure_id
13
13
  end
14
-
15
- def self.down
16
- drop_table :static_pages
17
- end
18
14
  end
@@ -1,9 +1,9 @@
1
1
  class CreateStructures < ActiveRecord::Migration
2
- def self.up
2
+ def change
3
3
  create_table :structures do |t|
4
4
  t.string :slug, null: false
5
- t.integer :kind, limit: 1, default: 1
6
- t.integer :position, limit: 2, default: 1
5
+ t.integer :structure_type_id, limit: 1, default: 1
6
+ t.integer :position_type_id, limit: 1, default: 1
7
7
  t.references :user
8
8
  t.boolean :is_visible, default: true, null: false
9
9
 
@@ -15,13 +15,9 @@ class CreateStructures < ActiveRecord::Migration
15
15
  t.timestamps
16
16
  end
17
17
 
18
- add_index :structures, :user_id
19
- add_index :structures, [:slug, :kind], unique: true
18
+ add_index :structures, [:slug, :structure_type_id], unique: true
19
+ add_index :structures, :position_type_id
20
20
  add_index :structures, :parent_id
21
21
  add_index :structures, [:lft, :rgt]
22
22
  end
23
-
24
- def self.down
25
- drop_table :structures
26
- end
27
23
  end
@@ -1,13 +1,15 @@
1
1
  class BaseTranslations < ActiveRecord::Migration
2
2
  def self.up
3
3
  StaticPage.create_translation_table! title: :string, content: :text
4
- Header.create_translation_table! title: :string, keywords: :string, description: :text
4
+ Header.create_translation_table! title: :string, h1: :string, keywords: :string, description: :text, seo_block: :text
5
5
  Structure.create_translation_table! title: :string, redirect_url: :string
6
+ Asset.create_translation_table! name: :string, alt: :string
6
7
  end
7
8
 
8
9
  def self.down
9
10
  StaticPage.drop_translation_table!
10
11
  Header.drop_translation_table!
11
12
  Structure.drop_translation_table!
13
+ Asset.drop_translation_table!
12
14
  end
13
15
  end
@@ -1,18 +1,18 @@
1
1
  class CreateAdminComments < ActiveRecord::Migration
2
2
  def change
3
3
  create_table :admin_comments do |t|
4
- t.integer :user_id
5
- t.integer :author_id, null: false
6
- t.string :author_name
4
+ t.references :user
5
+ t.string :user_name
7
6
  t.integer :resource_id, null: false
8
- t.string :resource_type, limit: 30, null: false
7
+ t.string :resource_type, limit: 50, null: false
8
+ t.references :resource_user
9
9
  t.text :body
10
10
 
11
11
  t.timestamps
12
12
  end
13
13
 
14
14
  add_index :admin_comments, :user_id
15
- add_index :admin_comments, :author_id
15
+ add_index :admin_comments, :resource_user_id
16
16
  add_index :admin_comments, [:resource_type, :resource_id]
17
17
  end
18
18
  end
@@ -0,0 +1,20 @@
1
+ class CreateTracks < ActiveRecord::Migration
2
+ def change
3
+ create_table :tracks do |t|
4
+ t.string :name
5
+ t.string :key
6
+ t.belongs_to :trackable, polymorphic: true
7
+ t.belongs_to :user
8
+ t.belongs_to :owner
9
+ t.column :trackable_changes, :mediumtext
10
+ t.text :parameters
11
+
12
+ t.timestamps
13
+ end
14
+
15
+ add_index :tracks, [:trackable_type, :trackable_id]
16
+ add_index :tracks, :owner_id
17
+ add_index :tracks, :user_id
18
+ add_index :tracks, :key
19
+ end
20
+ end
data/lib/ab_admin.rb CHANGED
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  require 'inherited_resources'
3
2
  require 'rack-pjax'
4
3
  require 'has_scope'
@@ -11,7 +10,6 @@ require 'ab_admin/engine'
11
10
  module AbAdmin
12
11
  autoload :Utils, 'ab_admin/utils'
13
12
  autoload :Devise, 'ab_admin/devise'
14
- autoload :MenuBuilder, 'ab_admin/menu_builder'
15
13
  autoload :AbstractResource, 'ab_admin/abstract_resource'
16
14
 
17
15
  module Config
@@ -28,6 +26,14 @@ module AbAdmin
28
26
  autoload :OptionalDisplay, 'ab_admin/config/optional_display'
29
27
  end
30
28
 
29
+ module Menu
30
+ autoload :Builder, 'ab_admin/menu/builder'
31
+ autoload :AbstractBuilder, 'ab_admin/menu/abstract_builder'
32
+ autoload :Group, 'ab_admin/menu/group'
33
+ autoload :BaseGroup, 'ab_admin/menu/base_group'
34
+ autoload :Item, 'ab_admin/menu/item'
35
+ end
36
+
31
37
  module Utils
32
38
  autoload :XlsDocument, 'ab_admin/utils/xls_document'
33
39
  autoload :CsvDocument, 'ab_admin/utils/csv_document'
@@ -51,6 +57,9 @@ module AbAdmin
51
57
  autoload :NestedSet, 'ab_admin/concerns/nested_set'
52
58
  autoload :Validations, 'ab_admin/concerns/validations'
53
59
  autoload :Reloadable, 'ab_admin/concerns/reloadable'
60
+ autoload :HasTracking, 'ab_admin/concerns/has_tracking'
61
+ autoload :AssetHumanNames, 'ab_admin/concerns/asset_human_names'
62
+ autoload :Fileuploads, 'ab_admin/concerns/fileuploads'
54
63
  end
55
64
 
56
65
  module Controllers
@@ -58,6 +67,7 @@ module AbAdmin
58
67
  autoload :HeadOptions, 'ab_admin/controllers/head_options'
59
68
  autoload :Tree, 'ab_admin/controllers/tree'
60
69
  autoload :CanCanManagerResource, 'ab_admin/controllers/can_can_manager_resource'
70
+ autoload :Fv, 'ab_admin/controllers/fv'
61
71
  end
62
72
 
63
73
  module Mailers
@@ -74,6 +84,8 @@ module AbAdmin
74
84
  autoload :Locator, 'ab_admin/models/locator'
75
85
  autoload :Settings, 'ab_admin/models/settings'
76
86
  autoload :User, 'ab_admin/models/user'
87
+ autoload :Track, 'ab_admin/models/track'
88
+ autoload :AdminComment, 'ab_admin/models/admin_comment'
77
89
  end
78
90
 
79
91
  module Views
@@ -84,13 +96,16 @@ module AbAdmin
84
96
  autoload :FormBuilder, 'ab_admin/views/form_builder'
85
97
  autoload :SearchFormBuilder, 'ab_admin/views/search_form_builder'
86
98
  autoload :UrlForRoutes, 'ab_admin/views/url_for_routes'
99
+ autoload :ContentOnlyWrapper, 'ab_admin/views/content_only_wrapper'
87
100
 
88
101
  module Inputs
89
102
  autoload :CkeditorInput, 'ab_admin/views/inputs/ckeditor_input'
90
103
  autoload :ColorInput, 'ab_admin/views/inputs/color_input'
91
104
  autoload :EditorInput, 'ab_admin/views/inputs/editor_input'
92
- autoload :DateTimeInput, 'ab_admin/views/inputs/date_time_input'
105
+ autoload :DateTimePickerInput, 'ab_admin/views/inputs/date_time_picker_input'
93
106
  autoload :TokenInput, 'ab_admin/views/inputs/token_input'
107
+ autoload :CaptureBlockInput, 'ab_admin/views/inputs/capture_block_input'
108
+ autoload :UploaderInput, 'ab_admin/views/inputs/uploader_input'
94
109
  end
95
110
  end
96
111
 
@@ -125,7 +140,7 @@ module AbAdmin
125
140
  @@image_types = %w(image/jpeg image/png image/gif image/jpg image/pjpeg image/tiff image/x-png)
126
141
 
127
142
  mattr_accessor :display_name_methods
128
- @@display_name_methods = [:title, :name, :full_name]
143
+ @@display_name_methods = [:title, :name, :full_name, :id]
129
144
 
130
145
  mattr_accessor :translate_models
131
146
  @@translate_models = %w(User Asset Structure StaticPage Header AdminComment)
@@ -133,6 +148,23 @@ module AbAdmin
133
148
  mattr_accessor :assets
134
149
  @@assets = %w(ab_admin/devise.css bootstrap.js)
135
150
 
151
+ mattr_accessor :test_settings
152
+ @@test_settings = {}
153
+
154
+ mattr_accessor :footer_notes
155
+
156
+ mattr_accessor :default_url_options
157
+
158
+ mattr_accessor :locale
159
+
160
+ mattr_accessor :fileupload_url
161
+ @@fileupload_url = '/admin/assets'
162
+
163
+ mattr_accessor :uploads_dir
164
+ @@uploads_dir = 'uploads'
165
+
166
+ mattr_accessor :base_url
167
+
136
168
  extend Utils
137
169
 
138
170
  def self.setup
@@ -4,14 +4,17 @@ module AbAdmin
4
4
 
5
5
  include Singleton
6
6
 
7
- ACTIONS = [:index, :show, :new, :edit, :create, :update, :destroy, :preview, :batch, :rebuild, :custom_action] unless self.const_defined?(:ACTIONS)
7
+ unless self.const_defined?(:ACTIONS)
8
+ ACTIONS = [:index, :show, :new, :edit, :create, :update, :destroy, :preview, :batch, :rebuild, :custom_action, :history]
9
+ end
8
10
 
9
- attr_accessor :table, :search, :export, :form, :show, :preview_path, :actions, :settings, :custom_settings,
11
+ attr_accessor :model, :table, :search, :export, :form, :modal_form, :show, :preview_path, :actions, :custom_settings,
10
12
  :batch_action_list, :action_items, :disabled_action_items, :resource_action_items, :tree_node_renderer,
11
13
  :parent_resources, :custom_actions
12
14
 
13
15
  def initialize
14
16
  @actions = ACTIONS
17
+ @custom_settings = {}
15
18
  @batch_action_list = [AbAdmin::Config::BatchAction.new(:destroy, confirm: I18n.t('admin.delete_confirmation'))]
16
19
  @action_items = []
17
20
  @disabled_action_items = []
@@ -25,7 +28,7 @@ module AbAdmin
25
28
 
26
29
  def add_admin_addition_to_model
27
30
  return unless @model
28
- @model.send(:include, AbAdmin::Concerns::AdminAddition) unless @model.included_modules.include?(AbAdmin::Concerns::AdminAddition)
31
+ @model.send(:include, AbAdmin::Concerns::AdminAddition) unless has_module?(AbAdmin::Concerns::AdminAddition)
29
32
  end
30
33
 
31
34
  class << self
@@ -45,6 +48,10 @@ module AbAdmin
45
48
  instance.form = ::AbAdmin::Config::Form.new(options, &block)
46
49
  end
47
50
 
51
+ def modal_form(options={}, &block)
52
+ instance.modal_form = ::AbAdmin::Config::ModalForm.new(options, &block)
53
+ end
54
+
48
55
  def show(options={}, &block)
49
56
  instance.show = ::AbAdmin::Config::Show.new(options, &block)
50
57
  end
@@ -66,13 +73,20 @@ module AbAdmin
66
73
 
67
74
  def settings(value)
68
75
  instance.custom_settings = value
76
+ if instance.custom_settings[:history]
77
+ instance.custom_settings[:history] = {} unless instance.custom_settings[:history].is_a?(Hash)
78
+ instance.model.send(:include, AbAdmin::Concerns::HasTracking) unless instance.has_module?(AbAdmin::Concerns::HasTracking)
79
+ end
80
+ if instance.custom_settings[:comments]
81
+ instance.custom_settings[:comments] = {} unless instance.custom_settings[:comments].is_a?(Hash)
82
+ end
69
83
  end
70
84
 
71
85
  def batch_action(name, options={}, &block)
72
- if !options
73
- instance.batch_action_list.reject!{|a| a.name == name }
86
+ if options
87
+ instance.batch_action_list << AbAdmin::Config::BatchAction.new(name.to_sym, options, &block)
74
88
  else
75
- instance.batch_action_list << AbAdmin::Config::BatchAction.new(name, options, &block)
89
+ instance.batch_action_list.reject!{|a| a.name == name.to_sym }
76
90
  end
77
91
  end
78
92
 
@@ -129,7 +143,10 @@ module AbAdmin
129
143
  def default_action_items_for(action, for_resource)
130
144
  @default_action_items_for[action] ||= begin
131
145
  base = [:new]
132
- base += [:edit, :show, :destroy, :preview] if for_resource
146
+ if for_resource
147
+ base += [:edit, :show, :destroy, :preview]
148
+ base << :history if custom_settings[:history] && !custom_settings[:history][:sidebar]
149
+ end
133
150
  disabled = action == :new ? [] : [action]
134
151
  (base - disabled - @disabled_action_items) & @actions
135
152
  end
@@ -145,6 +162,10 @@ module AbAdmin
145
162
  custom_action
146
163
  end
147
164
 
165
+ def has_module?(module_constant)
166
+ model.included_modules.include?(module_constant)
167
+ end
168
+
148
169
  end
149
170
 
150
171
  end
@@ -11,6 +11,13 @@ module AbAdmin
11
11
  include ::CarrierWave::MimeTypes
12
12
  include AbAdmin::Utils::EvalHelpers
13
13
 
14
+ class_attribute :transliterate
15
+ self.transliterate = true
16
+
17
+ attr_accessor :internal_identifier
18
+
19
+ before :cache, :save_original_name
20
+
14
21
  storage :file
15
22
 
16
23
  process :set_content_type
@@ -23,9 +30,81 @@ module AbAdmin
23
30
 
24
31
  process :set_model_info
25
32
 
26
- # default store assets path
33
+ def save_original_name(file)
34
+ model.original_name ||= file.original_filename if file.respond_to?(:original_filename)
35
+ end
36
+
37
+ def full_filename(for_file=filename)
38
+ ext = File.extname(for_file)
39
+ human_filename_part = for_file.chomp(ext)
40
+ tech_filename_part = "#{version_name || secure_token}#{ext}"
41
+ human_filename_part == secure_token ? tech_filename_part : "#{human_filename_part}_#{tech_filename_part}"
42
+ end
43
+
44
+ def full_original_filename
45
+ "#{version_name || secure_token}#{File.extname(store_filename)}"
46
+ end
47
+
48
+ # use secure token in the filename for non processed image
49
+ def secure_token
50
+ model.data_secure_token ||= AbAdmin.friendly_token(20).downcase
51
+ end
52
+
53
+ def store_model_filename(record)
54
+ old_file_name = filename
55
+ new_file_name = model_filename(old_file_name, record)
56
+ return if new_file_name.blank? || new_file_name == old_file_name
57
+ rename_via_move(new_file_name)
58
+ end
59
+
60
+ alias_method :store_filename, :filename
61
+
62
+ def filename
63
+ internal_identifier || model.send("#{mounted_as}_file_name") || (store_filename && "#{secure_token}#{File.extname(store_filename)}")
64
+ end
65
+
66
+ def write_internal_identifier(internal_identifier)
67
+ self.internal_identifier = internal_identifier
68
+ versions.values.each{|v| v.internal_identifier = internal_identifier }
69
+ end
70
+
71
+ # transliterate original filename
72
+ # allow to build custom filename
73
+ def model_filename(base_filename, record)
74
+ custom_file_name = model.build_filename(base_filename, record)
75
+ return unless custom_file_name
76
+ normalize_filename(custom_file_name) + File.extname(base_filename)
77
+ end
78
+
79
+ def normalize_filename(raw_filename)
80
+ I18n.transliterate(raw_filename).parameterize('_').gsub(/[\-_]+/, '_').downcase
81
+ end
82
+
83
+ # rename files via move
84
+ def rename_via_move(new_file_name)
85
+ dir = File.dirname(path)
86
+
87
+ moves = []
88
+ versions.values.unshift(self).each do |v|
89
+ from_path = File.join(dir, v.full_filename)
90
+ to_path = File.join(dir, v.full_filename(new_file_name))
91
+ return false if from_path == to_path || !File.exists?(from_path)
92
+ moves << [from_path, to_path]
93
+ end
94
+ moves.each { |move| FileUtils.mv(*move) }
95
+
96
+ write_internal_identifier new_file_name
97
+ model.send("write_#{mounted_as}_identifier")
98
+ retrieve_from_store!(new_file_name)
99
+ new_file_name
100
+ end
101
+
102
+ private :write_internal_identifier, :store_filename, :model_filename
103
+
104
+ # prevent large number of subdirectories
27
105
  def store_dir
28
- "uploads/#{model.class.to_s.underscore}/#{model.id}"
106
+ str_id = model.id.to_s.rjust(4, '0')
107
+ [AbAdmin.uploads_dir, model.class.to_s.underscore, str_id[0..2], str_id[3..-1]].join('/')
29
108
  end
30
109
 
31
110
  # Strips out all embedded information from the image
@@ -86,10 +165,11 @@ module AbAdmin
86
165
  end
87
166
  end
88
167
 
89
- def watermark(path_to_file, gravity='SouthEast')
168
+ def watermark(watermark_path, gravity='SouthEast')
90
169
  manipulate! do |img|
91
- logo = ::MiniMagick::Image.open(path_to_file)
92
- img.composite(logo) { |c| c.gravity gravity }
170
+ resolved_path = watermark_path.is_a?(Symbol) ? send(watermark_path) : watermark_path
171
+ watermark_image = ::MiniMagick::Image.open(resolved_path)
172
+ img.composite(watermark_image) { |c| c.gravity gravity }
93
173
  end
94
174
  end
95
175