alchemy_cms 2.1.beta1 → 2.1.beta5

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 (555) hide show
  1. data/.gitignore +2 -1
  2. data/.rspec +2 -2
  3. data/.travis.yml +2 -1
  4. data/Gemfile +8 -9
  5. data/README.md +10 -10
  6. data/Rakefile +0 -1
  7. data/alchemy_cms.gemspec +7 -9
  8. data/app/assets/images/alchemy/icons.png +0 -0
  9. data/app/assets/javascripts/alchemy/alchemy.base.js +8 -2
  10. data/app/assets/javascripts/alchemy/{alchemy.dragndrop.js → alchemy.dragndrop.js.erb} +3 -3
  11. data/app/assets/javascripts/alchemy/alchemy.element_editor_selector.js +1 -1
  12. data/app/assets/javascripts/alchemy/alchemy.growler.js +3 -3
  13. data/app/assets/javascripts/alchemy/alchemy.js +10 -15
  14. data/app/assets/javascripts/alchemy/alchemy.link_overlay.js +6 -2
  15. data/app/assets/javascripts/alchemy/alchemy.page_sorter.js +1 -1
  16. data/app/assets/javascripts/alchemy/alchemy.preview.js +1 -1
  17. data/app/assets/javascripts/alchemy/alchemy.routes.js.erb +38 -0
  18. data/app/assets/javascripts/alchemy/alchemy.swf_upload.js +360 -0
  19. data/app/assets/javascripts/alchemy/alchemy.windows.js +32 -17
  20. data/app/assets/javascripts/alchemy/preview.js +1 -0
  21. data/{vendor → app}/assets/javascripts/tiny_mce/plugins/alchemy_link/editor_plugin.js +0 -0
  22. data/{vendor → app}/assets/javascripts/tiny_mce/plugins/alchemy_link/langs/de.js +0 -0
  23. data/{vendor → app}/assets/javascripts/tiny_mce/plugins/alchemy_link/langs/en.js +0 -0
  24. data/{vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css.erb → app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css.scss} +15 -33
  25. data/app/assets/stylesheets/alchemy/_defaults.scss +4 -16
  26. data/app/assets/stylesheets/alchemy/alchemy.css +2 -2
  27. data/app/assets/stylesheets/alchemy/base.css.scss +161 -205
  28. data/app/assets/stylesheets/alchemy/elements.css.scss +15 -8
  29. data/app/assets/stylesheets/alchemy/{jquery-ui.alchemy.css → jquery-ui.alchemy.css.scss} +41 -45
  30. data/app/assets/stylesheets/alchemy/jquery.sb.css.scss +14 -10
  31. data/app/assets/stylesheets/alchemy/{tinymce_content.css → tinymce_content.css.scss} +7 -6
  32. data/app/assets/stylesheets/alchemy/{tinymce_dialog.css → tinymce_dialog.css.scss} +7 -7
  33. data/app/controllers/alchemy/admin/attachments_controller.rb +131 -0
  34. data/app/controllers/alchemy/admin/base_controller.rb +118 -0
  35. data/app/controllers/alchemy/admin/clipboard_controller.rb +46 -0
  36. data/app/controllers/alchemy/admin/contents_controller.rb +55 -0
  37. data/app/controllers/alchemy/admin/dashboard_controller.rb +15 -0
  38. data/app/controllers/alchemy/admin/elements_controller.rb +123 -0
  39. data/app/controllers/alchemy/admin/essence_audios_controller.rb +12 -0
  40. data/app/controllers/alchemy/admin/essence_files_controller.rb +27 -0
  41. data/app/controllers/alchemy/admin/essence_flashes_controller.rb +12 -0
  42. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +91 -0
  43. data/app/controllers/alchemy/admin/essence_videos_controller.rb +12 -0
  44. data/app/controllers/alchemy/admin/languages_controller.rb +7 -0
  45. data/app/controllers/alchemy/admin/layoutpages_controller.rb +13 -0
  46. data/app/controllers/alchemy/admin/pages_controller.rb +253 -0
  47. data/app/controllers/alchemy/admin/pictures_controller.rb +139 -0
  48. data/app/controllers/alchemy/admin/resources_controller.rb +132 -0
  49. data/app/controllers/alchemy/admin/trash_controller.rb +24 -0
  50. data/app/controllers/alchemy/admin/users_controller.rb +81 -0
  51. data/app/controllers/alchemy/attachments_controller.rb +30 -0
  52. data/app/controllers/alchemy/base_controller.rb +137 -0
  53. data/app/controllers/alchemy/elements_controller.rb +18 -0
  54. data/app/controllers/alchemy/messages_controller.rb +115 -0
  55. data/app/controllers/alchemy/pages_controller.rb +169 -0
  56. data/app/controllers/alchemy/pictures_controller.rb +62 -0
  57. data/app/controllers/alchemy/user_sessions_controller.rb +80 -0
  58. data/app/helpers/alchemy/admin/attachments_helper.rb +11 -0
  59. data/app/helpers/alchemy/admin/base_helper.rb +423 -0
  60. data/app/helpers/alchemy/admin/contents_helper.rb +75 -0
  61. data/app/helpers/alchemy/admin/elements_helper.rb +118 -0
  62. data/app/helpers/alchemy/admin/essences_helper.rb +78 -0
  63. data/app/helpers/alchemy/admin/pages_helper.rb +46 -0
  64. data/app/helpers/alchemy/admin/pictures_helper.rb +30 -0
  65. data/app/helpers/alchemy/base_helper.rb +65 -0
  66. data/app/helpers/alchemy/elements_helper.rb +173 -0
  67. data/app/helpers/alchemy/essences_helper.rb +101 -0
  68. data/app/helpers/alchemy/pages_helper.rb +550 -0
  69. data/app/mailers/alchemy/messages.rb +17 -0
  70. data/app/mailers/alchemy/notifications.rb +25 -0
  71. data/app/models/alchemy.rb +7 -0
  72. data/app/models/alchemy/attachment.rb +82 -0
  73. data/app/models/alchemy/cell.rb +61 -0
  74. data/app/models/alchemy/content.rb +163 -0
  75. data/app/models/alchemy/element.rb +479 -0
  76. data/app/models/alchemy/essence_audio.rb +19 -0
  77. data/app/models/alchemy/essence_date.rb +22 -0
  78. data/app/models/alchemy/essence_file.rb +19 -0
  79. data/app/models/alchemy/essence_flash.rb +17 -0
  80. data/app/models/alchemy/essence_html.rb +21 -0
  81. data/app/models/alchemy/essence_picture.rb +29 -0
  82. data/app/models/alchemy/essence_richtext.rb +63 -0
  83. data/app/models/alchemy/essence_text.rb +40 -0
  84. data/app/models/alchemy/essence_video.rb +19 -0
  85. data/app/models/alchemy/folded_page.rb +5 -0
  86. data/app/models/alchemy/language.rb +90 -0
  87. data/app/models/alchemy/message.rb +71 -0
  88. data/app/models/alchemy/page.rb +548 -0
  89. data/app/models/alchemy/picture.rb +100 -0
  90. data/app/models/alchemy/user.rb +72 -0
  91. data/app/models/alchemy/user_session.rb +12 -0
  92. data/app/sweepers/alchemy/content_sweeper.rb +22 -0
  93. data/app/sweepers/alchemy/pages_sweeper.rb +49 -0
  94. data/app/sweepers/alchemy/pictures_sweeper.rb +23 -0
  95. data/app/views/{admin → alchemy/admin}/attachments/_archive_overlay.html.erb +6 -6
  96. data/app/views/{admin → alchemy/admin}/attachments/_attachment.html.erb +14 -14
  97. data/app/views/{admin → alchemy/admin}/attachments/_file_to_assign.html.erb +0 -0
  98. data/app/views/alchemy/admin/attachments/_files_list.html.erb +25 -0
  99. data/app/views/{admin → alchemy/admin}/attachments/create.js.erb +0 -0
  100. data/app/views/{admin → alchemy/admin}/attachments/destroy.js.erb +0 -0
  101. data/app/views/{admin → alchemy/admin}/attachments/edit.html.erb +2 -2
  102. data/app/views/alchemy/admin/attachments/index.html.erb +18 -0
  103. data/app/views/{admin → alchemy/admin}/attachments/new.html.erb +3 -3
  104. data/app/views/{admin → alchemy/admin}/clipboard/clear.js.erb +1 -1
  105. data/app/views/alchemy/admin/clipboard/index.html.erb +19 -0
  106. data/app/views/alchemy/admin/clipboard/insert.js.erb +14 -0
  107. data/app/views/alchemy/admin/clipboard/remove.js.erb +10 -0
  108. data/app/views/{admin → alchemy/admin}/contents/_missing.html.erb +4 -4
  109. data/app/views/{admin → alchemy/admin}/contents/create.js.erb +10 -10
  110. data/app/views/{admin → alchemy/admin}/contents/destroy.js.erb +0 -0
  111. data/app/views/{admin → alchemy/admin}/contents/new.html.erb +1 -1
  112. data/app/views/{admin → alchemy/admin}/contents/order.js.erb +0 -0
  113. data/app/views/alchemy/admin/dashboard/index.html.erb +96 -0
  114. data/app/views/{admin → alchemy/admin}/elements/_add_content.html.erb +2 -2
  115. data/app/views/{admin → alchemy/admin}/elements/_element.html.erb +3 -3
  116. data/app/views/{admin → alchemy/admin}/elements/_element_foot.html.erb +8 -8
  117. data/app/views/{admin → alchemy/admin}/elements/_element_head.html.erb +4 -4
  118. data/app/views/{admin → alchemy/admin}/elements/_elements_select.html.erb +2 -2
  119. data/app/views/alchemy/admin/elements/_new_element_form.html.erb +30 -0
  120. data/app/views/{admin → alchemy/admin}/elements/_picture_editor.html.erb +3 -3
  121. data/app/views/{admin → alchemy/admin}/elements/create.js.erb +2 -2
  122. data/app/views/{admin → alchemy/admin}/elements/destroy.js.erb +1 -1
  123. data/app/views/{admin → alchemy/admin}/elements/fold.js.erb +2 -2
  124. data/app/views/{admin → alchemy/admin}/elements/index.html.erb +1 -10
  125. data/app/views/{admin → alchemy/admin}/elements/list.js.erb +2 -2
  126. data/app/views/alchemy/admin/elements/new.html.erb +41 -0
  127. data/app/views/{admin → alchemy/admin}/elements/order.js.erb +1 -1
  128. data/app/views/{admin → alchemy/admin}/elements/trash.js.erb +1 -1
  129. data/app/views/{admin → alchemy/admin}/elements/update.js.erb +1 -1
  130. data/app/views/{admin → alchemy/admin}/essence_files/assign.js.erb +1 -1
  131. data/app/views/{admin → alchemy/admin}/essence_files/edit.html.erb +23 -23
  132. data/app/views/{admin → alchemy/admin}/essence_pictures/assign.js.erb +2 -2
  133. data/app/views/{admin → alchemy/admin}/essence_pictures/crop.html.erb +15 -6
  134. data/app/views/{admin → alchemy/admin}/essence_pictures/destroy.js.erb +1 -1
  135. data/app/views/{admin → alchemy/admin}/essence_pictures/edit.html.erb +11 -11
  136. data/app/views/{admin → alchemy/admin}/essence_pictures/save_link.js.erb +0 -0
  137. data/app/views/{admin → alchemy/admin}/essence_pictures/update.js.erb +2 -2
  138. data/app/views/alchemy/admin/languages/_language.html.erb +36 -0
  139. data/app/views/{admin → alchemy/admin}/layoutpages/_layoutpage.html.erb +18 -18
  140. data/app/views/alchemy/admin/layoutpages/index.html.erb +65 -0
  141. data/app/views/{admin → alchemy/admin}/pages/_contactform_links.html.erb +6 -6
  142. data/app/views/alchemy/admin/pages/_create_language_form.html.erb +38 -0
  143. data/app/views/{admin → alchemy/admin}/pages/_external_link.html.erb +9 -9
  144. data/app/views/{admin → alchemy/admin}/pages/_file_link.html.erb +13 -13
  145. data/app/views/{admin → alchemy/admin}/pages/_internal_link.html.erb +8 -8
  146. data/app/views/{admin → alchemy/admin}/pages/_new_page_form.html.erb +6 -6
  147. data/app/views/{admin → alchemy/admin}/pages/_page.html.erb +25 -25
  148. data/app/views/{admin → alchemy/admin}/pages/_page_for_links.html.erb +6 -6
  149. data/app/views/{admin → alchemy/admin}/pages/_page_infos.html.erb +3 -3
  150. data/app/views/{admin → alchemy/admin}/pages/_page_status.html.erb +4 -4
  151. data/app/views/{admin → alchemy/admin}/pages/_sitemap.html.erb +21 -21
  152. data/app/views/alchemy/admin/pages/configure.html.erb +71 -0
  153. data/app/views/{admin → alchemy/admin}/pages/configure_external.html.erb +9 -9
  154. data/app/views/{admin → alchemy/admin}/pages/destroy.js.erb +2 -2
  155. data/app/views/alchemy/admin/pages/edit.html.erb +181 -0
  156. data/app/views/alchemy/admin/pages/flush.js.erb +2 -0
  157. data/app/views/{admin → alchemy/admin}/pages/fold.js.erb +0 -0
  158. data/app/views/alchemy/admin/pages/index.html.erb +104 -0
  159. data/app/views/{admin → alchemy/admin}/pages/link.html.erb +4 -4
  160. data/app/views/alchemy/admin/pages/locked.html.erb +3 -0
  161. data/app/views/{admin → alchemy/admin}/pages/new.html.erb +8 -8
  162. data/app/views/{admin → alchemy/admin}/pages/show.html.erb +0 -0
  163. data/app/views/{admin → alchemy/admin}/pages/sort.js.erb +0 -0
  164. data/app/views/{admin → alchemy/admin}/pages/unlock.js.erb +1 -1
  165. data/app/views/{admin → alchemy/admin}/pages/update.js.erb +5 -5
  166. data/app/views/{admin → alchemy/admin}/partials/_flash.html.erb +0 -0
  167. data/app/views/{admin → alchemy/admin}/partials/_flash_notices.html.erb +1 -1
  168. data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +14 -0
  169. data/app/views/alchemy/admin/partials/_pagination_links.html.erb +5 -0
  170. data/app/views/{admin → alchemy/admin}/partials/_remote_pagination_links.html.erb +2 -2
  171. data/app/views/{admin → alchemy/admin}/partials/_remote_search_form.html.erb +2 -2
  172. data/app/views/{admin → alchemy/admin}/partials/_search_form.html.erb +6 -7
  173. data/app/views/alchemy/admin/partials/_sub_navigation_tab.html.erb +8 -0
  174. data/app/views/alchemy/admin/partials/_upload_form.html.erb +129 -0
  175. data/app/views/{admin → alchemy/admin}/pictures/_archive_overlay.html.erb +3 -3
  176. data/app/views/{admin → alchemy/admin}/pictures/_filter_and_size_bar.html.erb +15 -15
  177. data/app/views/{admin → alchemy/admin}/pictures/_picture.html.erb +7 -7
  178. data/app/views/{admin → alchemy/admin}/pictures/_picture_to_assign.html.erb +2 -2
  179. data/app/views/alchemy/admin/pictures/_pictures_list.html.erb +14 -0
  180. data/app/views/{admin → alchemy/admin}/pictures/archive_overlay.js.erb +0 -0
  181. data/app/views/{admin → alchemy/admin}/pictures/create.js.erb +3 -3
  182. data/app/views/{admin → alchemy/admin}/pictures/flush.js.erb +0 -0
  183. data/app/views/alchemy/admin/pictures/index.html.erb +83 -0
  184. data/app/views/{admin → alchemy/admin}/pictures/new.html.erb +3 -3
  185. data/app/views/alchemy/admin/pictures/show_in_window.html.erb +1 -0
  186. data/app/views/{admin → alchemy/admin}/pictures/update.js.erb +0 -0
  187. data/app/views/alchemy/admin/resources/_form.html.erb +20 -0
  188. data/app/views/alchemy/admin/resources/_resource.html.erb +35 -0
  189. data/app/views/alchemy/admin/resources/_table.html.erb +23 -0
  190. data/app/views/alchemy/admin/resources/destroy.js.erb +1 -0
  191. data/app/views/{admin/languages → alchemy/admin/resources}/edit.html.erb +0 -0
  192. data/app/views/alchemy/admin/resources/index.html.erb +19 -0
  193. data/app/views/{admin/languages → alchemy/admin/resources}/new.html.erb +0 -0
  194. data/app/views/{admin → alchemy/admin}/trash/clear.js.erb +1 -1
  195. data/app/views/{admin → alchemy/admin}/trash/index.html.erb +4 -4
  196. data/app/views/alchemy/admin/users/_table.html.erb +54 -0
  197. data/app/views/{admin → alchemy/admin}/users/_user.html.erb +14 -12
  198. data/app/views/{admin → alchemy/admin}/users/edit.html.erb +0 -0
  199. data/app/views/alchemy/admin/users/index.html.erb +41 -0
  200. data/app/views/{admin → alchemy/admin}/users/new.html.erb +1 -1
  201. data/app/views/{attachments → alchemy/attachments}/show.html.erb +0 -0
  202. data/app/views/alchemy/base/500.html.erb +5 -0
  203. data/app/views/alchemy/base/error_notice.js.erb +2 -0
  204. data/app/views/alchemy/base/permission_denied.js.erb +2 -0
  205. data/app/views/alchemy/{redirect.js.erb → base/redirect.js.erb} +0 -0
  206. data/app/views/alchemy/{remote_errors.js.erb → base/remote_errors.js.erb} +0 -0
  207. data/app/views/alchemy/{update.js.erb → base/update.js.erb} +0 -0
  208. data/app/views/{elements → alchemy/elements}/_article_editor.html.erb +0 -0
  209. data/app/views/{elements → alchemy/elements}/_article_view.html.erb +1 -1
  210. data/app/views/{elements → alchemy/elements}/_bild_editor.html.erb +0 -0
  211. data/app/views/{elements → alchemy/elements}/_bild_text_editor.html.erb +0 -0
  212. data/app/views/{elements → alchemy/elements}/_bild_text_view.html.erb +1 -1
  213. data/app/views/{elements → alchemy/elements}/_bild_view.html.erb +1 -1
  214. data/app/views/{elements → alchemy/elements}/_claim_editor.html.erb +0 -0
  215. data/app/views/{elements → alchemy/elements}/_claim_view.html.erb +0 -0
  216. data/app/views/{elements → alchemy/elements}/_contactform_editor.html.erb +0 -0
  217. data/app/views/{elements → alchemy/elements}/_contactform_view.html.erb +0 -0
  218. data/app/views/{elements → alchemy/elements}/_editor_not_found.html.erb +1 -1
  219. data/app/views/{elements → alchemy/elements}/_footnote_editor.html.erb +0 -0
  220. data/app/views/{elements → alchemy/elements}/_footnote_view.html.erb +0 -0
  221. data/app/views/{elements → alchemy/elements}/_header_editor.html.erb +0 -0
  222. data/app/views/{elements → alchemy/elements}/_header_view.html.erb +1 -1
  223. data/app/views/{elements → alchemy/elements}/_headline_editor.html.erb +0 -0
  224. data/app/views/{elements → alchemy/elements}/_headline_view.html.erb +0 -0
  225. data/app/views/{elements → alchemy/elements}/_image_mosaic_editor.html.erb +0 -0
  226. data/app/views/{elements → alchemy/elements}/_image_mosaic_view.html.erb +1 -1
  227. data/app/views/{elements → alchemy/elements}/_intro_editor.html.erb +0 -0
  228. data/app/views/{elements → alchemy/elements}/_intro_image_text_editor.html.erb +0 -0
  229. data/app/views/{elements → alchemy/elements}/_intro_image_text_view.html.erb +1 -1
  230. data/app/views/{elements → alchemy/elements}/_intro_view.html.erb +0 -0
  231. data/app/views/{elements → alchemy/elements}/_news_editor.html.erb +0 -0
  232. data/app/views/{elements → alchemy/elements}/_news_view.html.erb +0 -0
  233. data/app/views/alchemy/elements/_searchresult_editor.html.erb +1 -0
  234. data/app/views/alchemy/elements/_searchresult_view.html.erb +4 -0
  235. data/app/views/alchemy/elements/_sitemap_editor.html.erb +3 -0
  236. data/app/views/{elements → alchemy/elements}/_sitemap_view.html.erb +2 -2
  237. data/app/views/{elements → alchemy/elements}/_sitename_editor.html.erb +0 -0
  238. data/app/views/{elements → alchemy/elements}/_sitename_view.html.erb +0 -0
  239. data/app/views/{elements → alchemy/elements}/_subheadline_editor.html.erb +0 -0
  240. data/app/views/{elements → alchemy/elements}/_subheadline_view.html.erb +0 -0
  241. data/app/views/{elements → alchemy/elements}/_text_editor.html.erb +0 -0
  242. data/app/views/{elements → alchemy/elements}/_text_view.html.erb +0 -0
  243. data/app/views/{elements → alchemy/elements}/_view_not_found.html.erb +0 -0
  244. data/app/views/alchemy/elements/show.html.erb +6 -0
  245. data/app/views/{elements → alchemy/elements}/show.js.erb +1 -1
  246. data/app/views/alchemy/essences/_essence_audio_editor.html.erb +1 -0
  247. data/app/views/{essences → alchemy/essences}/_essence_audio_view.html.erb +0 -0
  248. data/app/views/{essences → alchemy/essences}/_essence_date_editor.html.erb +0 -0
  249. data/app/views/{essences → alchemy/essences}/_essence_date_view.html.erb +0 -0
  250. data/app/views/{essences → alchemy/essences}/_essence_file_editor.html.erb +9 -9
  251. data/app/views/{essences → alchemy/essences}/_essence_file_view.html.erb +1 -1
  252. data/app/views/alchemy/essences/_essence_flash_editor.html.erb +1 -0
  253. data/app/views/{essences → alchemy/essences}/_essence_flash_view.html.erb +0 -0
  254. data/app/views/{essences → alchemy/essences}/_essence_html_editor.html.erb +0 -0
  255. data/app/views/{essences → alchemy/essences}/_essence_html_view.html.erb +0 -0
  256. data/app/views/{essences → alchemy/essences}/_essence_picture_editor.html.erb +8 -8
  257. data/app/views/{essences → alchemy/essences}/_essence_picture_tools.html.erb +11 -11
  258. data/app/views/{essences → alchemy/essences}/_essence_picture_view.html.erb +2 -4
  259. data/app/views/alchemy/essences/_essence_richtext_editor.html.erb +11 -0
  260. data/app/views/{essences → alchemy/essences}/_essence_richtext_view.html.erb +0 -0
  261. data/app/views/{essences → alchemy/essences}/_essence_text_editor.html.erb +6 -6
  262. data/app/views/{essences → alchemy/essences}/_essence_text_view.html.erb +0 -0
  263. data/app/views/alchemy/essences/_essence_video_editor.html.erb +1 -0
  264. data/app/views/{essences → alchemy/essences}/_essence_video_view.html.erb +1 -1
  265. data/app/views/{messages → alchemy/messages}/contact_form_mail.html.erb +0 -0
  266. data/app/views/{messages → alchemy/messages}/contact_form_mail.text.erb +0 -0
  267. data/app/views/{messages → alchemy/messages}/new.html.erb +0 -0
  268. data/app/views/{navigation → alchemy/navigation}/_image_link.html.erb +0 -0
  269. data/app/views/{navigation → alchemy/navigation}/_link.html.erb +1 -1
  270. data/app/views/{navigation → alchemy/navigation}/_renderer.html.erb +0 -0
  271. data/app/views/alchemy/notifications/admin_user_created.text.erb +13 -0
  272. data/app/views/alchemy/notifications/registered_user_created.text.erb +10 -0
  273. data/app/views/{page_layouts → alchemy/page_layouts}/_contact.html.erb +0 -0
  274. data/app/views/{page_layouts → alchemy/page_layouts}/_external.html.erb +0 -0
  275. data/app/views/{page_layouts → alchemy/page_layouts}/_intro.html.erb +0 -0
  276. data/app/views/{page_layouts → alchemy/page_layouts}/_layout_footer.html.erb +0 -0
  277. data/app/views/{page_layouts → alchemy/page_layouts}/_layout_header.html.erb +0 -0
  278. data/app/views/{page_layouts → alchemy/page_layouts}/_news.html.erb +0 -0
  279. data/app/views/{_newsletter_layout.html.erb → alchemy/page_layouts/_newsletter_layout.html.erb} +0 -0
  280. data/app/views/{page_layouts → alchemy/page_layouts}/_search.html.erb +0 -0
  281. data/app/views/{page_layouts → alchemy/page_layouts}/_standard.html.erb +0 -0
  282. data/app/views/{pages → alchemy/pages}/show.html.erb +0 -0
  283. data/app/views/{pages → alchemy/pages}/show.rss.builder +0 -0
  284. data/app/views/{pages → alchemy/pages}/sitemap.xml.erb +0 -0
  285. data/app/views/{pictures → alchemy/pictures}/show.gif.flexi +0 -0
  286. data/app/views/{pictures → alchemy/pictures}/show.jpg.flexi +0 -0
  287. data/app/views/{pictures → alchemy/pictures}/show.png.flexi +0 -0
  288. data/app/views/{pictures → alchemy/pictures}/thumbnail.png.flexi +0 -0
  289. data/app/views/{pictures → alchemy/pictures}/zoom.png.flexi +0 -0
  290. data/app/views/alchemy/search/_result.html.erb +9 -0
  291. data/app/views/alchemy/user_sessions/leave.html.erb +11 -0
  292. data/app/views/alchemy/user_sessions/login.html.erb +47 -0
  293. data/app/views/alchemy/user_sessions/logout.html.erb +3 -0
  294. data/app/views/alchemy/user_sessions/signup.html.erb +14 -0
  295. data/app/views/layouts/{alchemy.html.erb → alchemy/admin.html.erb} +23 -17
  296. data/app/views/layouts/alchemy/login.html.erb +37 -0
  297. data/app/views/layouts/alchemy/pages.html.erb +29 -0
  298. data/app/views/layouts/{sitemap.xml.erb → alchemy/sitemap.xml.erb} +0 -0
  299. data/config/alchemy/config.yml +2 -80
  300. data/config/alchemy/modules.yml +70 -0
  301. data/config/alchemy/page_layouts.yml +2 -0
  302. data/config/authorization_rules.rb +32 -39
  303. data/config/locales/alchemy.de.yml +789 -0
  304. data/config/locales/alchemy.en.yml +587 -0
  305. data/config/routes.rb +144 -142
  306. data/db/migrate/20111116125112_namespace_models.rb +23 -0
  307. data/lib/alchemy/auth_engine.rb +7 -0
  308. data/lib/alchemy/capistrano.rb +4 -1
  309. data/lib/alchemy/engine.rb +39 -25
  310. data/lib/alchemy/essence.rb +5 -1
  311. data/lib/alchemy/i18n.rb +47 -0
  312. data/lib/alchemy/modules.rb +38 -0
  313. data/lib/alchemy/page_layout.rb +98 -56
  314. data/lib/alchemy/seeder.rb +60 -110
  315. data/lib/alchemy/tinymce.rb +2 -2
  316. data/lib/alchemy/version.rb +3 -3
  317. data/lib/alchemy_cms.rb +23 -23
  318. data/lib/rails/generators/alchemy/elements/elements_generator.rb +1 -1
  319. data/lib/rails/generators/alchemy/elements/templates/editor.html.erb +1 -1
  320. data/lib/rails/generators/alchemy/elements/templates/view.html.erb +2 -2
  321. data/lib/rails/generators/alchemy/page_layouts/page_layouts_generator.rb +1 -1
  322. data/lib/rails/generators/alchemy/plugin/plugin_generator.rb +0 -1
  323. data/lib/rails/generators/alchemy/scaffold/files/pages.html.erb +1 -1
  324. data/lib/rails/generators/alchemy/scaffold/scaffold_generator.rb +34 -34
  325. data/lib/tasks/install.rake +2 -9
  326. data/lib/tasks/upgrade.rake +69 -208
  327. data/spec/controllers/admin/clipboard_controller_spec.rb +33 -35
  328. data/spec/controllers/admin/contents_controller_spec.rb +5 -5
  329. data/spec/controllers/admin/elements_controller_spec.rb +22 -0
  330. data/spec/controllers/admin/trash_controller_spec.rb +5 -5
  331. data/spec/controllers/base_controller_spec.rb +67 -0
  332. data/spec/controllers/pages_controller_spec.rb +6 -6
  333. data/spec/dummy/config/application.rb +1 -8
  334. data/spec/dummy/config/routes.rb +2 -57
  335. data/spec/dummy/db/schema.rb +27 -27
  336. data/spec/factories.rb +8 -8
  337. data/spec/helpers/{alchemy_helper_spec.rb → admin/base_helper_spec.rb} +8 -1
  338. data/spec/helpers/admin/contents_helper_spec.rb +25 -0
  339. data/spec/helpers/admin/elements_helper_spec.rb +31 -3
  340. data/spec/helpers/admin/essences_helper_spec.rb +27 -0
  341. data/spec/helpers/elements_helper_spec.rb +99 -21
  342. data/spec/helpers/essences_helper_spec.rb +1 -18
  343. data/spec/helpers/pages_helper_spec.rb +212 -26
  344. data/spec/integration/admin/pages_controller_spec.rb +56 -0
  345. data/spec/integration/navigation_spec.rb +1 -1
  346. data/spec/integration/pages_controller_spec.rb +85 -68
  347. data/spec/integration/security_spec.rb +49 -22
  348. data/spec/models/content_spec.rb +3 -3
  349. data/spec/models/element_spec.rb +19 -11
  350. data/spec/models/essence_richtext_spec.rb +2 -2
  351. data/spec/models/language_spec.rb +36 -7
  352. data/spec/models/page_spec.rb +57 -13
  353. data/spec/models/user_spec.rb +1 -1
  354. data/spec/page_layout_spec.rb +13 -3
  355. data/spec/routing_spec.rb +12 -8
  356. data/spec/spec_helper.rb +8 -9
  357. data/spec/support/controller_hacks.rb +37 -0
  358. data/vendor/assets/javascripts/swfupload/SWFObject License.txt +4 -0
  359. data/vendor/assets/javascripts/swfupload/swfupload.cookies.js +53 -0
  360. data/vendor/assets/javascripts/swfupload/swfupload.js +1 -1
  361. data/vendor/assets/javascripts/swfupload/{queue.js → swfupload.queue.js} +97 -97
  362. data/vendor/assets/javascripts/swfupload/swfupload.speed.js +342 -0
  363. data/vendor/assets/javascripts/swfupload/swfupload.swfobject.js +111 -0
  364. data/vendor/assets/javascripts/tiny_mce/license.txt +504 -504
  365. data/vendor/assets/javascripts/tiny_mce/plugins/autoresize/editor_plugin.js +1 -1
  366. data/vendor/assets/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm +110 -110
  367. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif +0 -0
  368. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif +0 -0
  369. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif +0 -0
  370. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif +0 -0
  371. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif +0 -0
  372. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif +0 -0
  373. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif +0 -0
  374. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css +90 -0
  375. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/template.htm +387 -387
  376. data/vendor/assets/javascripts/tiny_mce/plugins/paste/js/pastetext.js +36 -36
  377. data/vendor/assets/javascripts/tiny_mce/plugins/paste/js/pasteword.js +51 -51
  378. data/vendor/assets/javascripts/tiny_mce/plugins/paste/pastetext.htm +26 -26
  379. data/vendor/assets/javascripts/tiny_mce/plugins/paste/pasteword.htm +21 -21
  380. data/vendor/assets/javascripts/tiny_mce/plugins/table/cell.htm +180 -180
  381. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/cell.css +16 -16
  382. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/row.css +25 -25
  383. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/table.css +13 -13
  384. data/vendor/assets/javascripts/tiny_mce/plugins/table/editor_plugin.js +1 -1
  385. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/cell.js +319 -319
  386. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/merge_cells.js +27 -27
  387. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/row.js +237 -237
  388. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/table.js +484 -450
  389. data/vendor/assets/javascripts/tiny_mce/plugins/table/merge_cells.htm +32 -32
  390. data/vendor/assets/javascripts/tiny_mce/plugins/table/row.htm +158 -158
  391. data/vendor/assets/javascripts/tiny_mce/plugins/table/table.htm +188 -188
  392. data/vendor/assets/javascripts/tiny_mce/themes/advanced/about.htm +52 -52
  393. data/vendor/assets/javascripts/tiny_mce/themes/advanced/anchor.htm +26 -26
  394. data/vendor/assets/javascripts/tiny_mce/themes/advanced/charmap.htm +55 -51
  395. data/vendor/assets/javascripts/tiny_mce/themes/advanced/color_picker.htm +74 -74
  396. data/vendor/assets/javascripts/tiny_mce/themes/advanced/editor_template.js +1 -1
  397. data/vendor/assets/javascripts/tiny_mce/themes/advanced/image.htm +80 -80
  398. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/about.js +73 -73
  399. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/anchor.js +43 -43
  400. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/charmap.js +363 -355
  401. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/color_picker.js +329 -329
  402. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/image.js +251 -251
  403. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/link.js +153 -153
  404. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/source_editor.js +56 -56
  405. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js +1 -1
  406. data/vendor/assets/javascripts/tiny_mce/themes/advanced/link.htm +57 -57
  407. data/vendor/assets/javascripts/tiny_mce/themes/advanced/shortcuts.htm +47 -47
  408. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/content.css +50 -50
  409. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css +117 -117
  410. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/ui.css +214 -214
  411. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/content.css +24 -0
  412. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +105 -0
  413. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css +102 -0
  414. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css +48 -48
  415. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css +117 -117
  416. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css +217 -217
  417. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +7 -7
  418. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +5 -5
  419. data/vendor/assets/javascripts/tiny_mce/themes/advanced/source_editor.htm +25 -25
  420. data/vendor/assets/javascripts/tiny_mce/tiny_mce.js +1 -1
  421. data/vendor/assets/javascripts/tiny_mce/utils/editable_selects.js +70 -70
  422. data/vendor/assets/javascripts/tiny_mce/utils/form_utils.js +210 -210
  423. data/vendor/assets/javascripts/tiny_mce/utils/mctabs.js +161 -161
  424. data/vendor/assets/javascripts/tiny_mce/utils/validate.js +252 -252
  425. metadata +432 -465
  426. data/app/controllers/admin/attachments_controller.rb +0 -136
  427. data/app/controllers/admin/clipboard_controller.rb +0 -43
  428. data/app/controllers/admin/contents_controller.rb +0 -60
  429. data/app/controllers/admin/elements_controller.rb +0 -134
  430. data/app/controllers/admin/essence_audios_controller.rb +0 -10
  431. data/app/controllers/admin/essence_files_controller.rb +0 -25
  432. data/app/controllers/admin/essence_flashes_controller.rb +0 -10
  433. data/app/controllers/admin/essence_pictures_controller.rb +0 -84
  434. data/app/controllers/admin/essence_videos_controller.rb +0 -10
  435. data/app/controllers/admin/languages_controller.rb +0 -64
  436. data/app/controllers/admin/layoutpages_controller.rb +0 -12
  437. data/app/controllers/admin/pages_controller.rb +0 -251
  438. data/app/controllers/admin/pictures_controller.rb +0 -143
  439. data/app/controllers/admin/trash_controller.rb +0 -28
  440. data/app/controllers/admin/users_controller.rb +0 -73
  441. data/app/controllers/admin_controller.rb +0 -76
  442. data/app/controllers/alchemy_controller.rb +0 -245
  443. data/app/controllers/attachments_controller.rb +0 -28
  444. data/app/controllers/elements_controller.rb +0 -16
  445. data/app/controllers/messages_controller.rb +0 -113
  446. data/app/controllers/pages_controller.rb +0 -150
  447. data/app/controllers/pictures_controller.rb +0 -63
  448. data/app/helpers/admin/attachments_helper.rb +0 -7
  449. data/app/helpers/admin/elements_helper.rb +0 -112
  450. data/app/helpers/admin/pages_helper.rb +0 -38
  451. data/app/helpers/admin/pictures_helper.rb +0 -26
  452. data/app/helpers/alchemy_helper.rb +0 -379
  453. data/app/helpers/contents_helper.rb +0 -69
  454. data/app/helpers/elements_helper.rb +0 -170
  455. data/app/helpers/essences_helper.rb +0 -167
  456. data/app/helpers/layout_helper.rb +0 -37
  457. data/app/helpers/pages_helper.rb +0 -503
  458. data/app/mailers/messages.rb +0 -15
  459. data/app/mailers/notifications.rb +0 -23
  460. data/app/models/attachment.rb +0 -80
  461. data/app/models/cell.rb +0 -59
  462. data/app/models/content.rb +0 -145
  463. data/app/models/element.rb +0 -476
  464. data/app/models/essence_audio.rb +0 -17
  465. data/app/models/essence_date.rb +0 -20
  466. data/app/models/essence_file.rb +0 -17
  467. data/app/models/essence_flash.rb +0 -15
  468. data/app/models/essence_html.rb +0 -19
  469. data/app/models/essence_picture.rb +0 -27
  470. data/app/models/essence_richtext.rb +0 -61
  471. data/app/models/essence_text.rb +0 -38
  472. data/app/models/essence_video.rb +0 -17
  473. data/app/models/folded_page.rb +0 -3
  474. data/app/models/language.rb +0 -83
  475. data/app/models/message.rb +0 -69
  476. data/app/models/page.rb +0 -545
  477. data/app/models/picture.rb +0 -98
  478. data/app/models/user.rb +0 -70
  479. data/app/models/user_session.rb +0 -10
  480. data/app/sweepers/content_sweeper.rb +0 -20
  481. data/app/sweepers/pages_sweeper.rb +0 -47
  482. data/app/sweepers/pictures_sweeper.rb +0 -21
  483. data/app/views/_contact.html.erb +0 -3
  484. data/app/views/_intro.html.erb +0 -3
  485. data/app/views/_news.html.erb +0 -3
  486. data/app/views/_search.html.erb +0 -3
  487. data/app/views/_standard.html.erb +0 -1
  488. data/app/views/admin/attachments/_files_list.html.erb +0 -24
  489. data/app/views/admin/attachments/index.html.erb +0 -30
  490. data/app/views/admin/clipboard/index.html.erb +0 -19
  491. data/app/views/admin/clipboard/insert.js.erb +0 -14
  492. data/app/views/admin/clipboard/remove.js.erb +0 -10
  493. data/app/views/admin/elements/_new_element_form.html.erb +0 -25
  494. data/app/views/admin/elements/new.html.erb +0 -33
  495. data/app/views/admin/index.html.erb +0 -102
  496. data/app/views/admin/infos.html.erb +0 -5
  497. data/app/views/admin/languages/_form.html.erb +0 -34
  498. data/app/views/admin/languages/_language.html.erb +0 -35
  499. data/app/views/admin/languages/destroy.js.erb +0 -1
  500. data/app/views/admin/languages/index.html.erb +0 -41
  501. data/app/views/admin/layoutpages/index.html.erb +0 -75
  502. data/app/views/admin/leave.html.erb +0 -11
  503. data/app/views/admin/login.html.erb +0 -46
  504. data/app/views/admin/logout.html.erb +0 -5
  505. data/app/views/admin/pages/_create_language_form.html.erb +0 -43
  506. data/app/views/admin/pages/configure.html.erb +0 -71
  507. data/app/views/admin/pages/edit.html.erb +0 -185
  508. data/app/views/admin/pages/flush.js.erb +0 -2
  509. data/app/views/admin/pages/index.html.erb +0 -108
  510. data/app/views/admin/pages/locked.html.erb +0 -3
  511. data/app/views/admin/partials/_mainnavigation_entry.html.erb +0 -27
  512. data/app/views/admin/partials/_pagination_links.html.erb +0 -5
  513. data/app/views/admin/partials/_per_page_links.html.erb +0 -17
  514. data/app/views/admin/partials/_sub_navigation.html.erb +0 -14
  515. data/app/views/admin/partials/_upload_form.html.erb +0 -119
  516. data/app/views/admin/pictures/_pictures_list.html.erb +0 -12
  517. data/app/views/admin/pictures/index.html.erb +0 -89
  518. data/app/views/admin/pictures/show_in_window.html.erb +0 -1
  519. data/app/views/admin/signup.html.erb +0 -16
  520. data/app/views/admin/users/_table.html.erb +0 -54
  521. data/app/views/admin/users/index.html.erb +0 -41
  522. data/app/views/alchemy/error_notice.js.erb +0 -1
  523. data/app/views/alchemy/permission_denied.js.erb +0 -2
  524. data/app/views/elements/_searchresult_editor.html.erb +0 -1
  525. data/app/views/elements/_searchresult_view.html.erb +0 -49
  526. data/app/views/elements/_sitemap_editor.html.erb +0 -3
  527. data/app/views/elements/show.html.erb +0 -6
  528. data/app/views/essences/_essence_audio_editor.html.erb +0 -1
  529. data/app/views/essences/_essence_flash_editor.html.erb +0 -1
  530. data/app/views/essences/_essence_richtext_editor.html.erb +0 -9
  531. data/app/views/essences/_essence_video_editor.html.erb +0 -1
  532. data/app/views/layouts/login.html.erb +0 -59
  533. data/app/views/layouts/pages.html.erb +0 -29
  534. data/app/views/notifications/admin_user_created.text.erb +0 -13
  535. data/app/views/notifications/registered_user_created.text.erb +0 -10
  536. data/app/views/page_layouts/_newsletter_layout.html.erb +0 -1
  537. data/config/initializers/authorization.rb +0 -4
  538. data/config/initializers/fast_gettext.rb +0 -3
  539. data/config/locales/de.yml +0 -377
  540. data/config/locales/en.yml +0 -371
  541. data/lib/alchemy/controller.rb +0 -79
  542. data/lib/rails/generators/alchemy/plugin/templates/gettext.rb +0 -2
  543. data/lib/tasks/gettext.rake +0 -120
  544. data/lib/translation_extras/alchemy_core_modules.rb +0 -11
  545. data/locale/alchemy.pot +0 -1749
  546. data/locale/de/alchemy.po +0 -1795
  547. data/locale/en/alchemy.po +0 -1745
  548. data/locale/missing_translations.rb +0 -4
  549. data/locale/model_attributes.rb +0 -56
  550. data/spec/helpers/contents_helper_spec.rb +0 -27
  551. data/vendor/assets/javascripts/jquery-1.6.2.min.js +0 -18
  552. data/vendor/assets/javascripts/jquery-ui-custom-1.8.16.min.js +0 -550
  553. data/vendor/assets/javascripts/swfupload/fileprogress.js +0 -203
  554. data/vendor/assets/javascripts/swfupload/handlers.js +0 -171
  555. data/vendor/assets/javascripts/tiny_mce/jquery.tinymce.js +0 -1
@@ -0,0 +1,169 @@
1
+ module Alchemy
2
+ class PagesController < Alchemy::BaseController
3
+
4
+ before_filter :render_page_or_redirect, :only => [:show, :sitemap]
5
+ before_filter :perform_search, :only => :show, :if => proc { configuration(:ferret) }
6
+
7
+ filter_access_to :show, :attribute_check => true, :model => Alchemy::Page, :load_method => :load_page
8
+
9
+ caches_action(
10
+ :show,
11
+ :cache_path => proc { url_for(:action => :show, :urlname => params[:urlname], :lang => multi_language? ? params[:lang] : nil) },
12
+ :if => proc do
13
+ if Alchemy::Config.get(:cache_pages)
14
+ page = Page.find_by_urlname_and_language_id_and_public(
15
+ params[:urlname],
16
+ session[:language_id],
17
+ true,
18
+ :select => 'page_layout, language_id, urlname'
19
+ )
20
+ if page
21
+ pagelayout = PageLayout.get(page.page_layout)
22
+ pagelayout['cache'].nil? || pagelayout['cache']
23
+ end
24
+ else
25
+ false
26
+ end
27
+ end
28
+ )
29
+
30
+ # Showing page from params[:urlname]
31
+ # @page is fetched via before filter
32
+ # @root_page is fetched via before filter
33
+ # @language fetched via before_filter in alchemy_controller
34
+ # querying for search results if any query is present via before_filter
35
+ # rendering page
36
+ def show
37
+ respond_to do |format|
38
+ format.html {
39
+ render :layout => params[:layout].blank? ? 'alchemy/pages' : params[:layout] == 'none' ? false : params[:layout]
40
+ }
41
+ format.rss {
42
+ if @page.contains_feed?
43
+ render :action => "show.rss.builder", :layout => false
44
+ else
45
+ render :xml => { :error => 'Not found' }, :status => 404
46
+ end
47
+ }
48
+ end
49
+ end
50
+
51
+ # Renders a Google conform sitemap in xml
52
+ def sitemap
53
+ @pages = Page.find_all_by_sitemap_and_public(true, true)
54
+ respond_to do |format|
55
+ format.xml { render :layout => "sitemap" }
56
+ end
57
+ end
58
+
59
+ protected
60
+
61
+ def load_page
62
+ # we need this, because of a dec_auth bug (it calls this method after the before_filter again).
63
+ return @page if @page
64
+ if params[:urlname].blank?
65
+ @page = Page.language_root_for(Language.get_default.id)
66
+ else
67
+ @page = Page.find_by_urlname_and_language_id(params[:urlname], session[:language_id])
68
+ # try to find the page in another language
69
+ if @page.nil?
70
+ @page = Page.find_by_urlname(params[:urlname])
71
+ else
72
+ return @page
73
+ end
74
+ end
75
+ end
76
+
77
+ def render_page_or_redirect
78
+ @page ||= load_page
79
+ if User.admins.count == 0 && @page.nil?
80
+ redirect_to signup_path
81
+ elsif @page.blank?
82
+ render(:file => "#{Rails.root}/public/404.html", :status => 404, :layout => false)
83
+ elsif multi_language? && params[:lang].blank?
84
+ redirect_page(:lang => session[:language_code])
85
+ elsif multi_language? && params[:urlname].blank? && !params[:lang].blank? && configuration(:redirect_index)
86
+ redirect_page(:lang => params[:lang])
87
+ elsif configuration(:redirect_to_public_child) && !@page.public?
88
+ redirect_to_public_child
89
+ elsif params[:urlname].blank? && configuration(:redirect_index)
90
+ redirect_page
91
+ elsif !multi_language? && !params[:lang].blank?
92
+ redirect_page
93
+ elsif @page.has_controller?
94
+ redirect_to(@page.controller_and_action)
95
+ else
96
+ # setting the language to page.language to be sure it's correct
97
+ set_language_from(@page.language_id)
98
+ if params[:urlname].blank?
99
+ @root_page = @page
100
+ else
101
+ @root_page = Page.language_root_for(session[:language_id])
102
+ end
103
+ end
104
+ end
105
+
106
+ # Performs a search on EssenceRichtext and EssenceText for params['query'].
107
+ # Only performing the search when ferret is enabled in the alchemy/config.yml and
108
+ # a Page gets found where the searchresults can be rendered. This Page gets found
109
+ # when a page_layout is marked for rendering searchresults:
110
+ # 'searchresults: true' in alchemy/page_layouts.yml
111
+ def perform_search
112
+ searchresult_page_layouts = PageLayout.get_all_by_attributes({:searchresults => true})
113
+ if searchresult_page_layouts.any?
114
+ @search_result_page = Page.find_by_page_layout_and_public_and_language_id(searchresult_page_layouts.first["name"], true, session[:language_id])
115
+ if !params[:query].blank? && @search_result_page
116
+ @rtf_search_results = EssenceRichtext.find_with_ferret(
117
+ "*#{params[:query]}*",
118
+ {:limit => :all},
119
+ {:conditions => ["public = ?", true]}
120
+ )
121
+ @text_search_results = EssenceText.find_with_ferret(
122
+ "*#{params[:query]}*",
123
+ {:limit => :all},
124
+ {:conditions => ["public = ?", true]}
125
+ )
126
+ @search_results = (@text_search_results + @rtf_search_results).sort{ |y, x| x.ferret_score <=> y.ferret_score }
127
+ end
128
+ end
129
+ end
130
+
131
+ def find_first_public(page)
132
+ if(page.public == true)
133
+ return page
134
+ end
135
+ page.children.each do |child|
136
+ result = find_first_public(child)
137
+ if(result!=nil)
138
+ return result
139
+ end
140
+ end
141
+ return nil
142
+ end
143
+
144
+ def redirect_to_public_child
145
+ @page = find_first_public(@page)
146
+ if @page.blank?
147
+ render :file => "#{Rails.root}/public/404.html", :status => 404, :layout => false
148
+ else
149
+ redirect_page
150
+ end
151
+ end
152
+
153
+ def redirect_page(options={})
154
+ defaults = {
155
+ :lang => (multi_language? ? @page.language_code : nil),
156
+ :urlname => @page.urlname
157
+ }
158
+ options = defaults.merge(options)
159
+ redirect_to show_page_path(options.merge(additional_params)), :status => 301
160
+ end
161
+
162
+ def additional_params
163
+ params.clone.delete_if do |key, value|
164
+ ["action", "controller", "urlname", "lang"].include?(key)
165
+ end
166
+ end
167
+
168
+ end
169
+ end
@@ -0,0 +1,62 @@
1
+ module Alchemy
2
+ class PicturesController < Alchemy::BaseController
3
+
4
+ caches_page :show, :thumbnail, :zoom
5
+
6
+ filter_access_to :thumbnail
7
+
8
+ def show
9
+ @picture = Picture.find(params[:id])
10
+ @size = params[:size]
11
+ @crop = !params[:crop].nil?
12
+ @crop_from = normalized_size(params[:crop_from])
13
+ @crop_size = params[:crop_size]
14
+ @padding = params[:padding]
15
+ @upsample = !params[:upsample].nil? ? true : false
16
+ @effects = params[:effects]
17
+ respond_to do |format|
18
+ format.jpg
19
+ format.png
20
+ format.gif
21
+ end
22
+ end
23
+
24
+ def thumbnail
25
+ @picture = Picture.find(params[:id])
26
+ case params[:size]
27
+ when "small"
28
+ @size = "80x60"
29
+ when "medium"
30
+ @size = "160x120"
31
+ when "large"
32
+ @size = "240x180"
33
+ when nil
34
+ @size = "111x93"
35
+ else
36
+ @size = params[:size]
37
+ end
38
+ if !params[:crop_size].blank? && !params[:crop_from].blank?
39
+ @crop = true
40
+ elsif params[:crop] == 'crop'
41
+ @default_crop = true
42
+ end
43
+ end
44
+
45
+ def zoom
46
+ @picture = Picture.find(params[:id])
47
+ respond_to do |format|
48
+ format.png
49
+ end
50
+ end
51
+
52
+ private
53
+
54
+ def normalized_size(size)
55
+ return "" if size.blank?
56
+ size.split("x").map do |s|
57
+ s.to_i < 0 ? 0 : s.to_i
58
+ end.join('x')
59
+ end
60
+
61
+ end
62
+ end
@@ -0,0 +1,80 @@
1
+ module Alchemy
2
+ class UserSessionsController < Alchemy::BaseController
3
+ before_filter :check_user_count, :only => :login
4
+ layout 'alchemy/login'
5
+
6
+ helper 'Alchemy::Admin::Base'
7
+
8
+ # Signup only works if no user is present in database.
9
+ def signup
10
+ @user_genders = User.genders_for_select
11
+ if request.get?
12
+ redirect_to admin_dashboard_path if User.count != 0
13
+ @user = User.new({:role => 'admin'})
14
+ else
15
+ @user = User.new(params[:user])
16
+ if @user.save
17
+ if params[:send_credentials]
18
+ Notifications.admin_user_created(@user).deliver
19
+ end
20
+ redirect_to admin_dashboard_path
21
+ end
22
+ end
23
+ end
24
+
25
+ def login
26
+ if current_user
27
+ redirect_to admin_dashboard_path, :notice => t('You are already logged in.')
28
+ else
29
+ if request.get?
30
+ @user_session = UserSession.new()
31
+ @user_roles = User::ROLES.map { |role| [User.human_rolename(role), role]}
32
+ @user_genders = User.genders_for_select
33
+ flash.now[:info] = params[:message] || t("welcome_please_identify_notice")
34
+ else
35
+ @user_session = UserSession.new(params[:alchemy_user_session])
36
+ store_screen_size
37
+ if @user_session.save
38
+ if session[:redirect_path].blank?
39
+ redirect_to admin_dashboard_path
40
+ else
41
+ # We have to strip double slashes from beginning of path, because of strange rails/rack bug.
42
+ redirect_to session[:redirect_path].gsub(/^\/{2,}/, '/')
43
+ end
44
+ else
45
+ render
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+ def leave
52
+ render :layout => false
53
+ end
54
+
55
+ def logout
56
+ message = params[:message] || t("logged_out")
57
+ @user_session = UserSession.find
58
+ if @user_session
59
+ @user_session.destroy
60
+ end
61
+ flash[:info] = message
62
+ redirect_to root_url
63
+ end
64
+
65
+ private
66
+
67
+ def check_user_count
68
+ if User.count == 0
69
+ redirect_to :action => 'signup'
70
+ else
71
+ return true
72
+ end
73
+ end
74
+
75
+ def store_screen_size
76
+ session[:screen_size] = params[:user_screensize]
77
+ end
78
+
79
+ end
80
+ end
@@ -0,0 +1,11 @@
1
+ module Alchemy
2
+ module Admin
3
+ module AttachmentsHelper
4
+
5
+ def mime_to_human mime
6
+ Alchemy::I18n.t("alchemy.mime_types.#{mime}", :default => t('document'))
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,423 @@
1
+ module Alchemy
2
+ module Admin
3
+ module BaseHelper
4
+
5
+ # This helper renders the link for an overlay window.
6
+ # We use this for our fancy modal overlay windows in the Alchemy cockpit.
7
+ #
8
+ # Options:
9
+ #
10
+ # :size [String] # String with format of "WidthxHeight". I.E. ("420x280")
11
+ # :title [String] # Text for the overlay title bar.
12
+ # :overflow [Boolean] # Should the dialog have overlapping content. If not, it shows scrollbars. Good for select boxes. Default false.
13
+ # :resizable [Boolean] # Is the dialog window resizable? Default false.
14
+ # :modal [Boolean] # Show as modal window. Default true.
15
+ #
16
+ def link_to_overlay_window(content, url, options={}, html_options={})
17
+ default_options = {
18
+ :modal => true,
19
+ :overflow => false,
20
+ :resizable => false
21
+ }
22
+ options = default_options.merge(options)
23
+ link_to_function(
24
+ content,
25
+ "Alchemy.openWindow(
26
+ \'#{url}\',
27
+ \'#{options[:title]}\',
28
+ \'#{options[:size] ? options[:size].split('x')[0].to_s : 'auto'}\',
29
+ \'#{options[:size] ? options[:size].split('x')[1].to_s : 'auto'}\',
30
+ #{options[:resizable]},
31
+ #{options[:modal]},
32
+ #{options[:overflow]}
33
+ )",
34
+ html_options
35
+ )
36
+ end
37
+
38
+ # Used for rendering the folder link in Admin::Pages.index sitemap.
39
+ def sitemapFolderLink(page)
40
+ return '' if page.level == 1
41
+ if page.folded?(current_user.id)
42
+ css_class = 'folded'
43
+ title = t('Show childpages')
44
+ else
45
+ css_class = 'collapsed'
46
+ title = t('Hide childpages')
47
+ end
48
+ link_to(
49
+ '',
50
+ alchemy.fold_admin_page_path(page),
51
+ :remote => true,
52
+ :method => :post,
53
+ :class => "page_folder #{css_class}",
54
+ :title => title,
55
+ :id => "fold_button_#{page.id}"
56
+ )
57
+ end
58
+
59
+ # Used for language selector in Alchemy cockpit sitemap. So the user can select the language branche of the page.
60
+ def language_codes_for_select
61
+ configuration(:languages).collect{ |language|
62
+ language[:language_code]
63
+ }
64
+ end
65
+
66
+ # Used for translations selector in Alchemy cockpit user settings.
67
+ def translations_for_select
68
+ Alchemy::I18n.available_locales.map do |locale|
69
+ [t(locale, :scope => :translations), locale]
70
+ end
71
+ end
72
+
73
+ # Used by Alchemy to display a javascript driven filter for lists in the Alchemy cockpit.
74
+ def js_filter_field options = {}
75
+ default_options = {
76
+ :class => "thin_border js_filter_field",
77
+ :onkeyup => "Alchemy.ListFilter('#contact_list li')",
78
+ :id => "search_field"
79
+ }
80
+ options = default_options.merge(options)
81
+ options[:onkeyup] << ";jQuery('#search_field').val().length >= 1 ? jQuery('.js_filter_field_clear').show() : jQuery('.js_filter_field_clear').hide();"
82
+ filter_field = "<div class=\"js_filter_field_box\">"
83
+ filter_field << text_field_tag("filter", '', options)
84
+ filter_field << content_tag('span', '', :class => 'icon search')
85
+ filter_field << link_to_function(
86
+ "",
87
+ "jQuery('##{options[:id]}').val('');#{options[:onkeyup]}",
88
+ :class => "js_filter_field_clear",
89
+ :style => "display:none",
90
+ :title => t("click_to_show_all")
91
+ )
92
+ filter_field << "<label for=\"search_field\">" + t("search") + "</label>"
93
+ filter_field << "</div>"
94
+ filter_field.html_safe
95
+ end
96
+
97
+ def link_to_confirmation_window(link_string = "", message = "", url = "", html_options = {})
98
+ title = t("please_confirm")
99
+ ok_lable = t("yes")
100
+ cancel_lable = t("no")
101
+ link_to_function(
102
+ link_string,
103
+ "Alchemy.confirmToDeleteWindow('#{url}', '#{title}', '#{message}', '#{ok_lable}', '#{cancel_lable}');",
104
+ html_options
105
+ )
106
+ end
107
+
108
+ # Renders a form select tag for storing page urlnames
109
+ # Options:
110
+ # * element - element the Content find via content_name to store the pages urlname in.
111
+ # * content_name - the name of the content from element to store the pages urlname in.
112
+ # * options (Hash)
113
+ # ** :only (Hash) - pass page_layout names to :page_layout => [""] so only pages with this page_layout will be displayed inside the select.
114
+ # ** :except (Hash) - pass page_layout names to :page_layout => [""] so all pages except these with this page_layout will be displayed inside the select.
115
+ # ** :page_attribute (Symbol) - The Page attribute which will be stored.
116
+ # * select_options (Hash) - will be passed to the select_tag helper
117
+ def page_selector(element, content_name, options = {}, select_options = {})
118
+ default_options = {
119
+ :except => {
120
+ :page_layout => [""]
121
+ },
122
+ :only => {
123
+ :page_layout => [""]
124
+ },
125
+ :page_attribute => :urlname,
126
+ :prompt => t('Choose page')
127
+ }
128
+ options = default_options.merge(options)
129
+ content = element.content_by_name(content_name)
130
+ if content.nil?
131
+ return warning('Content', t('content_not_found'))
132
+ elsif content.essence.nil?
133
+ return warning('Content', t('content_essence_not_found'))
134
+ end
135
+ pages = Page.where({
136
+ :language_id => session[:language_id],
137
+ :page_layout => options[:only][:page_layout],
138
+ :public => true
139
+ })
140
+ select_tag(
141
+ "contents[content_#{content.id}][body]",
142
+ pages_for_select(pages, content.essence.body, options[:prompt], options[:page_attribute]),
143
+ select_options
144
+ )
145
+ end
146
+
147
+ # Returns an Array build for passing it to the options_for_select helper inside an essence editor partial.
148
+ # Usefull for the select_values options from the render_essence_editor helpers.
149
+ # Options:
150
+ # * :from_page (String, Page) - Return only elements from this page. You can either pass a Page instance, or a page_layout name
151
+ # * :elements_with_name (Array, String) - Return only elements with this name(s).
152
+ def elements_for_essence_editor_select(options={})
153
+ defaults = {
154
+ :from_page => nil,
155
+ :elements_with_name => nil,
156
+ :prompt => t('Please choose')
157
+ }
158
+ options = defaults.merge(options)
159
+ if options[:from_page]
160
+ page = options[:from_page].is_a?(String) ? Page.find_by_page_layout(options[:from_page]) : options[:from_page]
161
+ end
162
+ if page
163
+ elements = options[:elements_with_name].blank? ? page.elements.find_all_by_public(true) : page.elements.find_all_by_public_and_name(true, options[:elements_with_name])
164
+ else
165
+ elements = options[:elements_with_name].blank? ? Element.find_all_by_public(true) : Element.find_all_by_public_and_name(true, options[:elements_with_name])
166
+ end
167
+ select_options = [[options[:prompt], ""]]
168
+ elements.each do |e|
169
+ select_options << [e.display_name_with_preview_text, e.id.to_s]
170
+ end
171
+ select_options
172
+ end
173
+
174
+ # Returns all Pages found in the database as an array for the rails select_tag helper.
175
+ # You can pass a collection of pages to only returns these pages as array.
176
+ # Pass an Page.name or Page.id as second parameter to pass as selected for the options_for_select helper.
177
+ def pages_for_select(pages = nil, selected = nil, prompt = "", page_attribute = :id)
178
+ result = [[prompt.blank? ? t('Choose page') : prompt, ""]]
179
+ if pages.blank?
180
+ pages = Page.find_all_by_language_id_and_public(session[:language_id], true)
181
+ end
182
+ pages.each do |p|
183
+ result << [p.name, p.send(page_attribute).to_s]
184
+ end
185
+ options_for_select(result, selected.to_s)
186
+ end
187
+
188
+ def render_essence_selection_editor(element, content, select_options)
189
+ if content.class == String
190
+ content = element.contents.find_by_name(content)
191
+ else
192
+ content = element.contents[content - 1]
193
+ end
194
+ if content.essence.nil?
195
+ return warning('Element', t('content_essence_not_found'))
196
+ end
197
+ select_options = options_for_select(select_options, content.essence.content)
198
+ select_tag(
199
+ "contents[content_#{content.id}]",
200
+ select_options
201
+ )
202
+ end
203
+
204
+ def admin_main_navigation
205
+ entries = ""
206
+ alchemy_modules.each do |alchemy_module|
207
+ entries << alchemy_main_navigation_entry(alchemy_module)
208
+ end
209
+ entries.html_safe
210
+ end
211
+
212
+ def alchemy_main_navigation_entry(alchemy_module)
213
+ render 'alchemy/admin/partials/main_navigation_entry', :alchemy_module => alchemy_module.stringify_keys, :navigation => alchemy_module['navigation'].stringify_keys
214
+ end
215
+
216
+ def admin_subnavigation
217
+ alchemy_module = module_definition_for(:controller => params[:controller], :action => params[:action])
218
+ unless alchemy_module.nil?
219
+ entries = alchemy_module["navigation"].stringify_keys['sub_navigation']
220
+ render_admin_subnavigation(entries) unless entries.nil?
221
+ else
222
+ ""
223
+ end
224
+ end
225
+
226
+ # Renders the Subnavigation for the admin interface.
227
+ def render_admin_subnavigation(entries)
228
+ render "alchemy/admin/partials/sub_navigation_tab", :entries => entries
229
+ end
230
+
231
+ # Used for checking the main navi permissions
232
+ def navigate_module(navigation)
233
+ [navigation["action"].to_sym, navigation["controller"].gsub(/^\//, '').gsub(/\//, '_').to_sym]
234
+ end
235
+
236
+ # Returns true if the current controller and action is in a modules navigation definition.
237
+ def admin_mainnavi_active?(mainnav)
238
+ mainnav.stringify_keys!
239
+ subnavi = mainnav["sub_navigation"].map(&:stringify_keys) if mainnav["sub_navigation"]
240
+ nested = mainnav["nested"].map(&:stringify_keys) if mainnav["nested"]
241
+ if subnavi
242
+ (!subnavi.detect{ |subnav| subnav["controller"].gsub(/^\//, '') == params[:controller] && subnav["action"] == params[:action] }.blank?) ||
243
+ (nested && !nested.detect{ |n| n["controller"] == params[:controller] && n["action"] == params[:action] }.blank?)
244
+ else
245
+ mainnav["controller"] == params[:controller] && mainnav["action"] == params["action"]
246
+ end
247
+ end
248
+
249
+ # Calls the url_for helper on either an alchemy module engine, or the app alchemy is mounted at.
250
+ def url_for_module(alchemy_module)
251
+ navigation = alchemy_module['navigation'].stringify_keys
252
+ url_options = {
253
+ :controller => navigation['controller'],
254
+ :action => navigation['action']
255
+ }
256
+ if alchemy_module['engine_name']
257
+ eval(alchemy_module['engine_name']).url_for(url_options)
258
+ else
259
+ main_app.url_for(url_options)
260
+ end
261
+ end
262
+
263
+ # Calls the url_for helper on either an alchemy module engine, or the app alchemy is mounted at.
264
+ def url_for_module_sub_navigation(navigation)
265
+ alchemy_module = module_definition_for(navigation)
266
+ engine_name = alchemy_module['engine_name'] if alchemy_module
267
+ navigation.stringify_keys!
268
+ url_options = {
269
+ :controller => navigation['controller'],
270
+ :action => navigation['action']
271
+ }
272
+ if engine_name
273
+ eval(engine_name).url_for(url_options)
274
+ else
275
+ main_app.url_for(url_options)
276
+ end
277
+ end
278
+
279
+ def main_navigation_css_classes(navigation)
280
+ ['main_navi_entry', admin_mainnavi_active?(navigation) ? 'active' : nil].compact.join(" ")
281
+ end
282
+
283
+ def necessary_options_for_cropping_provided?(options)
284
+ options[:crop].to_s == 'true' && !options[:image_size].blank?
285
+ end
286
+
287
+ # Renders translated Module Names for html title element.
288
+ def render_alchemy_title
289
+ if content_for?(:title)
290
+ title = content_for(:title)
291
+ else
292
+ title = t(controller_name, :scope => :modules)
293
+ end
294
+ "Alchemy CMS - #{title}"
295
+ end
296
+
297
+ # Returns max image count as integer or nil. Used for the picture editor in element editor views.
298
+ def max_image_count
299
+ return nil if !@options
300
+ if @options[:maximum_amount_of_images].blank?
301
+ image_count = @options[:max_images]
302
+ else
303
+ image_count = @options[:maximum_amount_of_images]
304
+ end
305
+ if image_count.blank?
306
+ nil
307
+ else
308
+ image_count.to_i
309
+ end
310
+ end
311
+
312
+ def clipboard_select_tag(items, html_options = {})
313
+ options = [[t('Please choose'), ""]]
314
+ items.each do |item|
315
+ options << [item.class.to_s == 'Element' ? item.display_name_with_preview_text : item.name, item.id]
316
+ end
317
+ select_tag(
318
+ 'paste_from_clipboard',
319
+ !@page.new_record? && @page.can_have_cells? ? grouped_elements_for_select(items, :id) : options_for_select(options),
320
+ {
321
+ :class => html_options[:class] || 'very_long',
322
+ :style => html_options[:style]
323
+ }
324
+ )
325
+ end
326
+
327
+ # Renders a toolbar button for the Alchemy toolbar
328
+ #
329
+ # Options:
330
+ #
331
+ # :icon [String] # Icon class. See base.css.sccs for available icons, or make your own.
332
+ # :label [String] # Text for button label.
333
+ # :url [String] # Url for link.
334
+ # :title [String] # Text for title tag.
335
+ # :overlay [Boolean] # Pass true to open the link in a modal overlay window.
336
+ # :overlay_options [Hash] # Overlay options. See link_to_overlay_window helper.
337
+ # :if_permitted_to [Array] # Check permission for button. [:action, :controller]. Exactly how you defined the permission in your +authorization_rules.rb+. Defaults to controller and action from button url.
338
+ # :skip_permission_check [Boolean] # Skip the permission check. Default false. NOT RECOMMENDED!
339
+ #
340
+ def toolbar_button(options = {})
341
+ options.symbolize_keys!
342
+ defaults = {
343
+ :overlay => true,
344
+ :skip_permission_check => false
345
+ }
346
+ options = defaults.merge(options)
347
+ button = content_tag('div', :class => 'button_with_label') do
348
+ link = if options[:overlay]
349
+ link_to_overlay_window(
350
+ render_icon(options[:icon]),
351
+ options[:url],
352
+ options[:overlay_options],
353
+ {
354
+ :class => 'icon_button',
355
+ :title => options[:title]
356
+ }
357
+ )
358
+ else
359
+ link_to options[:url], {:class => "icon_button#{options[:remote] ? nil : ' please_wait'}", :title => options[:title]}.merge(options[:link_options]) do
360
+ render_icon(options[:icon])
361
+ end
362
+ end
363
+ link += content_tag('label', options[:label])
364
+ end
365
+ if options[:skip_permission_check]
366
+ return button
367
+ else
368
+ if options[:if_permitted_to].blank?
369
+ action_controller = options[:url].gsub(/^\//, '').split('/')
370
+ options[:if_permitted_to] = [action_controller.last.to_sym, action_controller[0..action_controller.length-2].join('_').to_sym]
371
+ end
372
+ if permitted_to?(*options[:if_permitted_to])
373
+ return button
374
+ else
375
+ return ""
376
+ end
377
+ end
378
+ end
379
+
380
+ # Renders the alchemy backend toolbar
381
+ #
382
+ # Options are:
383
+ #
384
+ # buttons [Array] # Pass an Array with button options. They will be passed to toolbar_button helper. For options see +toolbar_button+
385
+ # search [Boolean] # Show searchfield. Default true.
386
+ #
387
+ def toolbar(options = {})
388
+ defaults = {
389
+ :buttons => [],
390
+ :search => true
391
+ }
392
+ options = defaults.merge(options)
393
+ content_for(:toolbar) do
394
+ content = <<-CONTENT
395
+ #{options[:buttons].map { |button_options| toolbar_button(button_options) }.join()}
396
+ #{render('alchemy/admin/partials/search_form', :url => options[:search_url]) if options[:search]}
397
+ CONTENT
398
+ content.html_safe
399
+ end
400
+ end
401
+
402
+ # Renders the partial for a resource record in the resources table.
403
+ # This helper has a nice fallback. If your resource has a partial for a single record named like the resouce model name (i.e. language) then this partial will be rendered.
404
+ # Otherwise the resource parital from +resources/resource+
405
+ def render_resources
406
+ render resources_instance_variable
407
+ rescue ActionView::MissingTemplate
408
+ render :partial => 'resource', :collection => resources_instance_variable
409
+ end
410
+
411
+ # Used by upload form
412
+ def new_asset_path_with_session_information(asset_type)
413
+ session_key = Rails.application.config.session_options[:key]
414
+ if asset_type == "picture"
415
+ alchemy.admin_pictures_path(session_key => cookies[session_key], request_forgery_protection_token => form_authenticity_token, :format => :js)
416
+ elsif asset_type == "attachment"
417
+ alchemy.admin_attachments_path(session_key => cookies[session_key], request_forgery_protection_token => form_authenticity_token, :format => :js)
418
+ end
419
+ end
420
+
421
+ end
422
+ end
423
+ end