forgeos_cms 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. data/LICENSE +2 -0
  2. data/README.textile +42 -0
  3. data/app/assets/images/forgeos/admin/favicon.gif +0 -0
  4. data/app/assets/javascripts/forgeos/admin/functions/forgeos_cms/carousels.js +56 -0
  5. data/app/assets/javascripts/forgeos/admin/functions/forgeos_cms/menus.js +93 -0
  6. data/app/assets/javascripts/forgeos/admin/functions/forgeos_cms/overlay.js +86 -0
  7. data/app/assets/javascripts/forgeos/admin/functions/forgeos_cms/trees.js +8 -0
  8. data/app/assets/javascripts/forgeos/admin/functions/forgeos_cms/widget_actualities.js +117 -0
  9. data/app/assets/javascripts/forgeos/admin/inits/forgeos_cms/carousels.js +131 -0
  10. data/app/assets/javascripts/forgeos/admin/inits/forgeos_cms/menus.js +294 -0
  11. data/app/assets/javascripts/forgeos/admin/inits/forgeos_cms/overlays.js +71 -0
  12. data/app/assets/javascripts/forgeos/admin/inits/forgeos_cms/trees.js +94 -0
  13. data/app/assets/javascripts/forgeos/admin/inits/forgeos_cms/widget_actualities.js +23 -0
  14. data/app/assets/javascripts/forgeos/admin/inits/forgeos_cms/widget_faq.js +13 -0
  15. data/app/assets/stylesheets/forgeos/admin/base.css.sass +2 -0
  16. data/app/assets/stylesheets/forgeos/admin/forgeos_cms/_all.css.sass +1 -0
  17. data/app/assets/stylesheets/forgeos/admin/forgeos_cms/_blocks.css.sass +220 -0
  18. data/app/assets/stylesheets/forgeos/jstree/themes/association_page/bubble-quantity-products.png +0 -0
  19. data/app/assets/stylesheets/forgeos/jstree/themes/association_page/check-checked.png +0 -0
  20. data/app/assets/stylesheets/forgeos/jstree/themes/association_page/check-unchecked.png +0 -0
  21. data/app/assets/stylesheets/forgeos/jstree/themes/association_page/context.gif +0 -0
  22. data/app/assets/stylesheets/forgeos/jstree/themes/association_page/create.png +0 -0
  23. data/app/assets/stylesheets/forgeos/jstree/themes/association_page/dark-blue-minus.png +0 -0
  24. data/app/assets/stylesheets/forgeos/jstree/themes/association_page/dark-blue-plus.png +0 -0
  25. data/app/assets/stylesheets/forgeos/jstree/themes/association_page/dot.gif +0 -0
  26. data/app/assets/stylesheets/forgeos/jstree/themes/association_page/f.png +0 -0
  27. data/app/assets/stylesheets/forgeos/jstree/themes/association_page/fminus.gif +0 -0
  28. data/app/assets/stylesheets/forgeos/jstree/themes/association_page/fminus_rtl.gif +0 -0
  29. data/app/assets/stylesheets/forgeos/jstree/themes/association_page/folder.png +0 -0
  30. data/app/assets/stylesheets/forgeos/jstree/themes/association_page/fplus.gif +0 -0
  31. data/app/assets/stylesheets/forgeos/jstree/themes/association_page/fplus_rtl.gif +0 -0
  32. data/app/assets/stylesheets/forgeos/jstree/themes/association_page/lastli.gif +0 -0
  33. data/app/assets/stylesheets/forgeos/jstree/themes/association_page/lastli_rtl.gif +0 -0
  34. data/app/assets/stylesheets/forgeos/jstree/themes/association_page/li.gif +0 -0
  35. data/app/assets/stylesheets/forgeos/jstree/themes/association_page/remove.png +0 -0
  36. data/app/assets/stylesheets/forgeos/jstree/themes/association_page/rename.png +0 -0
  37. data/app/assets/stylesheets/forgeos/jstree/themes/association_page/style.css.sass +219 -0
  38. data/app/assets/stylesheets/forgeos/jstree/themes/association_page/throbber.gif +0 -0
  39. data/app/assets/stylesheets/forgeos/jstree/themes/block_category/brown-minus.png +0 -0
  40. data/app/assets/stylesheets/forgeos/jstree/themes/block_category/brown-plus.png +0 -0
  41. data/app/assets/stylesheets/forgeos/jstree/themes/block_category/bubble-quantity-products.png +0 -0
  42. data/app/assets/stylesheets/forgeos/jstree/themes/block_category/context.gif +0 -0
  43. data/app/assets/stylesheets/forgeos/jstree/themes/block_category/create.png +0 -0
  44. data/app/assets/stylesheets/forgeos/jstree/themes/block_category/dot.gif +0 -0
  45. data/app/assets/stylesheets/forgeos/jstree/themes/block_category/f.png +0 -0
  46. data/app/assets/stylesheets/forgeos/jstree/themes/block_category/fminus.gif +0 -0
  47. data/app/assets/stylesheets/forgeos/jstree/themes/block_category/fminus_rtl.gif +0 -0
  48. data/app/assets/stylesheets/forgeos/jstree/themes/block_category/fplus.gif +0 -0
  49. data/app/assets/stylesheets/forgeos/jstree/themes/block_category/fplus_rtl.gif +0 -0
  50. data/app/assets/stylesheets/forgeos/jstree/themes/block_category/lastli.gif +0 -0
  51. data/app/assets/stylesheets/forgeos/jstree/themes/block_category/lastli_rtl.gif +0 -0
  52. data/app/assets/stylesheets/forgeos/jstree/themes/block_category/li.gif +0 -0
  53. data/app/assets/stylesheets/forgeos/jstree/themes/block_category/remove.png +0 -0
  54. data/app/assets/stylesheets/forgeos/jstree/themes/block_category/rename.png +0 -0
  55. data/app/assets/stylesheets/forgeos/jstree/themes/block_category/style.css.sass +138 -0
  56. data/app/assets/stylesheets/forgeos/jstree/themes/block_category/throbber.gif +0 -0
  57. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/big-drag-and-drop.png +0 -0
  58. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/bubble-quantity-products.png +0 -0
  59. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/check-checked.png +0 -0
  60. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/check-unchecked.png +0 -0
  61. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/context.gif +0 -0
  62. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/create.png +0 -0
  63. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/dark-blue-minus.png +0 -0
  64. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/dark-blue-plus.png +0 -0
  65. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/dot.gif +0 -0
  66. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/drag-drop.png +0 -0
  67. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/f.png +0 -0
  68. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/fminus.gif +0 -0
  69. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/fminus_rtl.gif +0 -0
  70. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/folder.png +0 -0
  71. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/fplus.gif +0 -0
  72. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/fplus_rtl.gif +0 -0
  73. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/lastli.gif +0 -0
  74. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/lastli_rtl.gif +0 -0
  75. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/li.gif +0 -0
  76. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/remove.png +0 -0
  77. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/rename.png +0 -0
  78. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/style.css.sass +186 -0
  79. data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/throbber.gif +0 -0
  80. data/app/assets/stylesheets/forgeos/jstree/themes/page_category/brown-minus.png +0 -0
  81. data/app/assets/stylesheets/forgeos/jstree/themes/page_category/brown-plus.png +0 -0
  82. data/app/assets/stylesheets/forgeos/jstree/themes/page_category/bubble-quantity-products.png +0 -0
  83. data/app/assets/stylesheets/forgeos/jstree/themes/page_category/context.gif +0 -0
  84. data/app/assets/stylesheets/forgeos/jstree/themes/page_category/create.png +0 -0
  85. data/app/assets/stylesheets/forgeos/jstree/themes/page_category/dot.gif +0 -0
  86. data/app/assets/stylesheets/forgeos/jstree/themes/page_category/f.png +0 -0
  87. data/app/assets/stylesheets/forgeos/jstree/themes/page_category/fminus.gif +0 -0
  88. data/app/assets/stylesheets/forgeos/jstree/themes/page_category/fminus_rtl.gif +0 -0
  89. data/app/assets/stylesheets/forgeos/jstree/themes/page_category/fplus.gif +0 -0
  90. data/app/assets/stylesheets/forgeos/jstree/themes/page_category/fplus_rtl.gif +0 -0
  91. data/app/assets/stylesheets/forgeos/jstree/themes/page_category/lastli.gif +0 -0
  92. data/app/assets/stylesheets/forgeos/jstree/themes/page_category/lastli_rtl.gif +0 -0
  93. data/app/assets/stylesheets/forgeos/jstree/themes/page_category/li.gif +0 -0
  94. data/app/assets/stylesheets/forgeos/jstree/themes/page_category/remove.png +0 -0
  95. data/app/assets/stylesheets/forgeos/jstree/themes/page_category/rename.png +0 -0
  96. data/app/assets/stylesheets/forgeos/jstree/themes/page_category/style.css.sass +138 -0
  97. data/app/assets/stylesheets/forgeos/jstree/themes/page_category/throbber.gif +0 -0
  98. data/app/controllers/actualities_controller.rb +11 -0
  99. data/app/controllers/admin/actualities_controller.rb +100 -0
  100. data/app/controllers/admin/base_controller.rb +11 -0
  101. data/app/controllers/admin/carousels_controller.rb +101 -0
  102. data/app/controllers/admin/import_controller.rb +20 -0
  103. data/app/controllers/admin/menus_controller.rb +104 -0
  104. data/app/controllers/admin/newsletters_controller.rb +110 -0
  105. data/app/controllers/admin/pages_controller.rb +169 -0
  106. data/app/controllers/admin/static_content_blocks_controller.rb +174 -0
  107. data/app/controllers/admin/statistics_controller.rb +29 -0
  108. data/app/controllers/admin/widget_actualities_controller.rb +101 -0
  109. data/app/controllers/admin/widget_faqs_controller.rb +71 -0
  110. data/app/controllers/admin/widgets_controller.rb +83 -0
  111. data/app/controllers/forgeos/application_controller.rb +21 -0
  112. data/app/controllers/newsletters_controller.rb +11 -0
  113. data/app/controllers/pages_controller.rb +24 -0
  114. data/app/controllers/search_controller.rb +7 -0
  115. data/app/helpers/application_helper.rb +43 -0
  116. data/app/helpers/menu_helper.rb +46 -0
  117. data/app/helpers/routes_helper.rb +19 -0
  118. data/app/models/actuality.rb +21 -0
  119. data/app/models/block.rb +65 -0
  120. data/app/models/block_category.rb +7 -0
  121. data/app/models/carousel.rb +14 -0
  122. data/app/models/carousel_item.rb +12 -0
  123. data/app/models/category_link.rb +2 -0
  124. data/app/models/comment.rb +6 -0
  125. data/app/models/external_link.rb +5 -0
  126. data/app/models/faq.rb +10 -0
  127. data/app/models/link_page.rb +2 -0
  128. data/app/models/menu.rb +30 -0
  129. data/app/models/menu_category.rb +7 -0
  130. data/app/models/menu_link.rb +57 -0
  131. data/app/models/newsletter.rb +5 -0
  132. data/app/models/page.rb +85 -0
  133. data/app/models/page_category.rb +11 -0
  134. data/app/models/page_col.rb +14 -0
  135. data/app/models/page_link.rb +17 -0
  136. data/app/models/page_sweeper.rb +54 -0
  137. data/app/models/static_content_block.rb +2 -0
  138. data/app/models/static_content_category.rb +2 -0
  139. data/app/models/widget.rb +2 -0
  140. data/app/models/widget_actuality.rb +19 -0
  141. data/app/models/widget_category.rb +2 -0
  142. data/app/models/widget_faq.rb +12 -0
  143. data/app/views/actualities/rss.rxml +20 -0
  144. data/app/views/admin/actualities/_form.html.haml +38 -0
  145. data/app/views/admin/actualities/_tabs.html.haml +5 -0
  146. data/app/views/admin/actualities/edit.html.haml +3 -0
  147. data/app/views/admin/actualities/index.html.haml +10 -0
  148. data/app/views/admin/actualities/index.json.erb +34 -0
  149. data/app/views/admin/actualities/new.html.haml +3 -0
  150. data/app/views/admin/blocks/_associated_pages.html.haml +33 -0
  151. data/app/views/admin/blocks/_tabs.html.haml +8 -0
  152. data/app/views/admin/carousels/_attachments_popups.html.haml +81 -0
  153. data/app/views/admin/carousels/_form.html.haml +95 -0
  154. data/app/views/admin/carousels/_form_item.html.haml +54 -0
  155. data/app/views/admin/carousels/_item.html.haml +25 -0
  156. data/app/views/admin/carousels/edit.html.haml +1 -0
  157. data/app/views/admin/carousels/new.html.haml +1 -0
  158. data/app/views/admin/carousels/show.html.haml +40 -0
  159. data/app/views/admin/categories/_block.html.haml +4 -0
  160. data/app/views/admin/categories/_list_blocks.html.haml +13 -0
  161. data/app/views/admin/categories/_list_pages.html.haml +13 -0
  162. data/app/views/admin/categories/_page.html.haml +2 -0
  163. data/app/views/admin/dashboard/index.html.haml +19 -0
  164. data/app/views/admin/menu_links/_show.html.haml +8 -0
  165. data/app/views/admin/menus/_empty_menu_link.html.haml +45 -0
  166. data/app/views/admin/menus/_form.html.haml +27 -0
  167. data/app/views/admin/menus/_form_menu_links.html.haml +60 -0
  168. data/app/views/admin/menus/_lang_switcher.html.haml +2 -0
  169. data/app/views/admin/menus/_tabs.html.haml +5 -0
  170. data/app/views/admin/menus/_types_popups.html.haml +21 -0
  171. data/app/views/admin/menus/edit.html.haml +1 -0
  172. data/app/views/admin/menus/index.html.haml +13 -0
  173. data/app/views/admin/menus/index.json.erb +31 -0
  174. data/app/views/admin/menus/new.html.haml +1 -0
  175. data/app/views/admin/menus/show.html.haml +22 -0
  176. data/app/views/admin/newsletters/_form.html.haml +19 -0
  177. data/app/views/admin/newsletters/_tabs.html.haml +3 -0
  178. data/app/views/admin/newsletters/edit.html.haml +2 -0
  179. data/app/views/admin/newsletters/index.html.haml +14 -0
  180. data/app/views/admin/newsletters/index.json.erb +22 -0
  181. data/app/views/admin/newsletters/new.html.haml +2 -0
  182. data/app/views/admin/pages/_block_popup.html.haml +18 -0
  183. data/app/views/admin/pages/_blocks.html.haml +29 -0
  184. data/app/views/admin/pages/_codes.html.haml +33 -0
  185. data/app/views/admin/pages/_form.html.haml +15 -0
  186. data/app/views/admin/pages/_general.html.haml +64 -0
  187. data/app/views/admin/pages/_seo.html.haml +31 -0
  188. data/app/views/admin/pages/_tabs.html.haml +5 -0
  189. data/app/views/admin/pages/_tabs_show.html.haml +9 -0
  190. data/app/views/admin/pages/edit.html.haml +1 -0
  191. data/app/views/admin/pages/index.html.haml +13 -0
  192. data/app/views/admin/pages/index.json.erb +37 -0
  193. data/app/views/admin/pages/new.html.haml +2 -0
  194. data/app/views/admin/pages/show.html.haml +100 -0
  195. data/app/views/admin/static_content_blocks/_form.html.haml +41 -0
  196. data/app/views/admin/static_content_blocks/edit.html.haml +1 -0
  197. data/app/views/admin/static_content_blocks/index.html.haml +16 -0
  198. data/app/views/admin/static_content_blocks/index.json.erb +28 -0
  199. data/app/views/admin/static_content_blocks/new.html.haml +1 -0
  200. data/app/views/admin/static_content_blocks/show.html.haml +23 -0
  201. data/app/views/admin/statistics/index.html.haml +57 -0
  202. data/app/views/admin/users/_tabs.html.haml +3 -0
  203. data/app/views/admin/widget_actualities/_form.html.haml +87 -0
  204. data/app/views/admin/widget_actualities/_form_item.html.haml +28 -0
  205. data/app/views/admin/widget_actualities/_item.html.haml +11 -0
  206. data/app/views/admin/widget_actualities/_tabs.html.haml +8 -0
  207. data/app/views/admin/widget_actualities/edit.html.haml +2 -0
  208. data/app/views/admin/widget_actualities/new.html.haml +2 -0
  209. data/app/views/admin/widget_actualities/show.html.haml +39 -0
  210. data/app/views/admin/widget_faqs/_form.html.haml +68 -0
  211. data/app/views/admin/widget_faqs/_tabs.html.haml +8 -0
  212. data/app/views/admin/widget_faqs/edit.html.haml +2 -0
  213. data/app/views/admin/widget_faqs/new.html.haml +2 -0
  214. data/app/views/admin/widgets/_tabs.html.haml +8 -0
  215. data/app/views/admin/widgets/index.html.haml +28 -0
  216. data/app/views/admin/widgets/index.json.erb +27 -0
  217. data/app/views/layouts/admin/_menu.html.haml +0 -0
  218. data/app/views/layouts/application.html.haml +21 -0
  219. data/app/views/pages/_linked_pages.html.haml +4 -0
  220. data/app/views/pages/_page.html.haml +15 -0
  221. data/app/views/pages/show.html.haml +9 -0
  222. data/app/views/search/index.html.haml +8 -0
  223. data/config/locales/activerecord/en.yml +48 -0
  224. data/config/locales/activerecord/fr.yml +77 -0
  225. data/config/locales/admin/actuality/en.yml +30 -0
  226. data/config/locales/admin/actuality/fr.yml +30 -0
  227. data/config/locales/admin/block/en.yml +38 -0
  228. data/config/locales/admin/block/fr.yml +38 -0
  229. data/config/locales/admin/carousel/en.yml +24 -0
  230. data/config/locales/admin/carousel/fr.yml +24 -0
  231. data/config/locales/admin/menu/en.yml +33 -0
  232. data/config/locales/admin/menu/fr.yml +38 -0
  233. data/config/locales/admin/newsletter/en.yml +30 -0
  234. data/config/locales/admin/newsletter/fr.yml +30 -0
  235. data/config/locales/admin/page/en.yml +77 -0
  236. data/config/locales/admin/page/fr.yml +77 -0
  237. data/config/locales/admin/section/en.yml +23 -0
  238. data/config/locales/admin/section/fr.yml +23 -0
  239. data/config/locales/admin/static_content_block/en.yml +43 -0
  240. data/config/locales/admin/static_content_block/fr.yml +42 -0
  241. data/config/locales/admin/widget/en.yml +34 -0
  242. data/config/locales/admin/widget/fr.yml +34 -0
  243. data/config/locales/admin/widget_actuality/en.yml +23 -0
  244. data/config/locales/admin/widget_actuality/fr.yml +23 -0
  245. data/config/locales/admin/widget_faq/en.yml +22 -0
  246. data/config/locales/admin/widget_faq/fr.yml +30 -0
  247. data/config/locales/common/en.yml +208 -0
  248. data/config/locales/common/fr.yml +209 -0
  249. data/config/routes.rb +73 -0
  250. data/db/fixtures/menu_link_translations.yml +5 -0
  251. data/db/fixtures/menu_links.yml +5 -0
  252. data/db/fixtures/menus.yml +3 -0
  253. data/db/fixtures/page_translations.yml +19 -0
  254. data/db/fixtures/pages.yml +5 -0
  255. data/db/fixtures/people.yml +11 -0
  256. data/db/migrate/20091009134405_create_actualities.rb +18 -0
  257. data/db/migrate/20091009134503_create_blocks.rb +15 -0
  258. data/db/migrate/20091009134510_create_blocks_pages.rb +13 -0
  259. data/db/migrate/20091009134518_create_carousel_items.rb +17 -0
  260. data/db/migrate/20091009134729_create_pages.rb +18 -0
  261. data/db/migrate/20091009134736_create_pages_links.rb +12 -0
  262. data/db/migrate/20091027153116_create_menus.rb +14 -0
  263. data/db/migrate/20091027153659_create_menu_links.rb +19 -0
  264. data/db/migrate/20091208113459_create_page_translations.rb +9 -0
  265. data/db/migrate/20091208113460_create_block_translations.rb +9 -0
  266. data/db/migrate/20091208113461_create_menu_link_translations.rb +9 -0
  267. data/db/migrate/20091208170256_remove_translations_to_page.rb +10 -0
  268. data/db/migrate/20091208170257_remove_translations_to_block.rb +9 -0
  269. data/db/migrate/20091208170258_remove_translations_to_menu_link.rb +9 -0
  270. data/db/migrate/20100203102853_add_actuality_translations.rb +9 -0
  271. data/db/migrate/20100203102914_add_carousel_item_translations.rb +9 -0
  272. data/db/migrate/20100203125804_remove_translated_columns_to_actualities.rb +9 -0
  273. data/db/migrate/20100203125820_remove_translated_columns_to_carousel_items.rb +10 -0
  274. data/db/migrate/20100405095844_create_page_cols_table.rb +12 -0
  275. data/db/migrate/20100405101416_create_blocks_page_cols.rb +13 -0
  276. data/db/migrate/20100407093551_create_table_translation_for_page_cols.rb +13 -0
  277. data/db/migrate/20100413134832_add_index_on_menu_links.rb +11 -0
  278. data/db/migrate/20100501150819_add_code_to_pages.rb +13 -0
  279. data/db/migrate/20100511161012_create_faqs.rb +13 -0
  280. data/db/migrate/20100526163534_add_popup_to_menu_link.rb +9 -0
  281. data/db/migrate/20100929183346_change_answer_type.rb +9 -0
  282. data/db/migrate/20101015095242_update_actualities.rb +11 -0
  283. data/db/migrate/20101216155044_create_newsletter.rb +12 -0
  284. data/db/migrate/20110310092311_add_indexes_to_menu.rb +9 -0
  285. data/db/migrate/20110408133955_add_summary_to_menu_link_translations.rb +7 -0
  286. data/lib/forgeos/admin_menu.rb +14 -0
  287. data/lib/forgeos/cms.rb +8 -0
  288. data/lib/forgeos/cms/engine.rb +8 -0
  289. data/lib/forgeos/cms/statistics.rb +16 -0
  290. data/lib/forgeos_cms.rb +3 -0
  291. data/lib/tasks/install.rake +9 -0
  292. data/lib/tasks/upgrade.rake +22 -0
  293. data/recipes/deploy.rb +14 -0
  294. metadata +375 -0
@@ -0,0 +1,19 @@
1
+ module RoutesHelper
2
+ def page_path(*args)
3
+ super(extract_page_options(args))
4
+ end
5
+
6
+ def page_url(*args)
7
+ super(extract_page_options(args))
8
+ end
9
+
10
+ def extract_page_options(args)
11
+ options = args.dup.extract_options!
12
+ object = args.first
13
+ if object.kind_of?(Page)
14
+ return options.merge(:url => object.url)
15
+ else
16
+ return args
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ class Actuality < ActiveRecord::Base
2
+ translates :title, :content, :short_description
3
+ belongs_to :administrator
4
+ belongs_to :widget_actuality
5
+ belongs_to :picture
6
+ has_many :comments
7
+ validates :title, :content,
8
+ :presence => true
9
+
10
+ acts_as_commentable
11
+
12
+ def clone
13
+ cloned = super
14
+ cloned.translations = translations.clone unless translations.empty?
15
+ return cloned
16
+ end
17
+
18
+ def activate
19
+ self.update_attribute('active', !self.active )
20
+ end
21
+ end
@@ -0,0 +1,65 @@
1
+ class Block < ActiveRecord::Base
2
+ translates :title, :content
3
+ scope :in_page, lambda{ |page|
4
+ {
5
+ :joins => :page_cols,
6
+ :conditions => {:page_cols => {:id => page.page_cols}},
7
+ :select => "DISTINCT `blocks`.*" # kill duplicates
8
+ }
9
+ }
10
+
11
+ validates :title, :presence => true
12
+
13
+ has_and_belongs_to_many :page_cols,
14
+ :order => 'position'
15
+ has_and_belongs_to_many :categories,
16
+ :readonly => true,
17
+ :join_table => 'categories_elements',
18
+ :foreign_key => 'element_id',
19
+ :association_foreign_key => 'category_id'
20
+
21
+ before_destroy :check_has_no_single_key
22
+
23
+ define_index do
24
+ indexes single_key, :sortable => true
25
+ end
26
+
27
+ define_translated_index :title, :content
28
+
29
+ def clone
30
+ cloned = super
31
+ cloned.translations = translations.clone unless translations.empty?
32
+ %w(page_col_ids category_ids).each do |method|
33
+ cloned.send("#{method}=",self.send(method))
34
+ end
35
+ return cloned
36
+ end
37
+
38
+ def pages
39
+ self.page_cols.map(&:page)
40
+ end
41
+
42
+ def linked_with?(page)
43
+ self.pages.include?(page)
44
+ end
45
+
46
+ def link_with(page)
47
+ page.blocks << self
48
+ page.blocks.reset_positions
49
+ end
50
+
51
+ def unlink_with(page)
52
+ page.blocks.delete self
53
+ page.blocks.reset_positions
54
+ end
55
+
56
+ private
57
+
58
+ # if the block contains a single_key, it can not be destroyed
59
+ def check_has_no_single_key
60
+ if !self.single_key.blank?
61
+ errors.add(:the_block, :has_single_key)
62
+ return false
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,7 @@
1
+ class BlockCategory < Category
2
+ has_and_belongs_to_many :elements,
3
+ :join_table => 'categories_elements',
4
+ :foreign_key => 'category_id',
5
+ :association_foreign_key => 'element_id',
6
+ :class_name => 'Block'
7
+ end
@@ -0,0 +1,14 @@
1
+ class Carousel < Widget
2
+ has_many :items,
3
+ :class_name => 'CarouselItem',
4
+ :dependent => :destroy,
5
+ :order => 'position'
6
+ accepts_nested_attributes_for :items,
7
+ :allow_destroy => true
8
+
9
+ def clone
10
+ cloned = super
11
+ cloned.items = self.items.collect(&:clone)
12
+ return cloned
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ class CarouselItem < ActiveRecord::Base
2
+ translates :title, :url, :description
3
+ validates :title, :presence => true
4
+ belongs_to :picture
5
+ belongs_to :carousel
6
+
7
+ def clone
8
+ cloned = super
9
+ cloned.translations = translations.clone unless translations.empty?
10
+ return cloned
11
+ end
12
+ end
@@ -0,0 +1,2 @@
1
+ class CategoryLink < MenuLink
2
+ end
@@ -0,0 +1,6 @@
1
+ class Comment < ActiveRecord::Base
2
+ belongs_to :commentable, :polymorphic => true
3
+
4
+ belongs_to :actuality, :person
5
+ belongs_to :author, :foreign_key => 'person_id', :class_name => 'Person'
6
+ end
@@ -0,0 +1,5 @@
1
+ class ExternalLink < MenuLink
2
+ validates :url,
3
+ :if => Proc.new { |menu_link| menu_link.class.name == 'ExternalLink' },
4
+ :presence => true
5
+ end
data/app/models/faq.rb ADDED
@@ -0,0 +1,10 @@
1
+ class Faq < ActiveRecord::Base
2
+ translates :question, :answer
3
+ belongs_to :widget_faq
4
+
5
+ def clone
6
+ cloned = super
7
+ cloned.translations = translations.clone unless translations.empty?
8
+ return cloned
9
+ end
10
+ end
@@ -0,0 +1,2 @@
1
+ class LinkPage < Widget
2
+ end
@@ -0,0 +1,30 @@
1
+ class Menu < ActiveRecord::Base
2
+ validates :name, :presence => true
3
+ validates :single_key, :if => Proc.new {|c| c.single_key}, :uniqueness => true
4
+
5
+ has_and_belongs_to_many :categories,
6
+ :readonly => true,
7
+ :join_table => 'categories_elements',
8
+ :foreign_key => 'element_id',
9
+ :association_foreign_key => 'category_id',
10
+ :class_name => 'MenuCategory'
11
+
12
+ has_many :menu_links,
13
+ :dependent => :destroy,
14
+ :order => 'position'
15
+ accepts_nested_attributes_for :menu_links, :allow_destroy => true
16
+
17
+ define_index do
18
+ indexes name, :sortable => true
19
+ end
20
+
21
+ def activate
22
+ self.update_attribute('active', !self.active)
23
+ end
24
+
25
+ def clone
26
+ menu = super
27
+ menu.menu_links = self.menu_links.collect(&:clone)
28
+ return menu
29
+ end
30
+ end
@@ -0,0 +1,7 @@
1
+ class MenuCategory < Category
2
+ has_and_belongs_to_many :elements,
3
+ :join_table => 'categories_elements',
4
+ :foreign_key => 'category_id',
5
+ :association_foreign_key => 'element_id',
6
+ :class_name => 'Menu'
7
+ end
@@ -0,0 +1,57 @@
1
+ class MenuLink < ActiveRecord::Base
2
+ translates :title, :url, :summary
3
+ acts_as_tree :order => 'position'
4
+ accepts_nested_attributes_for :children,
5
+ :allow_destroy => true
6
+
7
+ validates :title, :presence => true
8
+
9
+ scope :actives, :conditions => { :active => true }
10
+ belongs_to :menu
11
+ belongs_to :target,
12
+ :polymorphic => true
13
+
14
+ def kind
15
+ read_attribute(:type)
16
+ end
17
+
18
+ def kind=(kind)
19
+ write_attribute(:type, kind)
20
+ end
21
+
22
+ def clone
23
+ menu_link = super
24
+ menu_link.children = self.children.collect(&:clone)
25
+ return menu_link
26
+ end
27
+
28
+ def url_with_target
29
+ url_attribute = url_without_target
30
+ if url_attribute.nil? || url_attribute.blank?
31
+ target_id ? target : '#'
32
+ else
33
+ url_attribute
34
+ end
35
+ end
36
+ alias_method_chain :url, :target
37
+
38
+ def url_and_children_urls
39
+ (self.children.map(&:url) + [self.url])
40
+ end
41
+
42
+ def url_and_parent_urls
43
+ return [self.url] unless self.parent
44
+ (self.parent.url_and_parent_urls + [self.url])
45
+ end
46
+
47
+ def url_match?(url_pattern='')
48
+ case url_pattern
49
+ when String
50
+ url_and_children_urls.include?("/#{CGI::unescape(url_pattern)}".gsub(/\/+/, '/'))
51
+ when Array
52
+ url_and_children_urls.include?("/#{url_pattern.last}")
53
+ else
54
+ false
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,5 @@
1
+ class Newsletter < ActiveRecord::Base
2
+ validates :email,
3
+ :format => /^([^\s]+)((?:[-a-z0-9]\.)[a-z]{2,})$/i,
4
+ :presence => true
5
+ end
@@ -0,0 +1,85 @@
1
+ class Page < ActiveRecord::Base
2
+ translates :title, :url
3
+ define_translated_index :title, :url
4
+ acts_as_taggable_on :tags
5
+
6
+ attr_accessor :page_urls
7
+
8
+ validates :title, :url, :presence => true
9
+ validates :single_key, :if => Proc.new {|c| c.single_key}, :uniqueness => true
10
+
11
+ has_one :meta_info,
12
+ :as => :target,
13
+ :dependent => :destroy
14
+ accepts_nested_attributes_for :meta_info
15
+
16
+ has_many :page_cols,
17
+ :dependent => :destroy
18
+ has_many :blocks,
19
+ :through => :page_cols
20
+ accepts_nested_attributes_for :page_cols
21
+
22
+ has_many :viewed_counters,
23
+ :as => :element,
24
+ :class_name => 'PageViewedCounter',
25
+ :dependent => :destroy
26
+ has_many :menu_links,
27
+ :as => :target
28
+
29
+ has_and_belongs_to_many :categories,
30
+ :readonly => true,
31
+ :join_table => 'categories_elements',
32
+ :foreign_key => 'element_id',
33
+ :association_foreign_key => 'category_id'
34
+ has_and_belongs_to_many :linked_pages,
35
+ :class_name => 'Page',
36
+ :association_foreign_key => 'linked_page_id',
37
+ :foreign_key => 'page_id',
38
+ :join_table => 'pages_links'
39
+
40
+ before_destroy :check_has_no_single_key,
41
+ :keep_page_translated_urls
42
+
43
+
44
+ def name
45
+ self.title
46
+ end
47
+
48
+ def page_urls
49
+ destroyed? ? super : translations.collect(&:url)
50
+ end
51
+
52
+ def min_cols_by_page
53
+ 1
54
+ end
55
+
56
+ def activate
57
+ # set publication date if page changes from inactive to active
58
+ self.published_at = Time.now unless self.active
59
+
60
+ # update active status
61
+ self.update_attribute('active', !self.active)
62
+ end
63
+
64
+ def clone
65
+ page = super
66
+ page.meta_info = meta_info.clone if meta_info
67
+ page.translations = translations.clone unless translations.empty?
68
+ page.page_cols = page_cols.map(&:clone)
69
+ page.tags = tags
70
+ return page
71
+ end
72
+
73
+ private
74
+ # if the page contains a single_key, it can not be destroyed
75
+ def check_has_no_single_key
76
+ unless self.single_key.blank?
77
+ errors.add(:the_page, :has_single_key)
78
+ return false
79
+ end
80
+ end
81
+
82
+ def keep_page_translated_urls
83
+ self.page_urls = translations.collect(&:url)
84
+ end
85
+ end
@@ -0,0 +1,11 @@
1
+ class PageCategory < Category
2
+ has_and_belongs_to_many :elements,
3
+ :join_table => 'categories_elements',
4
+ :foreign_key => 'category_id',
5
+ :association_foreign_key => 'element_id',
6
+ :class_name => 'Page'
7
+ has_and_belongs_to_many :pages,
8
+ :join_table => 'categories_elements',
9
+ :foreign_key => 'category_id',
10
+ :association_foreign_key => 'element_id'
11
+ end
@@ -0,0 +1,14 @@
1
+ class PageCol < ActiveRecord::Base
2
+ translates :content
3
+ has_and_belongs_to_many :blocks,
4
+ :list => true,
5
+ :order => 'position'
6
+ belongs_to :page
7
+
8
+ def clone
9
+ col = super
10
+ col.translations = translations.clone unless translations.empty?
11
+ col.block_ids = block_ids
12
+ return col
13
+ end
14
+ end
@@ -0,0 +1,17 @@
1
+ class PageLink < MenuLink
2
+ def url
3
+ #TODO update syntax with target method
4
+ page = Page.find_by_id(self.target_id)
5
+ if page
6
+ "/#{page.url}"
7
+ else
8
+ "#"
9
+ end
10
+ end
11
+
12
+ def page_and_children_pages
13
+ [self.target] +
14
+ self.children.all(:conditions => {:type => 'PageLink'}).
15
+ map(&:page_and_children_pages)
16
+ end
17
+ end
@@ -0,0 +1,54 @@
1
+ class PageSweeper < ActionController::Caching::Sweeper
2
+ observe Page, Block, ::Menu, Actuality
3
+
4
+ def after_save(record)
5
+ expire_cache_for(record)
6
+ end
7
+
8
+ def after_create(record)
9
+ expire_cache_for(record)
10
+ end
11
+
12
+ def before_destroy(record)
13
+ expire_cache_for(record)
14
+ end
15
+
16
+ private
17
+ def expire_cache_for(record)
18
+ case record
19
+ when Page
20
+ expire_cache_for_page(record)
21
+ when ::Menu
22
+ expire_fragment(record.single_key) if record.single_key.present?
23
+ expire_all_pages
24
+ when Actuality
25
+ expire_all_pages
26
+ when Block
27
+ if record.single_key
28
+ expire_all_pages
29
+ else
30
+ record.pages.flatten.uniq.each do |page|
31
+ expire_cache_for_page(page)
32
+ end
33
+ end
34
+ else
35
+ true
36
+ end
37
+ end
38
+
39
+ def expire_cache_for_page(page)
40
+ page.page_urls.each do |url|
41
+ expire_page forgeos_cms.page_path(url)
42
+ end
43
+
44
+ page.menu_links.each do |link|
45
+ expire_page link.url_and_parent_urls.join
46
+ end
47
+ end
48
+
49
+ def expire_all_pages
50
+ Page.all.each do |page|
51
+ expire_cache_for_page(page)
52
+ end
53
+ end
54
+ end