alchemy_cms 2.1.12 → 2.2.rc1

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 (405) hide show
  1. data/.travis.yml +1 -1
  2. data/Gemfile +20 -16
  3. data/README.md +11 -7
  4. data/alchemy_cms.gemspec +31 -29
  5. data/app/assets/javascripts/alchemy/alchemy.base.js +234 -233
  6. data/app/assets/javascripts/alchemy/alchemy.buttons.js +26 -26
  7. data/app/assets/javascripts/alchemy/alchemy.datepicker.js +32 -32
  8. data/app/assets/javascripts/alchemy/alchemy.dirty.js +78 -78
  9. data/app/assets/javascripts/alchemy/alchemy.dragndrop.js +103 -103
  10. data/app/assets/javascripts/alchemy/alchemy.element_editor_selector.js +84 -84
  11. data/app/assets/javascripts/alchemy/alchemy.elements_window.js +88 -88
  12. data/app/assets/javascripts/alchemy/alchemy.file_progress.js +92 -0
  13. data/app/assets/javascripts/alchemy/alchemy.growler.js +23 -23
  14. data/app/assets/javascripts/alchemy/alchemy.html5.js +23 -0
  15. data/app/assets/javascripts/alchemy/alchemy.image_cropper.js +53 -52
  16. data/app/assets/javascripts/alchemy/alchemy.jquery_loader.js +33 -30
  17. data/app/assets/javascripts/alchemy/alchemy.js +2 -0
  18. data/app/assets/javascripts/alchemy/alchemy.js_extensions.js +14 -14
  19. data/app/assets/javascripts/alchemy/alchemy.link_overlay.js.coffee +181 -0
  20. data/app/assets/javascripts/alchemy/alchemy.menubar.js +48 -48
  21. data/app/assets/javascripts/alchemy/alchemy.page_sorter.js +39 -39
  22. data/app/assets/javascripts/alchemy/alchemy.preview.js +81 -83
  23. data/app/assets/javascripts/alchemy/alchemy.preview_window.js +86 -86
  24. data/app/assets/javascripts/alchemy/alchemy.routes.js.erb +23 -23
  25. data/app/assets/javascripts/alchemy/alchemy.swf_upload.js +208 -353
  26. data/app/assets/javascripts/alchemy/alchemy.uploader.js +279 -0
  27. data/app/assets/javascripts/alchemy/alchemy.windows.js +268 -268
  28. data/app/assets/javascripts/tiny_mce/plugins/alchemy_link/editor_plugin.js +42 -42
  29. data/app/assets/stylesheets/alchemy/_defaults.scss +89 -89
  30. data/app/assets/stylesheets/alchemy/base.css.scss +790 -804
  31. data/app/assets/stylesheets/alchemy/buttons.css.scss +263 -264
  32. data/app/assets/stylesheets/alchemy/dashboard.css.scss +66 -66
  33. data/app/assets/stylesheets/alchemy/elements.css.scss +575 -564
  34. data/app/assets/stylesheets/alchemy/flash.css.scss +45 -45
  35. data/app/assets/stylesheets/alchemy/frame.css.scss +262 -262
  36. data/app/assets/stylesheets/alchemy/icons.css.scss +86 -86
  37. data/app/assets/stylesheets/alchemy/jquery-ui.alchemy.css.scss +706 -707
  38. data/app/assets/stylesheets/alchemy/jquery.Jcrop.css.scss +46 -27
  39. data/app/assets/stylesheets/alchemy/jquery.sb.css.scss +107 -107
  40. data/app/assets/stylesheets/alchemy/login.css.scss +40 -38
  41. data/app/assets/stylesheets/alchemy/menubar.css.scss +84 -82
  42. data/app/assets/stylesheets/alchemy/modules.css.scss +9 -9
  43. data/app/assets/stylesheets/alchemy/pagination.css.scss +49 -49
  44. data/app/assets/stylesheets/alchemy/print.css +7 -7
  45. data/app/assets/stylesheets/alchemy/sitemap.css.scss +185 -154
  46. data/app/assets/stylesheets/alchemy/standard_set.css +205 -206
  47. data/app/assets/stylesheets/alchemy/tables.css.scss +94 -60
  48. data/app/assets/stylesheets/alchemy/tinymce_content.css.scss +34 -34
  49. data/app/assets/stylesheets/alchemy/tinymce_dialog.css.scss +177 -177
  50. data/app/assets/stylesheets/alchemy/upload.css.scss +68 -45
  51. data/app/assets/stylesheets/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css.scss +222 -221
  52. data/app/controllers/alchemy/admin/attachments_controller.rb +100 -100
  53. data/app/controllers/alchemy/admin/base_controller.rb +116 -116
  54. data/app/controllers/alchemy/admin/clipboard_controller.rb +44 -44
  55. data/app/controllers/alchemy/admin/contents_controller.rb +55 -55
  56. data/app/controllers/alchemy/admin/dashboard_controller.rb +12 -11
  57. data/app/controllers/alchemy/admin/elements_controller.rb +109 -109
  58. data/app/controllers/alchemy/admin/essence_audios_controller.rb +8 -8
  59. data/app/controllers/alchemy/admin/essence_files_controller.rb +20 -20
  60. data/app/controllers/alchemy/admin/essence_flashes_controller.rb +8 -8
  61. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +81 -81
  62. data/app/controllers/alchemy/admin/essence_videos_controller.rb +8 -8
  63. data/app/controllers/alchemy/admin/languages_controller.rb +16 -4
  64. data/app/controllers/alchemy/admin/layoutpages_controller.rb +9 -9
  65. data/app/controllers/alchemy/admin/pages_controller.rb +249 -248
  66. data/app/controllers/alchemy/admin/pictures_controller.rb +105 -105
  67. data/app/controllers/alchemy/admin/resources_controller.rb +111 -166
  68. data/app/controllers/alchemy/admin/trash_controller.rb +18 -18
  69. data/app/controllers/alchemy/admin/users_controller.rb +69 -69
  70. data/app/controllers/alchemy/attachments_controller.rb +27 -27
  71. data/app/controllers/alchemy/base_controller.rb +159 -155
  72. data/app/controllers/alchemy/elements_controller.rb +16 -16
  73. data/app/controllers/alchemy/messages_controller.rb +59 -59
  74. data/app/controllers/alchemy/pages_controller.rb +194 -198
  75. data/app/controllers/alchemy/pictures_controller.rb +57 -57
  76. data/app/controllers/alchemy/user_sessions_controller.rb +70 -70
  77. data/app/helpers/alchemy/admin/attachments_helper.rb +7 -7
  78. data/app/helpers/alchemy/admin/base_helper.rb +425 -425
  79. data/app/helpers/alchemy/admin/contents_helper.rb +72 -72
  80. data/app/helpers/alchemy/admin/elements_helper.rb +108 -107
  81. data/app/helpers/alchemy/admin/essences_helper.rb +108 -108
  82. data/app/helpers/alchemy/admin/pages_helper.rb +42 -42
  83. data/app/helpers/alchemy/admin/pictures_helper.rb +26 -26
  84. data/app/helpers/alchemy/base_helper.rb +90 -90
  85. data/app/helpers/alchemy/elements_helper.rb +167 -168
  86. data/app/helpers/alchemy/essences_helper.rb +133 -133
  87. data/app/helpers/alchemy/pages_helper.rb +515 -526
  88. data/app/helpers/alchemy/pictures_helper.rb +19 -0
  89. data/app/mailers/alchemy/messages.rb +13 -13
  90. data/app/mailers/alchemy/notifications.rb +19 -19
  91. data/app/models/alchemy.rb +3 -3
  92. data/app/models/alchemy/attachment.rb +52 -78
  93. data/app/models/alchemy/cell.rb +48 -48
  94. data/app/models/alchemy/content.rb +196 -196
  95. data/app/models/alchemy/element.rb +500 -490
  96. data/app/models/alchemy/essence_audio.rb +7 -7
  97. data/app/models/alchemy/essence_date.rb +10 -10
  98. data/app/models/alchemy/essence_file.rb +7 -7
  99. data/app/models/alchemy/essence_flash.rb +6 -6
  100. data/app/models/alchemy/essence_html.rb +9 -9
  101. data/app/models/alchemy/essence_picture.rb +17 -17
  102. data/app/models/alchemy/essence_richtext.rb +53 -53
  103. data/app/models/alchemy/essence_text.rb +21 -21
  104. data/app/models/alchemy/essence_video.rb +7 -7
  105. data/app/models/alchemy/folded_page.rb +3 -3
  106. data/app/models/alchemy/language.rb +91 -91
  107. data/app/models/alchemy/language/code.rb +14 -14
  108. data/app/models/alchemy/message.rb +48 -45
  109. data/app/models/alchemy/page.rb +555 -558
  110. data/app/models/alchemy/picture.rb +100 -99
  111. data/app/models/alchemy/user.rb +76 -74
  112. data/app/models/alchemy/user_session.rb +8 -8
  113. data/app/sweepers/alchemy/content_sweeper.rb +15 -15
  114. data/app/sweepers/alchemy/pages_sweeper.rb +50 -50
  115. data/app/sweepers/alchemy/pictures_sweeper.rb +14 -14
  116. data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +23 -23
  117. data/app/views/alchemy/admin/attachments/_attachment.html.erb +56 -56
  118. data/app/views/alchemy/admin/attachments/_file_to_assign.html.erb +15 -15
  119. data/app/views/alchemy/admin/attachments/_files_list.html.erb +16 -16
  120. data/app/views/alchemy/admin/attachments/create.js.erb +2 -2
  121. data/app/views/alchemy/admin/attachments/destroy.js.erb +3 -3
  122. data/app/views/alchemy/admin/attachments/edit.html.erb +10 -10
  123. data/app/views/alchemy/admin/attachments/index.html.erb +14 -14
  124. data/app/views/alchemy/admin/attachments/new.html.erb +9 -9
  125. data/app/views/alchemy/admin/clipboard/index.html.erb +21 -21
  126. data/app/views/alchemy/admin/clipboard/insert.js.erb +5 -5
  127. data/app/views/alchemy/admin/contents/_missing.html.erb +1 -1
  128. data/app/views/alchemy/admin/contents/create.js.erb +33 -33
  129. data/app/views/alchemy/admin/contents/destroy.js.erb +5 -5
  130. data/app/views/alchemy/admin/contents/new.html.erb +13 -13
  131. data/app/views/alchemy/admin/contents/order.js.erb +2 -2
  132. data/app/views/alchemy/admin/dashboard/index.html.erb +96 -92
  133. data/app/views/alchemy/admin/elements/_add_content.html.erb +12 -12
  134. data/app/views/alchemy/admin/elements/_element.html.erb +3 -3
  135. data/app/views/alchemy/admin/elements/_new_element_form.html.erb +28 -28
  136. data/app/views/alchemy/admin/elements/_picture_editor.html.erb +21 -21
  137. data/app/views/alchemy/admin/elements/create.js.erb +32 -32
  138. data/app/views/alchemy/admin/elements/index.html.erb +2 -2
  139. data/app/views/alchemy/admin/elements/new.html.erb +31 -31
  140. data/app/views/alchemy/admin/elements/order.js.erb +3 -3
  141. data/app/views/alchemy/admin/elements/trash.js.erb +13 -13
  142. data/app/views/alchemy/admin/elements/update.js.erb +6 -6
  143. data/app/views/alchemy/admin/essence_files/assign.js.erb +6 -6
  144. data/app/views/alchemy/admin/essence_pictures/crop.html.erb +32 -32
  145. data/app/views/alchemy/admin/essence_pictures/destroy.js.erb +1 -1
  146. data/app/views/alchemy/admin/essence_pictures/edit.html.erb +1 -1
  147. data/app/views/alchemy/admin/essence_pictures/update.js.erb +11 -11
  148. data/app/views/alchemy/admin/languages/_form.html.erb +51 -45
  149. data/app/views/alchemy/admin/languages/_language.html.erb +45 -45
  150. data/app/views/alchemy/admin/languages/_table.html.erb +25 -25
  151. data/app/views/alchemy/admin/layoutpages/index.html.erb +35 -35
  152. data/app/views/alchemy/admin/pages/_create_language_form.html.erb +42 -42
  153. data/app/views/alchemy/admin/pages/_external_link.html.erb +1 -1
  154. data/app/views/alchemy/admin/pages/_new_page_form.html.erb +27 -27
  155. data/app/views/alchemy/admin/pages/_page.html.erb +112 -112
  156. data/app/views/alchemy/admin/pages/_sitemap.html.erb +1 -1
  157. data/app/views/alchemy/admin/pages/configure.html.erb +71 -69
  158. data/app/views/alchemy/admin/pages/configure_external.html.erb +38 -38
  159. data/app/views/alchemy/admin/pages/destroy.js.erb +10 -10
  160. data/app/views/alchemy/admin/pages/edit.html.erb +165 -165
  161. data/app/views/alchemy/admin/pages/fold.js.erb +2 -2
  162. data/app/views/alchemy/admin/pages/index.html.erb +66 -66
  163. data/app/views/alchemy/admin/pages/locked.html.erb +1 -1
  164. data/app/views/alchemy/admin/pages/new.html.erb +40 -40
  165. data/app/views/alchemy/admin/pages/sort.js.erb +4 -4
  166. data/app/views/alchemy/admin/pages/unlock.js.erb +6 -6
  167. data/app/views/alchemy/admin/pages/update.js.erb +19 -19
  168. data/app/views/alchemy/admin/partials/_flash.html.erb +2 -2
  169. data/app/views/alchemy/admin/partials/_flash_notices.html.erb +1 -1
  170. data/app/views/alchemy/admin/partials/_flash_upload.html.erb +38 -0
  171. data/app/views/alchemy/admin/partials/_language_tree_select.html.erb +15 -15
  172. data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +8 -8
  173. data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +35 -35
  174. data/app/views/alchemy/admin/partials/_search_form.html.erb +14 -14
  175. data/app/views/alchemy/admin/partials/_sub_navigation_tab.html.erb +6 -6
  176. data/app/views/alchemy/admin/partials/_upload_form.html.erb +56 -118
  177. data/app/views/alchemy/admin/pictures/_archive_overlay.html.erb +11 -11
  178. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +71 -71
  179. data/app/views/alchemy/admin/pictures/_picture.html.erb +32 -32
  180. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +26 -26
  181. data/app/views/alchemy/admin/pictures/_pictures_list.html.erb +6 -6
  182. data/app/views/alchemy/admin/pictures/create.js.erb +7 -7
  183. data/app/views/alchemy/admin/pictures/index.html.erb +67 -67
  184. data/app/views/alchemy/admin/pictures/show_in_window.html.erb +5 -4
  185. data/app/views/alchemy/admin/resources/_form.html.erb +25 -19
  186. data/app/views/alchemy/admin/resources/_resource.html.erb +37 -36
  187. data/app/views/alchemy/admin/resources/_table.html.erb +17 -17
  188. data/app/views/alchemy/admin/resources/destroy.js.erb +1 -1
  189. data/app/views/alchemy/admin/resources/index.html.erb +14 -14
  190. data/app/views/alchemy/admin/trash/index.html.erb +20 -20
  191. data/app/views/alchemy/admin/users/_table.html.erb +52 -52
  192. data/app/views/alchemy/admin/users/_user.html.erb +35 -36
  193. data/app/views/alchemy/admin/users/index.html.erb +26 -27
  194. data/app/views/alchemy/base/error_notice.html.erb +2 -2
  195. data/app/views/alchemy/base/update.js.erb +1 -1
  196. data/app/views/alchemy/elements/_contactform_view.html.erb +76 -76
  197. data/app/views/alchemy/elements/_download_view.html.erb +1 -1
  198. data/app/views/alchemy/elements/_editor_not_found.html.erb +3 -3
  199. data/app/views/alchemy/elements/_searchresult_view.html.erb +2 -2
  200. data/app/views/alchemy/elements/_sitemap_editor.html.erb +1 -1
  201. data/app/views/alchemy/essences/_essence_audio_view.html.erb +13 -13
  202. data/app/views/alchemy/essences/_essence_date_editor.html.erb +10 -10
  203. data/app/views/alchemy/essences/_essence_file_editor.html.erb +62 -62
  204. data/app/views/alchemy/essences/_essence_file_view.html.erb +8 -8
  205. data/app/views/alchemy/essences/_essence_flash_view.html.erb +19 -19
  206. data/app/views/alchemy/essences/_essence_html_editor.html.erb +6 -6
  207. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +73 -73
  208. data/app/views/alchemy/essences/_essence_picture_view.html.erb +34 -34
  209. data/app/views/alchemy/essences/_essence_richtext_editor.html.erb +7 -7
  210. data/app/views/alchemy/essences/_essence_text_editor.html.erb +8 -8
  211. data/app/views/alchemy/navigation/_image_link.html.erb +12 -12
  212. data/app/views/alchemy/navigation/_link.html.erb +13 -13
  213. data/app/views/alchemy/navigation/_renderer.html.erb +17 -17
  214. data/app/views/alchemy/page_layouts/_layout_footer.html.erb +1 -1
  215. data/app/views/alchemy/page_layouts/_layout_header.html.erb +1 -1
  216. data/app/views/alchemy/pages/show.rss.builder +14 -14
  217. data/app/views/alchemy/search/_result.html.erb +7 -7
  218. data/app/views/alchemy/user_sessions/leave.html.erb +9 -9
  219. data/app/views/alchemy/user_sessions/login.html.erb +39 -39
  220. data/app/views/alchemy/user_sessions/logout.html.erb +1 -1
  221. data/app/views/layouts/alchemy/admin.html.erb +81 -81
  222. data/app/views/layouts/alchemy/login.html.erb +36 -36
  223. data/app/views/layouts/alchemy/pages.html.erb +48 -27
  224. data/bin/alchemy +136 -134
  225. data/config/alchemy/config.yml +13 -9
  226. data/config/locales/alchemy.de.yml +24 -30
  227. data/config/locales/alchemy.en.yml +11 -28
  228. data/config/routes.rb +146 -146
  229. data/db/migrate/20100607193638_create_essence_pictures.rb +3 -3
  230. data/db/migrate/20101109150312_alter_pages_visible_column_default.rb +1 -1
  231. data/db/migrate/20101109151812_create_languages.rb +3 -3
  232. data/db/migrate/20110115123343_remove_css_class_default_from_essence_pictures.rb +3 -3
  233. data/db/migrate/20110224105120_change_pages_visible_default.rb +3 -3
  234. data/db/migrate/20110228182659_remove_default_page_layout_from_pages.rb +2 -2
  235. data/db/migrate/20110414163140_remove_display_name_from_elements.rb +3 -3
  236. data/db/migrate/20110511100516_rename_essence_texts_title_to_link_title.rb +2 -2
  237. data/db/migrate/20110529130500_add_cell_id_to_elements.rb +3 -3
  238. data/db/migrate/20110530102804_change_pages_page_layout_column.rb +3 -3
  239. data/db/migrate/20110711142057_change_open_link_in_new_window_to_link_target.rb +1 -1
  240. data/db/migrate/20111116125112_namespace_alchemy_models.rb +21 -21
  241. data/lib/alchemy/auth_engine.rb +5 -5
  242. data/lib/alchemy/capistrano.rb +64 -64
  243. data/lib/alchemy/config.rb +47 -44
  244. data/lib/alchemy/engine.rb +41 -41
  245. data/lib/alchemy/essence.rb +50 -51
  246. data/lib/alchemy/i18n.rb +48 -48
  247. data/lib/alchemy/modules.rb +30 -30
  248. data/lib/alchemy/mount_point.rb +6 -6
  249. data/lib/alchemy/page_layout.rb +94 -93
  250. data/lib/alchemy/resource.rb +82 -0
  251. data/lib/alchemy/resources_helper.rb +56 -0
  252. data/lib/alchemy/scoped_pagination_url_helper.rb +8 -8
  253. data/lib/alchemy/seeder.rb +88 -88
  254. data/lib/alchemy/tinymce.rb +49 -49
  255. data/lib/alchemy/upgrader.rb +103 -103
  256. data/lib/alchemy/version.rb +1 -1
  257. data/lib/alchemy_cms.rb +26 -27
  258. data/lib/extensions/action_view.rb +1 -1
  259. data/lib/extensions/array.rb +3 -3
  260. data/lib/extensions/hash.rb +3 -3
  261. data/lib/middleware/flash_session_cookie.rb +1 -1
  262. data/lib/rails/generators/alchemy/deploy_script/deploy_script_generator.rb +24 -24
  263. data/lib/rails/generators/alchemy/elements/elements_generator.rb +7 -7
  264. data/lib/rails/generators/alchemy/elements/templates/view.html.erb +17 -17
  265. data/lib/rails/generators/alchemy/page_layouts/page_layouts_generator.rb +6 -6
  266. data/lib/rails/generators/alchemy/plugin/templates/authorization_rules.rb +8 -8
  267. data/lib/rails/generators/alchemy/scaffold/files/pages.html.erb +7 -7
  268. data/lib/rails/generators/alchemy/scaffold/scaffold_generator.rb +36 -36
  269. data/lib/rails/templates/alchemy.rb +1 -1
  270. data/lib/tasks/ferret.rake +2 -2
  271. data/lib/tasks/fleximage.rake +32 -32
  272. data/lib/tasks/install.rake +12 -12
  273. data/lib/tasks/upgrade.rake +4 -4
  274. data/spec/controllers/admin/clipboard_controller_spec.rb +43 -43
  275. data/spec/controllers/admin/contents_controller_spec.rb +22 -22
  276. data/spec/controllers/admin/elements_controller_spec.rb +13 -13
  277. data/spec/controllers/admin/languages_controller_spec.rb +31 -0
  278. data/spec/controllers/admin/pages_controller_spec.rb +10 -41
  279. data/spec/controllers/admin/resources_controller_spec.rb +19 -0
  280. data/spec/controllers/admin/trash_controller_spec.rb +11 -11
  281. data/spec/controllers/base_controller_spec.rb +46 -46
  282. data/spec/controllers/pages_controller_spec.rb +102 -92
  283. data/spec/dummy/app/controllers/admin/events_controller.rb +3 -0
  284. data/spec/dummy/app/controllers/errors_controller.rb +5 -0
  285. data/spec/dummy/app/models/event.rb +3 -0
  286. data/spec/dummy/config.ru +1 -1
  287. data/spec/dummy/config/application.rb +3 -0
  288. data/spec/dummy/config/authorization_rules.rb +7 -0
  289. data/spec/dummy/config/environments/development.rb +8 -1
  290. data/spec/dummy/config/environments/production.rb +1 -1
  291. data/spec/dummy/config/environments/test.rb +5 -2
  292. data/spec/dummy/config/routes.rb +9 -1
  293. data/spec/dummy/db/schema.rb +47 -35
  294. data/spec/dummy/public/404.html +19 -7
  295. data/spec/dummy/public/404.html.bak +26 -0
  296. data/spec/dummy/public/422.html +19 -7
  297. data/spec/dummy/public/500.html +19 -7
  298. data/spec/dummy/script/rails +2 -2
  299. data/spec/factories.rb +76 -76
  300. data/spec/helpers/admin/base_helper_spec.rb +21 -21
  301. data/spec/helpers/admin/contents_helper_spec.rb +14 -14
  302. data/spec/helpers/admin/elements_helper_spec.rb +40 -40
  303. data/spec/helpers/admin/essences_helper_spec.rb +7 -7
  304. data/spec/helpers/elements_helper_spec.rb +154 -154
  305. data/spec/helpers/essences_helper_spec.rb +10 -10
  306. data/spec/helpers/pages_helper_spec.rb +369 -372
  307. data/spec/helpers/pictures_helper_spec.rb +14 -0
  308. data/spec/helpers/url_helpers_spec.rb +29 -34
  309. data/spec/integration/admin/pages_controller_spec.rb +50 -50
  310. data/spec/integration/admin/resources_integration_spec.rb +100 -0
  311. data/spec/integration/navigation_spec.rb +1 -1
  312. data/spec/integration/pages_controller_spec.rb +205 -207
  313. data/spec/integration/security_spec.rb +47 -47
  314. data/spec/javascripts/alchemy/link_overlay_spec.js.coffee +42 -0
  315. data/spec/javascripts/alchemy_integration_spec.coffee +12 -0
  316. data/spec/javascripts/fixtures/select.html +3 -0
  317. data/spec/javascripts/helpers/.gitkeep +0 -0
  318. data/spec/javascripts/helpers/jasmine-jquery-1.3.1.js +289 -0
  319. data/spec/javascripts/helpers/mock-ajax.js +207 -0
  320. data/spec/javascripts/helpers/test_responses/test_responses.js +1 -0
  321. data/spec/javascripts/spec.css +3 -0
  322. data/spec/javascripts/spec.js +2 -0
  323. data/spec/libraries/resource_spec.rb +122 -0
  324. data/spec/libraries/resources_helper_spec.rb +105 -0
  325. data/spec/models/content_spec.rb +67 -67
  326. data/spec/models/element_spec.rb +133 -133
  327. data/spec/models/essence_picture_spec.rb +5 -5
  328. data/spec/models/essence_richtext_spec.rb +4 -4
  329. data/spec/models/language_spec.rb +89 -89
  330. data/spec/models/page_spec.rb +436 -506
  331. data/spec/models/picture_spec.rb +34 -34
  332. data/spec/models/user_spec.rb +2 -2
  333. data/spec/page_layout_spec.rb +24 -20
  334. data/spec/routing_spec.rb +253 -253
  335. data/spec/spec_helper.rb +51 -50
  336. data/spec/support/alchemy/controller_hacks.rb +25 -25
  337. data/spec/support/alchemy/specs_helpers.rb +25 -25
  338. data/spec/support/integration_spec_helper.rb +24 -0
  339. data/vendor/assets/javascripts/jquery_plugins/jquery.html5uploader.js +271 -0
  340. data/vendor/assets/javascripts/jquery_plugins/jquery.in-place-edit.js +86 -85
  341. data/vendor/assets/javascripts/jquery_plugins/jquery.ui.nestedSortable.js +380 -377
  342. data/vendor/assets/javascripts/jquery_plugins/jquery.ui.tabspaging.js +285 -279
  343. data/vendor/assets/javascripts/swfupload/SWFObject License.txt +3 -3
  344. data/vendor/assets/javascripts/swfupload/swfupload.cookies.js +47 -47
  345. data/vendor/assets/javascripts/swfupload/swfupload.js +612 -612
  346. data/vendor/assets/javascripts/swfupload/swfupload.queue.js +93 -93
  347. data/vendor/assets/javascripts/swfupload/swfupload.speed.js +337 -337
  348. data/vendor/assets/javascripts/swfupload/swfupload.swfobject.js +706 -102
  349. data/vendor/assets/javascripts/tiny_mce/license.txt +6 -6
  350. data/vendor/assets/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm +97 -97
  351. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/template.htm +386 -376
  352. data/vendor/assets/javascripts/tiny_mce/plugins/paste/js/pastetext.js +30 -30
  353. data/vendor/assets/javascripts/tiny_mce/plugins/paste/js/pasteword.js +45 -45
  354. data/vendor/assets/javascripts/tiny_mce/plugins/paste/pastetext.htm +20 -17
  355. data/vendor/assets/javascripts/tiny_mce/plugins/paste/pasteword.htm +12 -12
  356. data/vendor/assets/javascripts/tiny_mce/plugins/table/cell.htm +183 -173
  357. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/cell.css +4 -4
  358. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/row.css +7 -7
  359. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/table.css +3 -3
  360. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/cell.js +282 -280
  361. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/merge_cells.js +15 -15
  362. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/row.js +204 -204
  363. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/table.js +435 -435
  364. data/vendor/assets/javascripts/tiny_mce/plugins/table/merge_cells.htm +24 -22
  365. data/vendor/assets/javascripts/tiny_mce/plugins/table/row.htm +144 -136
  366. data/vendor/assets/javascripts/tiny_mce/plugins/table/table.htm +184 -168
  367. data/vendor/assets/javascripts/tiny_mce/themes/advanced/about.htm +62 -46
  368. data/vendor/assets/javascripts/tiny_mce/themes/advanced/anchor.htm +17 -16
  369. data/vendor/assets/javascripts/tiny_mce/themes/advanced/charmap.htm +56 -47
  370. data/vendor/assets/javascripts/tiny_mce/themes/advanced/color_picker.htm +67 -54
  371. data/vendor/assets/javascripts/tiny_mce/themes/advanced/editor_template.js +852 -1
  372. data/vendor/assets/javascripts/tiny_mce/themes/advanced/image.htm +79 -69
  373. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/about.js +48 -48
  374. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/anchor.js +28 -28
  375. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/charmap.js +317 -317
  376. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/color_picker.js +248 -246
  377. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/image.js +246 -246
  378. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/link.js +146 -146
  379. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/source_editor.js +31 -31
  380. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/de.js +1 -1
  381. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/de_dlg.js +1 -1
  382. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/en.js +1 -1
  383. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js +1 -1
  384. data/vendor/assets/javascripts/tiny_mce/themes/advanced/link.htm +53 -46
  385. data/vendor/assets/javascripts/tiny_mce/themes/advanced/shortcuts.htm +57 -45
  386. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/content.css +182 -47
  387. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css +399 -92
  388. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/ui.css +891 -187
  389. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/content.css +102 -24
  390. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +377 -78
  391. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css +452 -77
  392. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css +167 -45
  393. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css +399 -92
  394. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css +890 -190
  395. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +33 -7
  396. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +15 -4
  397. data/vendor/assets/javascripts/tiny_mce/themes/advanced/source_editor.htm +18 -15
  398. data/vendor/assets/javascripts/tiny_mce/utils/editable_selects.js +46 -46
  399. data/vendor/assets/javascripts/tiny_mce/utils/form_utils.js +124 -124
  400. data/vendor/assets/javascripts/tiny_mce/utils/mctabs.js +112 -112
  401. data/vendor/assets/javascripts/tiny_mce/utils/validate.js +213 -213
  402. metadata +102 -115
  403. data/app/assets/javascripts/alchemy/alchemy.link_overlay.js +0 -216
  404. data/lib/tasks/routes.rake +0 -29
  405. data/spec/integration/admin/resources_spec.rb +0 -19
@@ -1,24 +1,24 @@
1
1
  module Alchemy
2
- module Admin
3
- class TrashController < Alchemy::Admin::BaseController
2
+ module Admin
3
+ class TrashController < Alchemy::Admin::BaseController
4
4
 
5
- helper "alchemy/admin/elements"
5
+ helper "alchemy/admin/elements"
6
6
 
7
- def index
8
- @elements = Element.trashed
9
- @page = Page.find_by_id(params[:page_id])
10
- @allowed_elements = Element.all_for_page(@page)
11
- @draggable_trash_items = {}
12
- @elements.each { |e| @draggable_trash_items["element_#{e.id}"] = e.belonging_cellnames(@page) }
13
- render :layout => false
14
- end
7
+ def index
8
+ @elements = Element.trashed
9
+ @page = Page.find_by_id(params[:page_id])
10
+ @allowed_elements = Element.all_for_page(@page)
11
+ @draggable_trash_items = {}
12
+ @elements.each { |e| @draggable_trash_items["element_#{e.id}"] = e.belonging_cellnames(@page) }
13
+ render :layout => false
14
+ end
15
15
 
16
- def clear
17
- @page = Page.find_by_id(params[:page_id])
18
- @elements = Element.trashed
19
- @elements.map(&:destroy)
20
- end
16
+ def clear
17
+ @page = Page.find_by_id(params[:page_id])
18
+ @elements = Element.trashed
19
+ @elements.map(&:destroy)
20
+ end
21
21
 
22
- end
23
- end
22
+ end
23
+ end
24
24
  end
@@ -1,81 +1,81 @@
1
1
  module Alchemy
2
- module Admin
3
- class UsersController < Alchemy::Admin::BaseController
2
+ module Admin
3
+ class UsersController < Alchemy::Admin::BaseController
4
4
 
5
- filter_access_to [:edit, :update, :destroy], :attribute_check => true, :load_method => :load_user, :model => Alchemy::User
6
- filter_access_to [:index, :new, :create], :attribute_check => false
5
+ filter_access_to [:edit, :update, :destroy], :attribute_check => true, :load_method => :load_user, :model => Alchemy::User
6
+ filter_access_to [:index, :new, :create], :attribute_check => false
7
7
 
8
- def index
9
- if !params[:query].blank?
10
- users = User.where([
11
- "login LIKE ? OR email LIKE ? OR firstname LIKE ? OR lastname LIKE ?",
12
- "%#{params[:query]}%",
13
- "%#{params[:query]}%",
14
- "%#{params[:query]}%",
15
- "%#{params[:query]}%"
16
- ])
17
- else
18
- users = User.scoped
19
- end
20
- @users = users.page(params[:page] || 1).per(per_page_value_for_screen_size).order('login')
21
- end
8
+ def index
9
+ if !params[:query].blank?
10
+ users = User.where([
11
+ "login LIKE ? OR email LIKE ? OR firstname LIKE ? OR lastname LIKE ?",
12
+ "%#{params[:query]}%",
13
+ "%#{params[:query]}%",
14
+ "%#{params[:query]}%",
15
+ "%#{params[:query]}%"
16
+ ])
17
+ else
18
+ users = User.scoped
19
+ end
20
+ @users = users.page(params[:page] || 1).per(per_page_value_for_screen_size).order('login')
21
+ end
22
22
 
23
- def new
24
- @user = User.new
25
- @user_roles = User::ROLES.map { |role| [User.human_rolename(role), role]}
26
- @user_genders = User.genders_for_select
27
- render :layout => false
28
- end
23
+ def new
24
+ @user = User.new
25
+ @user_roles = User::ROLES.map { |role| [User.human_rolename(role), role] }
26
+ @user_genders = User.genders_for_select
27
+ render :layout => false
28
+ end
29
29
 
30
- def create
31
- @user = User.new(params[:user], :as => current_user.role.to_sym)
32
- if @user.save
33
- if @user.role == "registered" && params[:send_credentials]
34
- Notifications.registered_user_created(@user).deliver
35
- elsif params[:send_credentials]
36
- Notifications.admin_user_created(@user).deliver
37
- end
38
- end
39
- render_errors_or_redirect(
40
- @user,
41
- admin_users_path,
42
- t("User created", :name => @user.name)
43
- )
44
- end
30
+ def create
31
+ @user = User.new(params[:user], :as => current_user.role.to_sym)
32
+ if @user.save
33
+ if @user.role == "registered" && params[:send_credentials]
34
+ Notifications.registered_user_created(@user).deliver
35
+ elsif params[:send_credentials]
36
+ Notifications.admin_user_created(@user).deliver
37
+ end
38
+ end
39
+ render_errors_or_redirect(
40
+ @user,
41
+ admin_users_path,
42
+ t("User created", :name => @user.name)
43
+ )
44
+ end
45
45
 
46
- def edit
47
- @user_roles = User::ROLES.map { |role| [User.human_rolename(role), role]}
48
- @user_genders = User.genders_for_select
49
- render :layout => false
50
- end
46
+ def edit
47
+ @user_roles = User::ROLES.map { |role| [User.human_rolename(role), role] }
48
+ @user_genders = User.genders_for_select
49
+ render :layout => false
50
+ end
51
51
 
52
- def update
53
- # User is fetched via before filter
54
- @user.update_attributes(params[:user], :as => current_user.role.to_sym)
55
- Notifications.admin_user_created(@user).deliver if params[:send_credentials]
56
- render_errors_or_redirect(
57
- @user,
58
- admin_users_path,
59
- t("User updated", :name => @user.name)
60
- )
61
- end
52
+ def update
53
+ # User is fetched via before filter
54
+ @user.update_attributes(params[:user], :as => current_user.role.to_sym)
55
+ Notifications.admin_user_created(@user).deliver if params[:send_credentials]
56
+ render_errors_or_redirect(
57
+ @user,
58
+ admin_users_path,
59
+ t("User updated", :name => @user.name)
60
+ )
61
+ end
62
62
 
63
- def destroy
64
- # User is fetched via before filter
65
- name = @user.name
66
- if @user.destroy
67
- flash[:notice] = t("User deleted", :name => name)
68
- end
69
- @redirect_url = admin_users_path
70
- render :action => :redirect
71
- end
63
+ def destroy
64
+ # User is fetched via before filter
65
+ name = @user.name
66
+ if @user.destroy
67
+ flash[:notice] = t("User deleted", :name => name)
68
+ end
69
+ @redirect_url = admin_users_path
70
+ render :action => :redirect
71
+ end
72
72
 
73
- protected
73
+ protected
74
74
 
75
- def load_user
76
- @user = User.find(params[:id])
77
- end
75
+ def load_user
76
+ @user = User.find(params[:id])
77
+ end
78
78
 
79
- end
80
- end
79
+ end
80
+ end
81
81
  end
@@ -1,30 +1,30 @@
1
1
  module Alchemy
2
- class AttachmentsController < Alchemy::BaseController
3
-
4
- # sends file inline. i.e. for viewing pdfs/movies in browser
5
- def show
6
- @attachment = Attachment.find(params[:id])
7
- send_file(
8
- @attachment.public_filename,
9
- {
10
- :name => @attachment.filename,
11
- :type => @attachment.content_type,
12
- :disposition => 'inline'
13
- }
14
- )
15
- end
16
-
17
- # sends file as attachment. aka download
18
- def download
19
- @attachment = Attachment.find(params[:id])
20
- send_file(
21
- @attachment.full_filename, {
22
- :name => @attachment.filename,
23
- :type => @attachment.content_type,
24
- :disposition => 'attachment'
25
- }
26
- )
27
- end
2
+ class AttachmentsController < Alchemy::BaseController
28
3
 
29
- end
4
+ # sends file inline. i.e. for viewing pdfs/movies in browser
5
+ def show
6
+ @attachment = Attachment.find(params[:id])
7
+ send_file(
8
+ @attachment.public_filename,
9
+ {
10
+ :name => @attachment.filename,
11
+ :type => @attachment.content_type,
12
+ :disposition => 'inline'
13
+ }
14
+ )
15
+ end
16
+
17
+ # sends file as attachment. aka download
18
+ def download
19
+ @attachment = Attachment.find(params[:id])
20
+ send_file(
21
+ @attachment.full_filename, {
22
+ :name => @attachment.filename,
23
+ :type => @attachment.content_type,
24
+ :disposition => 'attachment'
25
+ }
26
+ )
27
+ end
28
+
29
+ end
30
30
  end
@@ -1,158 +1,162 @@
1
1
  # This is the main Alchemy controller all other controllers inheret from.
2
2
  module Alchemy
3
- class BaseController < ApplicationController
4
-
5
- include Alchemy::Modules
6
-
7
- protect_from_forgery
8
-
9
- before_filter :set_language
10
- before_filter :mailer_set_url_options
11
-
12
- helper_method :current_server, :current_user, :t
13
-
14
- # Returns a host string with the domain the app is running on.
15
- def current_server
16
- # For local development server
17
- if request.port != 80
18
- "http://#{request.host}:#{request.port}"
19
- # For remote production server
20
- else
21
- "http://#{request.host}"
22
- end
23
- end
24
-
25
- def configuration(name)
26
- return Alchemy::Config.get(name)
27
- end
28
-
29
- def multi_language?
30
- Language.published.count > 1
31
- end
32
-
33
- def current_user
34
- return @current_user if defined?(@current_user)
35
- @current_user = current_user_session && current_user_session.record
36
- end
37
-
38
- def current_user_session
39
- return @current_user_session if defined?(@current_user_session)
40
- @current_user_session = UserSession.find
41
- end
42
-
43
- def logged_in?
44
- !current_user.blank?
45
- end
46
-
47
- # Overriding +I18n+s default +t+ helper, so we can pass it through +Alchemy::I18n+
48
- def t(key, *args)
49
- ::Alchemy::I18n.t(key, *args)
50
- end
51
-
52
- private
53
-
54
- # Sets the language for rendering pages in pages controller
55
- def set_language
56
- if params[:lang].blank? and session[:language_id].blank?
57
- set_language_to_default
58
- elsif !params[:lang].blank?
59
- set_language_from(params[:lang])
60
- ::I18n.locale = params[:lang]
61
- end
62
- end
63
-
64
- def set_language_from(language_code_or_id)
65
- if language_code_or_id.is_a?(String) && language_code_or_id.match(/^\d+$/)
66
- language_code_or_id = language_code_or_id.to_i
67
- end
68
- case language_code_or_id.class.name
69
- when "String"
70
- @language = Language.find_by_code(language_code_or_id)
71
- when "Fixnum"
72
- @language = Language.find(language_code_or_id)
73
- end
74
- store_language_in_session(@language)
75
- end
76
-
77
- def set_language_to_default
78
- @language = Language.get_default
79
- if @language
80
- store_language_in_session(@language)
81
- else
82
- raise "No Default Language found! Did you run `rake alchemy:db:seed` task?"
83
- end
84
- end
85
-
86
- def store_language_in_session(language)
87
- if language
88
- session[:language_code] = language.code
89
- session[:language_id] = language.id
90
- else
91
- logger.warn "!!!! Language not found for #{language.inspect}. Setting to default!"
92
- set_language_to_default
93
- end
94
- end
95
-
96
- def store_location
97
- session[:redirect_path] = request.path
98
- end
99
-
100
- def mailer_set_url_options
101
- ActionMailer::Base.default_url_options[:host] = request.host_with_port
102
- end
103
-
104
- def hashified_options
105
- return nil if params[:options].blank?
106
- if params[:options].is_a?(String)
107
- Rack::Utils.parse_query(params[:options])
108
- else
109
- params[:options]
110
- end
111
- end
112
-
113
- def layout_for_page
114
- if !params[:layout].blank? && params[:layout] != 'none'
115
- params[:layout]
116
- elsif File.exist?(Rails.root.join('app/views/layouts', 'application.html.erb'))
117
- 'application'
118
- else
119
- 'alchemy/pages'
120
- end
121
- end
122
-
123
- protected
124
-
125
- def permission_denied
126
- if current_user
127
- if current_user.role == 'registered'
128
- redirect_to alchemy.root_path
129
- else
130
- if request.referer == alchemy.login_url
131
- render :file => File.join(Rails.root.to_s, 'public', '422.html'), :status => 422, :layout => false
132
- elsif request.xhr?
133
- respond_to do |format|
134
- format.js {
135
- render :js => "Alchemy.growl('#{t('You are not authorized')}', 'warning'); Alchemy.enableButton('button.button, a.button, input.button');"
136
- }
137
- format.html {
138
- render :partial => 'alchemy/admin/partials/flash', :locals => {:message => t('You are not authorized'), :flash_type => 'warning'}
139
- }
140
- end
141
- else
142
- flash[:error] = t('You are not authorized')
143
- redirect_to alchemy.admin_dashboard_path
144
- end
145
- end
146
- else
147
- flash[:info] = t('Please log in')
148
- if request.xhr?
149
- render :action => :permission_denied
150
- else
151
- store_location
152
- redirect_to alchemy.login_path
153
- end
154
- end
155
- end
156
-
157
- end
3
+ class BaseController < ApplicationController
4
+
5
+ include Alchemy::Modules
6
+
7
+ protect_from_forgery
8
+
9
+ before_filter :set_language
10
+ before_filter :mailer_set_url_options
11
+
12
+ helper_method :current_server, :current_user, :t
13
+
14
+ # Returns a host string with the domain the app is running on.
15
+ def current_server
16
+ # For local development server
17
+ if request.port != 80
18
+ "http://#{request.host}:#{request.port}"
19
+ # For remote production server
20
+ else
21
+ "http://#{request.host}"
22
+ end
23
+ end
24
+
25
+ def configuration(name)
26
+ return Alchemy::Config.get(name)
27
+ end
28
+
29
+ def multi_language?
30
+ Language.published.count > 1
31
+ end
32
+
33
+ def current_user
34
+ return @current_user if defined?(@current_user)
35
+ @current_user = current_user_session && current_user_session.record
36
+ end
37
+
38
+ def current_user_session
39
+ return @current_user_session if defined?(@current_user_session)
40
+ @current_user_session = UserSession.find
41
+ end
42
+
43
+ def logged_in?
44
+ !current_user.blank?
45
+ end
46
+
47
+ def raise_not_found_error
48
+ raise ActionController::RoutingError.new('Not Found')
49
+ end
50
+
51
+ # Overriding +I18n+s default +t+ helper, so we can pass it through +Alchemy::I18n+
52
+ def t(key, *args)
53
+ ::Alchemy::I18n.t(key, *args)
54
+ end
55
+
56
+ private
57
+
58
+ # Sets the language for rendering pages in pages controller
59
+ def set_language
60
+ if params[:lang].blank? and session[:language_id].blank?
61
+ set_language_to_default
62
+ elsif !params[:lang].blank?
63
+ set_language_from(params[:lang])
64
+ ::I18n.locale = params[:lang]
65
+ end
66
+ end
67
+
68
+ def set_language_from(language_code_or_id)
69
+ if language_code_or_id.is_a?(String) && language_code_or_id.match(/^\d+$/)
70
+ language_code_or_id = language_code_or_id.to_i
71
+ end
72
+ case language_code_or_id.class.name
73
+ when "String"
74
+ @language = Language.find_by_code(language_code_or_id)
75
+ when "Fixnum"
76
+ @language = Language.find(language_code_or_id)
77
+ end
78
+ store_language_in_session(@language)
79
+ end
80
+
81
+ def set_language_to_default
82
+ @language = Language.get_default
83
+ if @language
84
+ store_language_in_session(@language)
85
+ else
86
+ raise "No Default Language found! Did you run `rake alchemy:db:seed` task?"
87
+ end
88
+ end
89
+
90
+ def store_language_in_session(language)
91
+ if language
92
+ session[:language_code] = language.code
93
+ session[:language_id] = language.id
94
+ else
95
+ logger.warn "!!!! Language not found for #{language.inspect}. Setting to default!"
96
+ set_language_to_default
97
+ end
98
+ end
99
+
100
+ def store_location
101
+ session[:redirect_path] = request.path
102
+ end
103
+
104
+ def mailer_set_url_options
105
+ ActionMailer::Base.default_url_options[:host] = request.host_with_port
106
+ end
107
+
108
+ def hashified_options
109
+ return nil if params[:options].blank?
110
+ if params[:options].is_a?(String)
111
+ Rack::Utils.parse_query(params[:options])
112
+ else
113
+ params[:options]
114
+ end
115
+ end
116
+
117
+ def layout_for_page
118
+ if !params[:layout].blank? && params[:layout] != 'none'
119
+ params[:layout]
120
+ elsif File.exist?(Rails.root.join('app/views/layouts', 'application.html.erb'))
121
+ 'application'
122
+ else
123
+ 'alchemy/pages'
124
+ end
125
+ end
126
+
127
+ protected
128
+
129
+ def permission_denied
130
+ if current_user
131
+ if current_user.role == 'registered'
132
+ redirect_to alchemy.root_path
133
+ else
134
+ if request.referer == alchemy.login_url
135
+ render :file => File.join(Rails.root.to_s, 'public', '422.html'), :status => 422, :layout => false
136
+ elsif request.xhr?
137
+ respond_to do |format|
138
+ format.js {
139
+ render :js => "Alchemy.growl('#{t('You are not authorized')}', 'warning'); Alchemy.enableButton('button.button, a.button, input.button');"
140
+ }
141
+ format.html {
142
+ render :partial => 'alchemy/admin/partials/flash', :locals => {:message => t('You are not authorized'), :flash_type => 'warning'}
143
+ }
144
+ end
145
+ else
146
+ flash[:error] = t('You are not authorized')
147
+ redirect_to alchemy.admin_dashboard_path
148
+ end
149
+ end
150
+ else
151
+ flash[:info] = t('Please log in')
152
+ if request.xhr?
153
+ render :action => :permission_denied
154
+ else
155
+ store_location
156
+ redirect_to alchemy.login_path
157
+ end
158
+ end
159
+ end
160
+
161
+ end
158
162
  end