alchemy_cms 2.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (489) hide show
  1. data/.gitignore +7 -0
  2. data/.yardopts +6 -0
  3. data/Gemfile +8 -0
  4. data/LICENSE +619 -0
  5. data/README.md +113 -0
  6. data/Rakefile +30 -0
  7. data/TODO.txt +1 -0
  8. data/alchemy.gemspec +36 -0
  9. data/app/controllers/admin/attachments_controller.rb +119 -0
  10. data/app/controllers/admin/clipboard_controller.rb +43 -0
  11. data/app/controllers/admin/contents_controller.rb +69 -0
  12. data/app/controllers/admin/elements_controller.rb +137 -0
  13. data/app/controllers/admin/essence_audios_controller.rb +14 -0
  14. data/app/controllers/admin/essence_files_controller.rb +35 -0
  15. data/app/controllers/admin/essence_flashes_controller.rb +14 -0
  16. data/app/controllers/admin/essence_pictures_controller.rb +89 -0
  17. data/app/controllers/admin/essence_videos_controller.rb +14 -0
  18. data/app/controllers/admin/languages_controller.rb +70 -0
  19. data/app/controllers/admin/layoutpages_controller.rb +11 -0
  20. data/app/controllers/admin/pages_controller.rb +244 -0
  21. data/app/controllers/admin/pictures_controller.rb +132 -0
  22. data/app/controllers/admin/trash_controller.rb +25 -0
  23. data/app/controllers/admin/users_controller.rb +75 -0
  24. data/app/controllers/admin_controller.rb +78 -0
  25. data/app/controllers/alchemy_controller.rb +239 -0
  26. data/app/controllers/attachments_controller.rb +30 -0
  27. data/app/controllers/elements_controller.rb +18 -0
  28. data/app/controllers/messages_controller.rb +98 -0
  29. data/app/controllers/pages_controller.rb +137 -0
  30. data/app/controllers/pictures_controller.rb +68 -0
  31. data/app/helpers/admin/attachments_helper.rb +7 -0
  32. data/app/helpers/admin/elements_helper.rb +28 -0
  33. data/app/helpers/admin/pages_helper.rb +3 -0
  34. data/app/helpers/admin/pictures_helper.rb +26 -0
  35. data/app/helpers/alchemy_helper.rb +1168 -0
  36. data/app/helpers/elements_helper.rb +2 -0
  37. data/app/helpers/errors_helper.rb +37 -0
  38. data/app/helpers/layout_helper.rb +37 -0
  39. data/app/helpers/pages_helper.rb +141 -0
  40. data/app/mailers/messages.rb +15 -0
  41. data/app/mailers/notifications.rb +23 -0
  42. data/app/models/attachment.rb +73 -0
  43. data/app/models/cell.rb +63 -0
  44. data/app/models/content.rb +145 -0
  45. data/app/models/element.rb +423 -0
  46. data/app/models/essence_audio.rb +17 -0
  47. data/app/models/essence_date.rb +20 -0
  48. data/app/models/essence_file.rb +17 -0
  49. data/app/models/essence_flash.rb +15 -0
  50. data/app/models/essence_html.rb +19 -0
  51. data/app/models/essence_picture.rb +27 -0
  52. data/app/models/essence_richtext.rb +50 -0
  53. data/app/models/essence_text.rb +28 -0
  54. data/app/models/essence_video.rb +17 -0
  55. data/app/models/folded_page.rb +3 -0
  56. data/app/models/language.rb +75 -0
  57. data/app/models/message.rb +57 -0
  58. data/app/models/page.rb +501 -0
  59. data/app/models/picture.rb +100 -0
  60. data/app/models/user.rb +72 -0
  61. data/app/models/user_session.rb +10 -0
  62. data/app/sweepers/content_sweeper.rb +20 -0
  63. data/app/sweepers/pages_sweeper.rb +46 -0
  64. data/app/sweepers/pictures_sweeper.rb +20 -0
  65. data/app/views/_contact.html.erb +3 -0
  66. data/app/views/_intro.html.erb +3 -0
  67. data/app/views/_news.html.erb +3 -0
  68. data/app/views/_newsletter_layout.html.erb +1 -0
  69. data/app/views/_search.html.erb +3 -0
  70. data/app/views/_standard.html.erb +1 -0
  71. data/app/views/admin/attachments/_attachment.html.erb +58 -0
  72. data/app/views/admin/attachments/_file_to_assign.html.erb +20 -0
  73. data/app/views/admin/attachments/_files_list.html.erb +24 -0
  74. data/app/views/admin/attachments/archive_overlay.html.erb +8 -0
  75. data/app/views/admin/attachments/create.js.erb +6 -0
  76. data/app/views/admin/attachments/edit.html.erb +12 -0
  77. data/app/views/admin/attachments/index.html.erb +30 -0
  78. data/app/views/admin/attachments/new.html.erb +11 -0
  79. data/app/views/admin/clipboard/clear.js.erb +6 -0
  80. data/app/views/admin/clipboard/index.html.erb +19 -0
  81. data/app/views/admin/clipboard/insert.js.erb +14 -0
  82. data/app/views/admin/clipboard/remove.js.erb +10 -0
  83. data/app/views/admin/contents/_missing.html.erb +20 -0
  84. data/app/views/admin/contents/create.js.erb +93 -0
  85. data/app/views/admin/contents/new.html.erb +15 -0
  86. data/app/views/admin/elements/_add_content.html.erb +16 -0
  87. data/app/views/admin/elements/_element.html.erb +22 -0
  88. data/app/views/admin/elements/_element_foot.html.erb +35 -0
  89. data/app/views/admin/elements/_element_head.html.erb +29 -0
  90. data/app/views/admin/elements/_elements_select.html.erb +8 -0
  91. data/app/views/admin/elements/_new_element_form.html.erb +25 -0
  92. data/app/views/admin/elements/_picture_editor.html.erb +25 -0
  93. data/app/views/admin/elements/create.js.erb +20 -0
  94. data/app/views/admin/elements/destroy.js.erb +6 -0
  95. data/app/views/admin/elements/fold.js.erb +37 -0
  96. data/app/views/admin/elements/index.html.erb +33 -0
  97. data/app/views/admin/elements/list.js.erb +20 -0
  98. data/app/views/admin/elements/new.html.erb +33 -0
  99. data/app/views/admin/elements/order.js.erb +7 -0
  100. data/app/views/admin/elements/trash.js.erb +13 -0
  101. data/app/views/admin/elements/update.js.erb +10 -0
  102. data/app/views/admin/essence_files/edit.html.erb +91 -0
  103. data/app/views/admin/essence_pictures/assign.js.erb +15 -0
  104. data/app/views/admin/essence_pictures/crop.html.erb +36 -0
  105. data/app/views/admin/essence_pictures/destroy.js.erb +17 -0
  106. data/app/views/admin/essence_pictures/edit.html.erb +75 -0
  107. data/app/views/admin/essence_pictures/update.js.erb +16 -0
  108. data/app/views/admin/index.html.erb +92 -0
  109. data/app/views/admin/infos.html.erb +5 -0
  110. data/app/views/admin/languages/_form.html.erb +34 -0
  111. data/app/views/admin/languages/_language.html.erb +35 -0
  112. data/app/views/admin/languages/edit.html.erb +1 -0
  113. data/app/views/admin/languages/index.html.erb +41 -0
  114. data/app/views/admin/languages/new.html.erb +1 -0
  115. data/app/views/admin/layoutpages/_layoutpage.html.erb +80 -0
  116. data/app/views/admin/layoutpages/index.html.erb +75 -0
  117. data/app/views/admin/leave.html.erb +11 -0
  118. data/app/views/admin/login.html.erb +46 -0
  119. data/app/views/admin/logout.html.erb +5 -0
  120. data/app/views/admin/pages/_contactform_links.html.erb +66 -0
  121. data/app/views/admin/pages/_create_language_form.html.erb +42 -0
  122. data/app/views/admin/pages/_external_link.html.erb +54 -0
  123. data/app/views/admin/pages/_file_link.html.erb +52 -0
  124. data/app/views/admin/pages/_internal_link.html.erb +47 -0
  125. data/app/views/admin/pages/_new_page_form.html.erb +29 -0
  126. data/app/views/admin/pages/_page.html.erb +114 -0
  127. data/app/views/admin/pages/_page_for_links.html.erb +43 -0
  128. data/app/views/admin/pages/_page_infos.html.erb +3 -0
  129. data/app/views/admin/pages/_page_status.html.erb +9 -0
  130. data/app/views/admin/pages/_sitemap.html.erb +99 -0
  131. data/app/views/admin/pages/configure.html.erb +71 -0
  132. data/app/views/admin/pages/configure_external.html.erb +40 -0
  133. data/app/views/admin/pages/destroy.js.erb +12 -0
  134. data/app/views/admin/pages/edit.html.erb +185 -0
  135. data/app/views/admin/pages/flush.js.erb +2 -0
  136. data/app/views/admin/pages/fold.js.erb +4 -0
  137. data/app/views/admin/pages/index.html.erb +108 -0
  138. data/app/views/admin/pages/link.html.erb +30 -0
  139. data/app/views/admin/pages/locked.html.erb +3 -0
  140. data/app/views/admin/pages/new.html.erb +50 -0
  141. data/app/views/admin/pages/show.html.erb +1 -0
  142. data/app/views/admin/pages/sort.js.erb +6 -0
  143. data/app/views/admin/pages/unlock.js.erb +8 -0
  144. data/app/views/admin/pages/update.js.erb +19 -0
  145. data/app/views/admin/partials/_flash.html.erb +4 -0
  146. data/app/views/admin/partials/_flash_notices.html.erb +5 -0
  147. data/app/views/admin/partials/_mainnavigation_entry.html.erb +27 -0
  148. data/app/views/admin/partials/_pagination_links.html.erb +7 -0
  149. data/app/views/admin/partials/_per_page_links.html.erb +17 -0
  150. data/app/views/admin/partials/_remote_pagination_links.html.erb +11 -0
  151. data/app/views/admin/partials/_remote_search_form.html.erb +36 -0
  152. data/app/views/admin/partials/_search_form.html.erb +17 -0
  153. data/app/views/admin/partials/_sub_navigation.html.erb +14 -0
  154. data/app/views/admin/partials/_upload_form.html.erb +116 -0
  155. data/app/views/admin/pictures/_archive_overlay_images.html.erb +17 -0
  156. data/app/views/admin/pictures/_filter_and_size_bar.html.erb +88 -0
  157. data/app/views/admin/pictures/_picture.html.erb +36 -0
  158. data/app/views/admin/pictures/_picture_to_assign.html.erb +32 -0
  159. data/app/views/admin/pictures/_pictures_list.html.erb +12 -0
  160. data/app/views/admin/pictures/archive_overlay.html.erb +3 -0
  161. data/app/views/admin/pictures/create.js.erb +12 -0
  162. data/app/views/admin/pictures/index.html.erb +56 -0
  163. data/app/views/admin/pictures/new.html.erb +11 -0
  164. data/app/views/admin/pictures/show_in_window.html.erb +1 -0
  165. data/app/views/admin/pictures/update.js.erb +11 -0
  166. data/app/views/admin/signup.html.erb +16 -0
  167. data/app/views/admin/trash/index.html.erb +25 -0
  168. data/app/views/admin/users/_table.html.erb +54 -0
  169. data/app/views/admin/users/_user.html.erb +36 -0
  170. data/app/views/admin/users/edit.html.erb +6 -0
  171. data/app/views/admin/users/index.html.erb +41 -0
  172. data/app/views/admin/users/new.html.erb +6 -0
  173. data/app/views/attachments/show.html.erb +1 -0
  174. data/app/views/elements/_article_editor.html.erb +4 -0
  175. data/app/views/elements/_article_view.html.erb +25 -0
  176. data/app/views/elements/_bild_editor.html.erb +1 -0
  177. data/app/views/elements/_bild_text_editor.html.erb +2 -0
  178. data/app/views/elements/_bild_text_view.html.erb +9 -0
  179. data/app/views/elements/_bild_view.html.erb +9 -0
  180. data/app/views/elements/_claim_editor.html.erb +1 -0
  181. data/app/views/elements/_claim_view.html.erb +1 -0
  182. data/app/views/elements/_contactform_editor.html.erb +7 -0
  183. data/app/views/elements/_contactform_view.html.erb +92 -0
  184. data/app/views/elements/_editor_not_found.html.erb +5 -0
  185. data/app/views/elements/_footnote_editor.html.erb +1 -0
  186. data/app/views/elements/_footnote_view.html.erb +5 -0
  187. data/app/views/elements/_header_editor.html.erb +1 -0
  188. data/app/views/elements/_header_view.html.erb +1 -0
  189. data/app/views/elements/_headline_editor.html.erb +1 -0
  190. data/app/views/elements/_headline_view.html.erb +1 -0
  191. data/app/views/elements/_image_mosaic_editor.html.erb +2 -0
  192. data/app/views/elements/_image_mosaic_view.html.erb +12 -0
  193. data/app/views/elements/_intro_editor.html.erb +1 -0
  194. data/app/views/elements/_intro_image_text_editor.html.erb +3 -0
  195. data/app/views/elements/_intro_image_text_view.html.erb +16 -0
  196. data/app/views/elements/_intro_view.html.erb +3 -0
  197. data/app/views/elements/_news_editor.html.erb +3 -0
  198. data/app/views/elements/_news_view.html.erb +11 -0
  199. data/app/views/elements/_searchresult_editor.html.erb +1 -0
  200. data/app/views/elements/_searchresult_view.html.erb +42 -0
  201. data/app/views/elements/_sitemap_editor.html.erb +3 -0
  202. data/app/views/elements/_sitemap_view.html.erb +38 -0
  203. data/app/views/elements/_sitename_editor.html.erb +1 -0
  204. data/app/views/elements/_sitename_view.html.erb +1 -0
  205. data/app/views/elements/_subheadline_editor.html.erb +1 -0
  206. data/app/views/elements/_subheadline_view.html.erb +5 -0
  207. data/app/views/elements/_text_editor.html.erb +1 -0
  208. data/app/views/elements/_text_view.html.erb +3 -0
  209. data/app/views/elements/_view_not_found.html.erb +1 -0
  210. data/app/views/elements/show.html.erb +6 -0
  211. data/app/views/elements/show.js.erb +11 -0
  212. data/app/views/essences/_essence_audio_editor.html.erb +1 -0
  213. data/app/views/essences/_essence_audio_view.html.erb +33 -0
  214. data/app/views/essences/_essence_date_editor.html.erb +12 -0
  215. data/app/views/essences/_essence_date_view.html.erb +7 -0
  216. data/app/views/essences/_essence_file_editor.html.erb +63 -0
  217. data/app/views/essences/_essence_file_view.html.erb +6 -0
  218. data/app/views/essences/_essence_flash_editor.html.erb +1 -0
  219. data/app/views/essences/_essence_flash_view.html.erb +26 -0
  220. data/app/views/essences/_essence_html_editor.html.erb +8 -0
  221. data/app/views/essences/_essence_html_view.html.erb +1 -0
  222. data/app/views/essences/_essence_picture_editor.html.erb +70 -0
  223. data/app/views/essences/_essence_picture_tools.html.erb +60 -0
  224. data/app/views/essences/_essence_picture_view.html.erb +42 -0
  225. data/app/views/essences/_essence_richtext_editor.html.erb +9 -0
  226. data/app/views/essences/_essence_richtext_view.html.erb +5 -0
  227. data/app/views/essences/_essence_text_editor.html.erb +82 -0
  228. data/app/views/essences/_essence_text_view.html.erb +11 -0
  229. data/app/views/essences/_essence_video_editor.html.erb +1 -0
  230. data/app/views/essences/_essence_video_view.html.erb +35 -0
  231. data/app/views/layouts/alchemy.html.erb +60 -0
  232. data/app/views/layouts/login.html.erb +60 -0
  233. data/app/views/layouts/pages.html.erb +31 -0
  234. data/app/views/layouts/sitemap.xml.erb +4 -0
  235. data/app/views/messages/mail.text.erb +10 -0
  236. data/app/views/messages/new.html.erb +1 -0
  237. data/app/views/notifications/admin_user_created.text.erb +13 -0
  238. data/app/views/notifications/registered_user_created.text.erb +10 -0
  239. data/app/views/page_layouts/_contact.html.erb +14 -0
  240. data/app/views/page_layouts/_external.html.erb +1 -0
  241. data/app/views/page_layouts/_intro.html.erb +14 -0
  242. data/app/views/page_layouts/_layout_footer.html.erb +14 -0
  243. data/app/views/page_layouts/_layout_header.html.erb +14 -0
  244. data/app/views/page_layouts/_news.html.erb +14 -0
  245. data/app/views/page_layouts/_newsletter_layout.html.erb +1 -0
  246. data/app/views/page_layouts/_search.html.erb +14 -0
  247. data/app/views/page_layouts/_standard.html.erb +14 -0
  248. data/app/views/pages/show.html.erb +1 -0
  249. data/app/views/pages/show.rss.builder +27 -0
  250. data/app/views/pages/sitemap.xml.erb +8 -0
  251. data/app/views/partials/_navigation_image_link.html.erb +14 -0
  252. data/app/views/partials/_navigation_link.html.erb +20 -0
  253. data/app/views/partials/_navigation_renderer.html.erb +23 -0
  254. data/app/views/pictures/show.gif.flexi +19 -0
  255. data/app/views/pictures/show.jpg.flexi +19 -0
  256. data/app/views/pictures/show.png.flexi +19 -0
  257. data/app/views/pictures/thumbnail.png.flexi +13 -0
  258. data/app/views/pictures/zoom.png.flexi +3 -0
  259. data/assets/images/ajax_loader.gif +0 -0
  260. data/assets/images/alchemy-logo.png +0 -0
  261. data/assets/images/flags.png +0 -0
  262. data/assets/images/gui/navi-tab.png +0 -0
  263. data/assets/images/gui/shading.png +0 -0
  264. data/assets/images/gui/shading_90.png +0 -0
  265. data/assets/images/gui/toggle.png +0 -0
  266. data/assets/images/icons.png +0 -0
  267. data/assets/images/jquery-sb/select_arrow.gif +0 -0
  268. data/assets/images/jquery-sb/select_arrow_bg.gif +0 -0
  269. data/assets/images/jquery-sb/select_arrow_bg_hover.gif +0 -0
  270. data/assets/images/jquery-ui/ui-icons_666666_256x240.png +0 -0
  271. data/assets/images/placeholder.png +0 -0
  272. data/assets/images/swfupload/browse_button.png +0 -0
  273. data/assets/javascripts/alchemy.element_editor_selector.js +88 -0
  274. data/assets/javascripts/alchemy.growler.js +44 -0
  275. data/assets/javascripts/alchemy.image_cropper.js +56 -0
  276. data/assets/javascripts/alchemy.js +892 -0
  277. data/assets/javascripts/alchemy.link_overlay.js +221 -0
  278. data/assets/javascripts/alchemy.page_sorter.js +42 -0
  279. data/assets/javascripts/alchemy.preview.js +145 -0
  280. data/assets/javascripts/jquery-ui.js +428 -0
  281. data/assets/javascripts/jquery.Jcrop.min.js +246 -0
  282. data/assets/javascripts/jquery.dialogextend.min.js +8 -0
  283. data/assets/javascripts/jquery.in-place-edit.js +171 -0
  284. data/assets/javascripts/jquery.js +18 -0
  285. data/assets/javascripts/jquery.rails.js +315 -0
  286. data/assets/javascripts/jquery.sb.min.js +14 -0
  287. data/assets/javascripts/jquery.scrollTo-1.4.2-min.js +11 -0
  288. data/assets/javascripts/jquery.ui.nestedSortable.js +291 -0
  289. data/assets/javascripts/jquery.ui.tabspaging.js +281 -0
  290. data/assets/javascripts/swfupload/fileprogress.js +203 -0
  291. data/assets/javascripts/swfupload/handlers.js +171 -0
  292. data/assets/javascripts/swfupload/queue.js +98 -0
  293. data/assets/javascripts/swfupload/swfupload.js +980 -0
  294. data/assets/javascripts/swfupload/swfupload.swf +0 -0
  295. data/assets/javascripts/tiny_mce/jquery.tinymce.js +1 -0
  296. data/assets/javascripts/tiny_mce/langs/de.js +1 -0
  297. data/assets/javascripts/tiny_mce/langs/en.js +223 -0
  298. data/assets/javascripts/tiny_mce/license.txt +504 -0
  299. data/assets/javascripts/tiny_mce/plugins/alchemy_link/editor_plugin.js +43 -0
  300. data/assets/javascripts/tiny_mce/plugins/alchemy_link/langs/de.js +4 -0
  301. data/assets/javascripts/tiny_mce/plugins/alchemy_link/langs/en.js +4 -0
  302. data/assets/javascripts/tiny_mce/plugins/fullscreen/editor_plugin.js +1 -0
  303. data/assets/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm +109 -0
  304. data/assets/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin.js +1 -0
  305. data/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css +402 -0
  306. data/assets/javascripts/tiny_mce/plugins/inlinepopups/template.htm +387 -0
  307. data/assets/javascripts/tiny_mce/plugins/lists/editor_plugin.js +1 -0
  308. data/assets/javascripts/tiny_mce/plugins/paste/editor_plugin.js +1 -0
  309. data/assets/javascripts/tiny_mce/plugins/paste/js/pastetext.js +36 -0
  310. data/assets/javascripts/tiny_mce/plugins/paste/js/pasteword.js +51 -0
  311. data/assets/javascripts/tiny_mce/plugins/paste/langs/de_dlg.js +1 -0
  312. data/assets/javascripts/tiny_mce/plugins/paste/langs/en_dlg.js +5 -0
  313. data/assets/javascripts/tiny_mce/plugins/paste/pastetext.htm +27 -0
  314. data/assets/javascripts/tiny_mce/plugins/paste/pasteword.htm +21 -0
  315. data/assets/javascripts/tiny_mce/plugins/table/cell.htm +180 -0
  316. data/assets/javascripts/tiny_mce/plugins/table/css/cell.css +17 -0
  317. data/assets/javascripts/tiny_mce/plugins/table/css/row.css +25 -0
  318. data/assets/javascripts/tiny_mce/plugins/table/css/table.css +13 -0
  319. data/assets/javascripts/tiny_mce/plugins/table/editor_plugin.js +1 -0
  320. data/assets/javascripts/tiny_mce/plugins/table/js/cell.js +319 -0
  321. data/assets/javascripts/tiny_mce/plugins/table/js/merge_cells.js +27 -0
  322. data/assets/javascripts/tiny_mce/plugins/table/js/row.js +237 -0
  323. data/assets/javascripts/tiny_mce/plugins/table/js/table.js +450 -0
  324. data/assets/javascripts/tiny_mce/plugins/table/langs/de_dlg.js +1 -0
  325. data/assets/javascripts/tiny_mce/plugins/table/langs/en_dlg.js +75 -0
  326. data/assets/javascripts/tiny_mce/plugins/table/merge_cells.htm +32 -0
  327. data/assets/javascripts/tiny_mce/plugins/table/row.htm +158 -0
  328. data/assets/javascripts/tiny_mce/plugins/table/table.htm +188 -0
  329. data/assets/javascripts/tiny_mce/themes/advanced/about.htm +52 -0
  330. data/assets/javascripts/tiny_mce/themes/advanced/anchor.htm +26 -0
  331. data/assets/javascripts/tiny_mce/themes/advanced/charmap.htm +51 -0
  332. data/assets/javascripts/tiny_mce/themes/advanced/color_picker.htm +74 -0
  333. data/assets/javascripts/tiny_mce/themes/advanced/editor_template.js +1 -0
  334. data/assets/javascripts/tiny_mce/themes/advanced/image.htm +80 -0
  335. data/assets/javascripts/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
  336. data/assets/javascripts/tiny_mce/themes/advanced/img/flash.gif +0 -0
  337. data/assets/javascripts/tiny_mce/themes/advanced/img/icons.gif +0 -0
  338. data/assets/javascripts/tiny_mce/themes/advanced/img/iframe.gif +0 -0
  339. data/assets/javascripts/tiny_mce/themes/advanced/img/pagebreak.gif +0 -0
  340. data/assets/javascripts/tiny_mce/themes/advanced/img/quicktime.gif +0 -0
  341. data/assets/javascripts/tiny_mce/themes/advanced/img/realmedia.gif +0 -0
  342. data/assets/javascripts/tiny_mce/themes/advanced/img/shockwave.gif +0 -0
  343. data/assets/javascripts/tiny_mce/themes/advanced/img/trans.gif +0 -0
  344. data/assets/javascripts/tiny_mce/themes/advanced/img/video.gif +0 -0
  345. data/assets/javascripts/tiny_mce/themes/advanced/img/windowsmedia.gif +0 -0
  346. data/assets/javascripts/tiny_mce/themes/advanced/js/about.js +73 -0
  347. data/assets/javascripts/tiny_mce/themes/advanced/js/anchor.js +42 -0
  348. data/assets/javascripts/tiny_mce/themes/advanced/js/charmap.js +355 -0
  349. data/assets/javascripts/tiny_mce/themes/advanced/js/color_picker.js +329 -0
  350. data/assets/javascripts/tiny_mce/themes/advanced/js/image.js +247 -0
  351. data/assets/javascripts/tiny_mce/themes/advanced/js/link.js +153 -0
  352. data/assets/javascripts/tiny_mce/themes/advanced/js/source_editor.js +56 -0
  353. data/assets/javascripts/tiny_mce/themes/advanced/langs/de.js +1 -0
  354. data/assets/javascripts/tiny_mce/themes/advanced/langs/de_dlg.js +1 -0
  355. data/assets/javascripts/tiny_mce/themes/advanced/langs/en.js +68 -0
  356. data/assets/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js +54 -0
  357. data/assets/javascripts/tiny_mce/themes/advanced/link.htm +57 -0
  358. data/assets/javascripts/tiny_mce/themes/advanced/shortcuts.htm +47 -0
  359. data/assets/javascripts/tiny_mce/themes/advanced/skins/default/content.css +47 -0
  360. data/assets/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css +117 -0
  361. data/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
  362. data/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
  363. data/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
  364. data/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
  365. data/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
  366. data/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
  367. data/assets/javascripts/tiny_mce/themes/advanced/skins/default/ui.css +214 -0
  368. data/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/content.css +23 -0
  369. data/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +105 -0
  370. data/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css +102 -0
  371. data/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css +46 -0
  372. data/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css +117 -0
  373. data/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
  374. data/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
  375. data/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
  376. data/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css +217 -0
  377. data/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +8 -0
  378. data/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +5 -0
  379. data/assets/javascripts/tiny_mce/themes/advanced/source_editor.htm +25 -0
  380. data/assets/javascripts/tiny_mce/themes/simple/langs/de.js +1 -0
  381. data/assets/javascripts/tiny_mce/tiny_mce.js +1 -0
  382. data/assets/javascripts/tiny_mce/tiny_mce_popup.js +5 -0
  383. data/assets/javascripts/tiny_mce/utils/editable_selects.js +70 -0
  384. data/assets/javascripts/tiny_mce/utils/form_utils.js +210 -0
  385. data/assets/javascripts/tiny_mce/utils/mctabs.js +162 -0
  386. data/assets/javascripts/tiny_mce/utils/validate.js +252 -0
  387. data/assets/stylesheets/Jcrop.gif +0 -0
  388. data/assets/stylesheets/alchemy.css +3629 -0
  389. data/assets/stylesheets/alchemy_tinymce_content.css +94 -0
  390. data/assets/stylesheets/alchemy_tinymce_dialog.css +415 -0
  391. data/assets/stylesheets/default/img/tabs.gif +0 -0
  392. data/assets/stylesheets/elements.css +900 -0
  393. data/assets/stylesheets/flags.css +1 -0
  394. data/assets/stylesheets/ie6.css +18 -0
  395. data/assets/stylesheets/jquery-ui-1.8.7.alchemy.css +2023 -0
  396. data/assets/stylesheets/jquery.Jcrop.css +35 -0
  397. data/assets/stylesheets/jquery.sb.css +244 -0
  398. data/assets/stylesheets/standard_set.css +374 -0
  399. data/bin/alchemy +347 -0
  400. data/config/alchemy/config.yml +199 -0
  401. data/config/alchemy/elements.yml +219 -0
  402. data/config/alchemy/page_layouts.yml +65 -0
  403. data/config/asset_packages.yml +32 -0
  404. data/config/authorization_rules.rb +96 -0
  405. data/config/initializers/authorization.rb +4 -0
  406. data/config/initializers/cache_storage.rb +1 -0
  407. data/config/initializers/fast_gettext.rb +2 -0
  408. data/config/initializers/tiny_mce_hammer.rb +32 -0
  409. data/config/locales/de.yml +370 -0
  410. data/config/locales/en.yml +364 -0
  411. data/config/routes.rb +141 -0
  412. data/db/migrate/20100607143125_create_pages.rb +34 -0
  413. data/db/migrate/20100607144254_create_elements.rb +20 -0
  414. data/db/migrate/20100607145256_create_contents.rb +18 -0
  415. data/db/migrate/20100607145719_create_users.rb +32 -0
  416. data/db/migrate/20100607150611_create_pictures.rb +16 -0
  417. data/db/migrate/20100607150812_create_attachments.rb +16 -0
  418. data/db/migrate/20100607153647_create_folded_pages.rb +13 -0
  419. data/db/migrate/20100607161345_create_essence_texts.rb +19 -0
  420. data/db/migrate/20100607162339_create_elements_pages.rb +12 -0
  421. data/db/migrate/20100607193638_create_essence_pictures.rb +23 -0
  422. data/db/migrate/20100607193646_create_essence_richtexts.rb +16 -0
  423. data/db/migrate/20100607193653_create_essence_htmls.rb +13 -0
  424. data/db/migrate/20100609111653_create_essence_dates.rb +13 -0
  425. data/db/migrate/20100609111809_create_essence_files.rb +15 -0
  426. data/db/migrate/20100609111821_create_essence_flashes.rb +16 -0
  427. data/db/migrate/20100609111837_create_essence_videos.rb +18 -0
  428. data/db/migrate/20100616150753_create_essence_audios.rb +17 -0
  429. data/db/migrate/20100812085225_add_crop_from_and_crop_size_to_essence_pictures.rb +11 -0
  430. data/db/migrate/20100909140701_change_essence_htmls_source_column_type.rb +9 -0
  431. data/db/migrate/20101109150312_alter_pages_visible_column_default.rb +9 -0
  432. data/db/migrate/20101109151812_create_languages.rb +19 -0
  433. data/db/migrate/20101216151419_add_language_id_to_pages.rb +19 -0
  434. data/db/migrate/20101216155216_add_index_to_languages.rb +9 -0
  435. data/db/migrate/20101216173323_add_default_to_languages.rb +9 -0
  436. data/db/migrate/20101218130049_add_urlname_index_to_pages.rb +9 -0
  437. data/db/migrate/20110115123343_remove_css_class_default_from_essence_pictures.rb +11 -0
  438. data/db/migrate/20110224105120_change_pages_visible_default.rb +11 -0
  439. data/db/migrate/20110228182659_remove_default_page_layout_from_pages.rb +11 -0
  440. data/db/migrate/20110414163140_remove_display_name_from_elements.rb +11 -0
  441. data/db/migrate/20110511100516_rename_essence_texts_title_to_link_title.rb +9 -0
  442. data/db/migrate/20110529130429_create_cells.rb +14 -0
  443. data/db/migrate/20110529130500_add_cell_id_to_elements.rb +11 -0
  444. data/db/migrate/20110530102804_change_pages_page_layout_column.rb +11 -0
  445. data/db/migrate/20110707190728_add_render_size_to_essence_pictures.rb +9 -0
  446. data/db/migrate/20110711142057_change_open_link_in_new_window_to_link_target.rb +19 -0
  447. data/lib/alchemy.rb +24 -0
  448. data/lib/alchemy/config.rb +51 -0
  449. data/lib/alchemy/controller.rb +79 -0
  450. data/lib/alchemy/engine.rb +29 -0
  451. data/lib/alchemy/essence.rb +178 -0
  452. data/lib/alchemy/file_utilz.rb +73 -0
  453. data/lib/alchemy/page_layout.rb +66 -0
  454. data/lib/alchemy/remote_pagination_link_renderer.rb +17 -0
  455. data/lib/alchemy/seeder.rb +112 -0
  456. data/lib/alchemy/version.rb +5 -0
  457. data/lib/extensions/action_view.rb +17 -0
  458. data/lib/extensions/array.rb +25 -0
  459. data/lib/extensions/hash.rb +34 -0
  460. data/lib/middleware/flash_session_cookie.rb +22 -0
  461. data/lib/rails/generators/alchemy/elements/elements_generator.rb +35 -0
  462. data/lib/rails/generators/alchemy/elements/templates/editor.html.erb +9 -0
  463. data/lib/rails/generators/alchemy/elements/templates/view.html.erb +21 -0
  464. data/lib/rails/generators/alchemy/page_layouts/page_layouts_generator.rb +32 -0
  465. data/lib/rails/generators/alchemy/page_layouts/templates/layout.html.erb +1 -0
  466. data/lib/rails/generators/alchemy/plugin/plugin_generator.rb +29 -0
  467. data/lib/rails/generators/alchemy/plugin/templates/authorization_rules.rb +5 -0
  468. data/lib/rails/generators/alchemy/plugin/templates/config.yml +30 -0
  469. data/lib/rails/generators/alchemy/plugin/templates/init.rb +4 -0
  470. data/lib/rails/generators/alchemy/plugin/templates/routes.rb +4 -0
  471. data/lib/rails/generators/alchemy/scaffold/scaffold_generator.rb +35 -0
  472. data/lib/rails/generators/alchemy/scaffold/templates/elements.yml +91 -0
  473. data/lib/rails/generators/alchemy/scaffold/templates/page_layouts.yml +29 -0
  474. data/lib/rails/templates/alchemy.rb +14 -0
  475. data/lib/tasks/fleximage.rake +154 -0
  476. data/lib/tasks/gettext.rake +75 -0
  477. data/lib/tasks/install.rake +123 -0
  478. data/lib/tasks/upgrade.rake +211 -0
  479. data/lib/translation_extras/alchemy_core_modules.rb +11 -0
  480. data/lib/vendor/i18n_label.rb +23 -0
  481. data/locale/alchemy.pot +1728 -0
  482. data/locale/de/LC_MESSAGES/alchemy.mo +0 -0
  483. data/locale/de/alchemy.po +1774 -0
  484. data/locale/en/LC_MESSAGES/alchemy.mo +0 -0
  485. data/locale/en/alchemy.po +1742 -0
  486. data/locale/missing_translations.rb +4 -0
  487. data/locale/model_attributes.rb +56 -0
  488. data/recipes/alchemy_capistrano_tasks.rb +83 -0
  489. metadata +769 -0
@@ -0,0 +1,113 @@
1
+ Alchemy CMS
2
+ ===========
3
+
4
+ About
5
+ -----
6
+
7
+ Alchemy is a fully featured Content Management System (CMS) with an gorgeous Userinterface.
8
+
9
+ Nearly every content management system stores the content of a page in a body column in the pages table. This is easy to develop and the user manages the content inside one of the fancy new Javascript based wysiwyg processors. Formatting, image placement, styling and positioning of the content is in the hand of the end-user.
10
+
11
+ __We think this is completly wrong!__
12
+
13
+ The content manager mustn‘t be able to change anything but the content and some basic text formatting. The content manager shouldn‘t care about headline formatting, image positioning or resizing. The developer should take care of this!
14
+
15
+ __Alchemy is different!__
16
+
17
+ We split the page into logical parts like headlines, paragraphs, images, etc. The only thing we store in the database is text: ids of images and richtext content. Nothing else. No markup (besides basic text formatting inside the richtext elements), no styling, no layout. Pure content!
18
+
19
+ This gives the webdeveloper the power and flexibility to implement any kind of layout with the insurance that the content manager is not able to break up the layout.
20
+
21
+ Features
22
+ --------
23
+
24
+ - Highly flexible Templating:
25
+ - Content is stored in small parts not as a complete, monolithic page.
26
+ - The designer chooses the template structure, not the CMS!
27
+ - Every Design is possible, no templating, or theming restrictions.
28
+ - Even Flash® Content Management is possible
29
+ - Gorgious End-User centric interface:
30
+ - No geeky markup editors and other meta programming crap.
31
+ - Multilingual:
32
+ - Create as many (complete independent) language trees as you want.
33
+ - URL based language switching
34
+ - SEO
35
+ - Every Part of SEO is manageable by the user
36
+ - Human readable urls (multilingual)
37
+ - automatic XML Sitemap generation
38
+ - Access Control:
39
+ - Rolebased Authentification (RBAS)
40
+ - Protect pages for restricted access
41
+ - Fulltext Search
42
+ - Contactforms
43
+ - Attachments and downloads
44
+ - Powerfull image rendering
45
+ - Resizing
46
+ - Image Cropping via an graphical Userinterface!
47
+ - Borders, Text, Rotation
48
+ - and much more via Imagemagick processing (polaroid effect, etc.)
49
+ - and all this gets cached!
50
+ - Extendable:
51
+ - Flexible Plugin DSL allows you to add custom plugins into Alchemy
52
+ - Integrates in exsiting Rails Apps
53
+ - Caching
54
+ - Completely free:
55
+ - GPLv3 License
56
+ - No Enterprise Licences, or Community Editions
57
+ - Hostable on any Server that supports RubyOnRails and ImageMagick ([Software Requirements](https://github.com/magiclabs/alchemy/wiki/Software-Requirements))
58
+
59
+ Rails Version
60
+ -------------
61
+
62
+ This branch of Alchemy runs with Rails 3.0.9 and Ruby 1.8.7. __Ruby 1.9 is not__ offically supported yet, because not all Gems Alchemy depends on are Ruby 1.9 ready.
63
+
64
+ Installation
65
+ ------------
66
+
67
+ Use the installer (recommended):
68
+
69
+ alchemy new my_magicpage
70
+
71
+ Start the local server:
72
+
73
+ rails server
74
+
75
+ Then just switch to your browser and open `http://localhost:3000`.
76
+
77
+ Tipps
78
+ -----
79
+
80
+ 1. This task creates all necessary folders and files needed for creating your own pagelayouts and elements for your website
81
+
82
+ rake generate alchemy:scaffold:all
83
+
84
+ 2. If you use the ferret full text search (enabled by default), then please add a job to your crontab that reindexes the ferret index.
85
+
86
+ cd /path/to/your/alchemy && RAILS_ENV=production rake ferret:rebuild_index > /dev/null
87
+
88
+ 3. You can easily create your element-files (for view and editor) depending on the `elements.yml` with this generator
89
+
90
+ rails generate elements
91
+
92
+ Resources
93
+ ---------
94
+
95
+ * Homepage: <http://alchemy-app.com>
96
+ * Live-Demo: <http://demo.alchemy-app.com>
97
+ * Wiki: <http://wiki.alchemy-app.com>
98
+ * API Documentation: <http://api.alchemy-app.com>
99
+ * Issue-Tracker: <http://issues.alchemy-app.com>
100
+ * Sourcecode: <http://source.alchemy-app.com>
101
+ * User Group: <http://groups.google.com/group/alchemy-cms>
102
+
103
+ Authors
104
+ ---------
105
+
106
+ * Carsten Fregin: <https://github.com/cfregin>
107
+ * Thomas von Deyen: <https://github.com/tvdeyen>
108
+ * Robin Böning: <https://github.com/robinboening>
109
+
110
+ License
111
+ -------
112
+
113
+ * GPLv3: <http://www.gnu.org/licenses/gpl.html/>
@@ -0,0 +1,30 @@
1
+ # encoding: UTF-8
2
+ require 'rake'
3
+ require 'rake/testtask'
4
+ require 'rake/rdoctask'
5
+
6
+ import File.join(File.dirname(__FILE__), 'lib/tasks/gettext.rake')
7
+
8
+ desc 'Default: run unit tests.'
9
+ task :default => :test
10
+
11
+ desc 'Test the alchemy plugin.'
12
+ Rake::TestTask.new(:test) do |t|
13
+ t.libs << 'lib'
14
+ t.pattern = 'test/**/*_test.rb'
15
+ t.verbose = true
16
+ end
17
+
18
+ desc 'Generate documentation for the alchemy plugin.'
19
+ Rake::RDocTask.new(:rdoc) do |rdoc|
20
+ rdoc.rdoc_dir = 'rdoc'
21
+ rdoc.title = 'Alchemy'
22
+ rdoc.options << '--line-numbers' << '--inline-source'
23
+ rdoc.rdoc_files.include('README.md')
24
+ rdoc.rdoc_files.include('config/alchemy/*.yml')
25
+ rdoc.rdoc_files.include('lib/**/*.rb')
26
+ rdoc.rdoc_files.include('app/**/*.rb')
27
+ end
28
+
29
+ require 'bundler'
30
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1 @@
1
+ https://github.com/magiclabs/alchemy/issues?milestone=1&state=open
@@ -0,0 +1,36 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "alchemy/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "alchemy_cms"
7
+ s.version = Alchemy::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Thomas von Deyen", "Robin Böning", "Carsten Fregin"]
10
+ s.email = ["alchemy@magiclabs.de"]
11
+ s.homepage = "http://alchemy-cms.com"
12
+ s.summary = %q{A CMS for Rails 3}
13
+ s.description = %q{A CMS for Rails 3}
14
+ s.requirements << 'ImageMagick (libmagick), v6.6 or greater.'
15
+ s.license = 'GPL-3'
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ #s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_runtime_dependency(%q<rails>, ["~> 3.0"])
23
+ s.add_runtime_dependency(%q<authlogic>, ["~> 3.0"])
24
+ s.add_runtime_dependency(%q<awesome_nested_set>, ["~> 2.0"])
25
+ s.add_runtime_dependency(%q<declarative_authorization>, ["~> 0.5"])
26
+ s.add_runtime_dependency(%q<tvdeyen-fleximage>, ["~> 1.0.7"])
27
+ s.add_runtime_dependency(%q<gettext_i18n_rails>, ["~> 0.2"])
28
+ s.add_runtime_dependency(%q<will_paginate>, ["~> 3.0"])
29
+ s.add_runtime_dependency(%q<acts_as_ferret>, ["~> 0.5"])
30
+ s.add_runtime_dependency(%q<acts_as_list>, ["~> 0.1"])
31
+ s.add_runtime_dependency(%q<userstamp>, ["~> 2.0.1"])
32
+ s.add_runtime_dependency(%q<dynamic_form>, ["~> 1.1"])
33
+ s.add_runtime_dependency(%q<jquery-rails>, ["~> 1.0"])
34
+ s.add_runtime_dependency(%q<tinymce_hammer>, ["~> 0.2"])
35
+ s.add_runtime_dependency(%q<attachment_magic>, ["~> 0.1"])
36
+ end
@@ -0,0 +1,119 @@
1
+ class Admin::AttachmentsController < AlchemyController
2
+
3
+ unloadable
4
+
5
+ protect_from_forgery :except => [:create]
6
+
7
+ before_filter :set_translation
8
+ filter_access_to :all
9
+
10
+ def index
11
+ cond = "name LIKE '%#{params[:query]}%' OR filename LIKE '%#{params[:query]}%'"
12
+ if params[:per_page] == 'all'
13
+ @attachments = Attachment.where(cond).order(:name)
14
+ else
15
+ @attachments = Attachment.where(cond).paginate(
16
+ :page => (params[:page] || 1),
17
+ :per_page => (params[:per_page] || 20)
18
+ ).order(:name)
19
+ end
20
+ end
21
+
22
+ def new
23
+ @attachment = Attachment.new
24
+ render :layout => false
25
+ end
26
+
27
+ def create
28
+ @attachment = Attachment.new(:uploaded_data => params[:Filedata])
29
+ @attachment.name = @attachment.filename
30
+ @attachment.save
31
+ cond = "name LIKE '%#{params[:query]}%' OR filename LIKE '%#{params[:query]}%'"
32
+ if params[:per_page] == 'all'
33
+ @attachments = Attachment.where(cond).order(:name)
34
+ else
35
+ @attachments = Attachment.where(cond).paginate(
36
+ :page => (params[:page] || 1),
37
+ :per_page => (params[:per_page] || 20)
38
+ ).order(:name)
39
+ end
40
+ @message = _('File %{name} uploaded succesfully') % {:name => @attachment.name}
41
+ if params[Rails.application.config.session_options[:key]].blank?
42
+ flash[:notice] = @message
43
+ redirect_to :action => :index
44
+ end
45
+ rescue Exception => e
46
+ log_error $!
47
+ render :update, :status => 500 do |page|
48
+ page.call('Alchemy.growl', _('File upload error: %{error}') % {:error => e}, :error)
49
+ end
50
+ end
51
+
52
+ def edit
53
+ @attachment = Attachment.find(params[:id])
54
+ render :layout => false
55
+ end
56
+
57
+ def update
58
+ begin
59
+ @attachment = Attachment.find(params[:id])
60
+ oldname = @attachment.name
61
+ if @attachment.update_attributes(params[:attachment])
62
+ flash[:notice] = _("File renamed successfully from: '%{from}' to '%{to}'") % {:from => oldname, :to => @attachment.name}
63
+ else
64
+ render :action => "edit"
65
+ end
66
+ rescue Exception => e
67
+ exception_handler(e)
68
+ end
69
+ redirect_to admin_attachments_path(:page => params[:page], :query => params[:query], :per_page => params[:per_page])
70
+ end
71
+
72
+ def destroy
73
+ @attachment = Attachment.find(params[:id])
74
+ name = @attachment.name
75
+ @attachment.destroy
76
+ render :update do |page|
77
+ flash[:notice] = ( _("File: '%{name}' deleted successfully") % {:name => name} )
78
+ page.redirect_to admin_attachments_path(:per_page => params[:per_page], :page => params[:page], :query => params[:query])
79
+ end
80
+ end
81
+
82
+ def archive_overlay
83
+ @content = Content.find(params[:content_id])
84
+ @options = params[:options]
85
+ if !params[:only].blank?
86
+ condition = "filename LIKE '%.#{params[:only].join("' OR filename LIKE '%.")}'"
87
+ elsif !params[:except].blank?
88
+ condition = "filename NOT LIKE '%.#{params[:except].join("' OR filename NOT LIKE '%.")}'"
89
+ else
90
+ condition = ""
91
+ end
92
+ @attachments = Attachment.where(condition).order(:name)
93
+ render :layout => false
94
+ end
95
+
96
+ def show
97
+ @attachment = Attachment.find(params[:id])
98
+ send_file(
99
+ @attachment.public_filename,
100
+ {
101
+ :name => @attachment.filename,
102
+ :type => @attachment.content_type,
103
+ :disposition => 'inline'
104
+ }
105
+ )
106
+ end
107
+
108
+ def download
109
+ @attachment = Attachment.find(params[:id])
110
+ send_file(
111
+ @attachment.full_filename, {
112
+ :name => @attachment.filename,
113
+ :type => @attachment.content_type,
114
+ :disposition => 'attachment'
115
+ }
116
+ )
117
+ end
118
+
119
+ end
@@ -0,0 +1,43 @@
1
+ class Admin::ClipboardController < AlchemyController
2
+ unloadable
3
+
4
+ before_filter :set_translation
5
+
6
+ def index
7
+ clipboard = get_clipboard(params[:remarkable_type].tableize)
8
+ @clipboard_items = params[:remarkable_type].classify.constantize.all_from_clipboard(clipboard)
9
+ render :layout => false
10
+ end
11
+
12
+ def insert
13
+ @clipboard = get_clipboard(params[:remarkable_type].tableize)
14
+ @item = params[:remarkable_type].classify.constantize.find(params[:remarkable_id])
15
+ unless @clipboard.include?(params[:remarkable_id])
16
+ @clipboard.push(params[:remarkable_id])
17
+ end
18
+ if params[:remove] == 'true'
19
+ case params[:remarkable_type]
20
+ when 'element' then
21
+ @item.page = nil
22
+ @item.position = nil
23
+ when 'page' then #TODO: page.move feature
24
+ end
25
+ @item.save(false)
26
+ end
27
+ rescue Exception => e
28
+ exception_handler(e)
29
+ end
30
+
31
+ def remove
32
+ @clipboard = get_clipboard(params[:remarkable_type].tableize)
33
+ @item = params[:remarkable_type].classify.constantize.find(params[:remarkable_id])
34
+ @clipboard.delete(params[:remarkable_id])
35
+ rescue Exception => e
36
+ exception_handler(e)
37
+ end
38
+
39
+ def clear
40
+ session[:clipboard] = {}
41
+ end
42
+
43
+ end
@@ -0,0 +1,69 @@
1
+ class Admin::ContentsController < AlchemyController
2
+
3
+ filter_access_to :all
4
+
5
+ def new
6
+ @element = Element.find(params[:element_id])
7
+ @contents = @element.available_contents
8
+ @content = @element.contents.build
9
+ render :layout => false
10
+ end
11
+
12
+ def create
13
+ @element = Element.find(params[:content][:element_id])
14
+ @content = Content.create_from_scratch(@element, params[:content])
15
+ @options = params[:options]
16
+ # If options params come from Flash uploader then we have to parse them as hash.
17
+ if @options.is_a?(String)
18
+ @options = Rack::Utils.parse_query(@options)
19
+ end
20
+ if @content.essence_type == "EssencePicture"
21
+ @contents_of_this_type = @element.contents.find_all_by_essence_type('EssencePicture')
22
+ @dragable = @contents_of_this_type.length > 1
23
+ @options = @options.merge(
24
+ :dragable => @dragable
25
+ ) if @options
26
+ @content.essence.picture = Picture.find(params[:picture_id])
27
+ @content.essence.save
28
+ end
29
+ rescue
30
+ exception_handler($!)
31
+ end
32
+
33
+ def update
34
+ content = Content.find(params[:id])
35
+ content.content.update_attributes(params[:content])
36
+ render :update do |page|
37
+ page << "Alchemy.closeCurrentWindow();Alchemy.reloadPreview()"
38
+ end
39
+ end
40
+
41
+ def order
42
+ for id in params[:content_ids]
43
+ content = Content.find(id)
44
+ content.move_to_bottom
45
+ end
46
+ render :update do |page|
47
+ page.call('Alchemy.growl', _("Successfully saved content position"))
48
+ page.call("Alchemy.SortableContents", '#element_area .picture_gallery_images', form_authenticity_token)
49
+ page.call('Alchemy.reloadPreview')
50
+ end
51
+ end
52
+
53
+ def destroy
54
+ content = Content.find(params[:id])
55
+ element = content.element
56
+ content_name = content.name
57
+ content_dom_id = "#{content.essence_type.underscore}_#{content.id}"
58
+ if content.destroy
59
+ render :update do |page|
60
+ page.call("jQuery('#{content_dom_id}').remove")
61
+ page.call('Alchemy.growl', _("Successfully deleted %{content}") % {:content => content_name})
62
+ page.call('Alchemy.reloadPreview')
63
+ end
64
+ end
65
+ rescue
66
+ exception_handler($!)
67
+ end
68
+
69
+ end
@@ -0,0 +1,137 @@
1
+ class Admin::ElementsController < AlchemyController
2
+
3
+ unloadable
4
+ before_filter :set_translation
5
+
6
+ filter_access_to [:new, :create, :order, :index], :attribute_check => false
7
+
8
+ cache_sweeper :content_sweeper, :only => [:update]
9
+
10
+ def index
11
+ @page = Page.find(params[:page_id], :include => {:elements => :contents})
12
+ @cells = @page.cells
13
+ if @cells.blank?
14
+ @elements = @page.elements
15
+ else
16
+ @elements = @page.elements_grouped_by_cells
17
+ end
18
+ render :layout => false
19
+ end
20
+
21
+ def list
22
+ @page_id = params[:page_id]
23
+ if @page_id.blank? && !params[:page_urlname].blank?
24
+ @page_id = Page.find_by_urlname(params[:page_urlname]).id
25
+ end
26
+ @elements = Element.find_all_by_page_id_and_public(@page_id, true)
27
+ end
28
+
29
+ def new
30
+ @page = Page.find_by_id(params[:page_id])
31
+ @element = @page.elements.build
32
+ @elements = Element.all_for_page(@page)
33
+ clipboard_elements = get_clipboard('elements')
34
+ unless clipboard_elements.blank?
35
+ @clipboard_items = Element.all_from_clipboard_for_page(clipboard_elements, @page)
36
+ end
37
+ render :layout => false
38
+ end
39
+
40
+ # Creates a element as discribed in config/alchemy/elements.yml on page via AJAX.
41
+ # If a Ferret::FileNotFoundError raises we catch it and rebuilding the index.
42
+ def create
43
+ @page = Page.find(params[:element][:page_id])
44
+ if params[:paste_from_clipboard].blank?
45
+ @element = Element.new_from_scratch(params[:element])
46
+ else
47
+ source_element = Element.find(params[:paste_from_clipboard])
48
+ if source_element.page_id == blank? # aka. move
49
+ @element = source_element
50
+ else
51
+ @element = Element.copy(source_element, {:page_id => @page.id})
52
+ end
53
+ end
54
+ # if page has cells, put element in cell
55
+ if @page.has_cells?
56
+ cell_definition = Cell.definition_for(params[:element][:name].split('#').last)
57
+ if cell_definition
58
+ @cell = @page.cells.find_or_create_by_name(cell_definition['name'])
59
+ end
60
+ @element.cell = @cell
61
+ end
62
+ @element.page = @page
63
+ if @element.save
64
+ render :action => :create
65
+ else
66
+ render_remote_errors(@element, 'form#new_element button.button')
67
+ end
68
+ rescue Exception => e
69
+ exception_handler(e)
70
+ end
71
+
72
+ # Saves all contents in the elements by calling save_content on each content
73
+ # And then updates the element itself.
74
+ # If a Ferret::FileNotFoundError raises we gonna catch it and rebuilding the index.
75
+ def update
76
+ @element = Element.find_by_id(params[:id])
77
+ if @element.save_contents(params)
78
+ @page = @element.page
79
+ @element.public = !params[:public].nil?
80
+ @element.save
81
+ else
82
+ render :update do |page|
83
+ page.call('Alchemy.growl', _("Validation failed."), :warn)
84
+ error_message = "<h2>#{_('Validation failed.')}</h2><p>#{_('Please check contents below.')}</p>"
85
+ page << "jQuery('#element_#{@element.id}_errors').html('#{error_message}<ul><li>#{@element.essence_error_messages.join('</li><li>')}</li></ul>')"
86
+ page.show("element_#{@element.id}_errors")
87
+ selector = @element.contents_with_errors.map { |content| '#' + content_dom_id(content) }.join(', ')
88
+ page << "jQuery('div.content_editor').removeClass('validation_failed')"
89
+ page << "jQuery('#{selector}').addClass('validation_failed')"
90
+ page << "Alchemy.enableButton('#element_#{@element.id} button.button')"
91
+ end
92
+ end
93
+ rescue Exception => e
94
+ exception_logger(e)
95
+ if e.class == Ferret::FileNotFoundError
96
+ EssenceText.rebuild_index
97
+ EssenceRichtext.rebuild_index
98
+ render :update do |page|
99
+ page << "Alchemy.growl('#{_("Index Error after saving Element. Please try again!")}', 'error')"
100
+ end
101
+ else
102
+ show_error_notice(e)
103
+ end
104
+ end
105
+
106
+ # Trashes the Element instead of deleting it.
107
+ def trash
108
+ @element = Element.find(params[:id])
109
+ @page_id = @element.page.id
110
+ @element.trash
111
+ rescue Exception => e
112
+ exception_handler(e)
113
+ end
114
+
115
+ def order
116
+ page = Page.find(params[:page_id])
117
+ params[:element_ids].each do |element_id|
118
+ element = Element.find(element_id)
119
+ if element.trashed?
120
+ element.page = page
121
+ end
122
+ element.move_to_bottom
123
+ end
124
+ rescue Exception => e
125
+ exception_handler(e)
126
+ end
127
+
128
+ def fold
129
+ @element = Element.find(params[:id])
130
+ @page = @element.page
131
+ @element.folded = !@element.folded
132
+ @element.save(false)
133
+ rescue Exception => e
134
+ exception_handler(e)
135
+ end
136
+
137
+ end