ab_admin 0.3.6 → 0.4.0

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