forgeos_cms 1.9.0

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