forgeos_cms 1.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +2 -0
- data/README.textile +42 -0
- data/app/assets/images/forgeos/admin/favicon.gif +0 -0
- data/app/assets/javascripts/forgeos/admin/functions/forgeos_cms/carousels.js +56 -0
- data/app/assets/javascripts/forgeos/admin/functions/forgeos_cms/menus.js +93 -0
- data/app/assets/javascripts/forgeos/admin/functions/forgeos_cms/overlay.js +86 -0
- data/app/assets/javascripts/forgeos/admin/functions/forgeos_cms/trees.js +8 -0
- data/app/assets/javascripts/forgeos/admin/functions/forgeos_cms/widget_actualities.js +117 -0
- data/app/assets/javascripts/forgeos/admin/inits/forgeos_cms/carousels.js +131 -0
- data/app/assets/javascripts/forgeos/admin/inits/forgeos_cms/menus.js +294 -0
- data/app/assets/javascripts/forgeos/admin/inits/forgeos_cms/overlays.js +71 -0
- data/app/assets/javascripts/forgeos/admin/inits/forgeos_cms/trees.js +94 -0
- data/app/assets/javascripts/forgeos/admin/inits/forgeos_cms/widget_actualities.js +23 -0
- data/app/assets/javascripts/forgeos/admin/inits/forgeos_cms/widget_faq.js +13 -0
- data/app/assets/stylesheets/forgeos/admin/base.css.sass +2 -0
- data/app/assets/stylesheets/forgeos/admin/forgeos_cms/_all.css.sass +1 -0
- data/app/assets/stylesheets/forgeos/admin/forgeos_cms/_blocks.css.sass +220 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/association_page/bubble-quantity-products.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/association_page/check-checked.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/association_page/check-unchecked.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/association_page/context.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/association_page/create.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/association_page/dark-blue-minus.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/association_page/dark-blue-plus.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/association_page/dot.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/association_page/f.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/association_page/fminus.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/association_page/fminus_rtl.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/association_page/folder.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/association_page/fplus.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/association_page/fplus_rtl.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/association_page/lastli.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/association_page/lastli_rtl.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/association_page/li.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/association_page/remove.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/association_page/rename.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/association_page/style.css.sass +219 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/association_page/throbber.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/block_category/brown-minus.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/block_category/brown-plus.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/block_category/bubble-quantity-products.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/block_category/context.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/block_category/create.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/block_category/dot.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/block_category/f.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/block_category/fminus.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/block_category/fminus_rtl.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/block_category/fplus.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/block_category/fplus_rtl.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/block_category/lastli.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/block_category/lastli_rtl.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/block_category/li.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/block_category/remove.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/block_category/rename.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/block_category/style.css.sass +138 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/block_category/throbber.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/big-drag-and-drop.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/bubble-quantity-products.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/check-checked.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/check-unchecked.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/context.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/create.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/dark-blue-minus.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/dark-blue-plus.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/dot.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/drag-drop.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/f.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/fminus.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/fminus_rtl.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/folder.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/fplus.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/fplus_rtl.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/lastli.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/lastli_rtl.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/li.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/remove.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/rename.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/style.css.sass +186 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/menu-tree/throbber.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/page_category/brown-minus.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/page_category/brown-plus.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/page_category/bubble-quantity-products.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/page_category/context.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/page_category/create.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/page_category/dot.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/page_category/f.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/page_category/fminus.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/page_category/fminus_rtl.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/page_category/fplus.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/page_category/fplus_rtl.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/page_category/lastli.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/page_category/lastli_rtl.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/page_category/li.gif +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/page_category/remove.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/page_category/rename.png +0 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/page_category/style.css.sass +138 -0
- data/app/assets/stylesheets/forgeos/jstree/themes/page_category/throbber.gif +0 -0
- data/app/controllers/actualities_controller.rb +11 -0
- data/app/controllers/admin/actualities_controller.rb +100 -0
- data/app/controllers/admin/base_controller.rb +11 -0
- data/app/controllers/admin/carousels_controller.rb +101 -0
- data/app/controllers/admin/import_controller.rb +20 -0
- data/app/controllers/admin/menus_controller.rb +104 -0
- data/app/controllers/admin/newsletters_controller.rb +110 -0
- data/app/controllers/admin/pages_controller.rb +169 -0
- data/app/controllers/admin/static_content_blocks_controller.rb +174 -0
- data/app/controllers/admin/statistics_controller.rb +29 -0
- data/app/controllers/admin/widget_actualities_controller.rb +101 -0
- data/app/controllers/admin/widget_faqs_controller.rb +71 -0
- data/app/controllers/admin/widgets_controller.rb +83 -0
- data/app/controllers/forgeos/application_controller.rb +21 -0
- data/app/controllers/newsletters_controller.rb +11 -0
- data/app/controllers/pages_controller.rb +24 -0
- data/app/controllers/search_controller.rb +7 -0
- data/app/helpers/application_helper.rb +43 -0
- data/app/helpers/menu_helper.rb +46 -0
- data/app/helpers/routes_helper.rb +19 -0
- data/app/models/actuality.rb +21 -0
- data/app/models/block.rb +65 -0
- data/app/models/block_category.rb +7 -0
- data/app/models/carousel.rb +14 -0
- data/app/models/carousel_item.rb +12 -0
- data/app/models/category_link.rb +2 -0
- data/app/models/comment.rb +6 -0
- data/app/models/external_link.rb +5 -0
- data/app/models/faq.rb +10 -0
- data/app/models/link_page.rb +2 -0
- data/app/models/menu.rb +30 -0
- data/app/models/menu_category.rb +7 -0
- data/app/models/menu_link.rb +57 -0
- data/app/models/newsletter.rb +5 -0
- data/app/models/page.rb +85 -0
- data/app/models/page_category.rb +11 -0
- data/app/models/page_col.rb +14 -0
- data/app/models/page_link.rb +17 -0
- data/app/models/page_sweeper.rb +54 -0
- data/app/models/static_content_block.rb +2 -0
- data/app/models/static_content_category.rb +2 -0
- data/app/models/widget.rb +2 -0
- data/app/models/widget_actuality.rb +19 -0
- data/app/models/widget_category.rb +2 -0
- data/app/models/widget_faq.rb +12 -0
- data/app/views/actualities/rss.rxml +20 -0
- data/app/views/admin/actualities/_form.html.haml +38 -0
- data/app/views/admin/actualities/_tabs.html.haml +5 -0
- data/app/views/admin/actualities/edit.html.haml +3 -0
- data/app/views/admin/actualities/index.html.haml +10 -0
- data/app/views/admin/actualities/index.json.erb +34 -0
- data/app/views/admin/actualities/new.html.haml +3 -0
- data/app/views/admin/blocks/_associated_pages.html.haml +33 -0
- data/app/views/admin/blocks/_tabs.html.haml +8 -0
- data/app/views/admin/carousels/_attachments_popups.html.haml +81 -0
- data/app/views/admin/carousels/_form.html.haml +95 -0
- data/app/views/admin/carousels/_form_item.html.haml +54 -0
- data/app/views/admin/carousels/_item.html.haml +25 -0
- data/app/views/admin/carousels/edit.html.haml +1 -0
- data/app/views/admin/carousels/new.html.haml +1 -0
- data/app/views/admin/carousels/show.html.haml +40 -0
- data/app/views/admin/categories/_block.html.haml +4 -0
- data/app/views/admin/categories/_list_blocks.html.haml +13 -0
- data/app/views/admin/categories/_list_pages.html.haml +13 -0
- data/app/views/admin/categories/_page.html.haml +2 -0
- data/app/views/admin/dashboard/index.html.haml +19 -0
- data/app/views/admin/menu_links/_show.html.haml +8 -0
- data/app/views/admin/menus/_empty_menu_link.html.haml +45 -0
- data/app/views/admin/menus/_form.html.haml +27 -0
- data/app/views/admin/menus/_form_menu_links.html.haml +60 -0
- data/app/views/admin/menus/_lang_switcher.html.haml +2 -0
- data/app/views/admin/menus/_tabs.html.haml +5 -0
- data/app/views/admin/menus/_types_popups.html.haml +21 -0
- data/app/views/admin/menus/edit.html.haml +1 -0
- data/app/views/admin/menus/index.html.haml +13 -0
- data/app/views/admin/menus/index.json.erb +31 -0
- data/app/views/admin/menus/new.html.haml +1 -0
- data/app/views/admin/menus/show.html.haml +22 -0
- data/app/views/admin/newsletters/_form.html.haml +19 -0
- data/app/views/admin/newsletters/_tabs.html.haml +3 -0
- data/app/views/admin/newsletters/edit.html.haml +2 -0
- data/app/views/admin/newsletters/index.html.haml +14 -0
- data/app/views/admin/newsletters/index.json.erb +22 -0
- data/app/views/admin/newsletters/new.html.haml +2 -0
- data/app/views/admin/pages/_block_popup.html.haml +18 -0
- data/app/views/admin/pages/_blocks.html.haml +29 -0
- data/app/views/admin/pages/_codes.html.haml +33 -0
- data/app/views/admin/pages/_form.html.haml +15 -0
- data/app/views/admin/pages/_general.html.haml +64 -0
- data/app/views/admin/pages/_seo.html.haml +31 -0
- data/app/views/admin/pages/_tabs.html.haml +5 -0
- data/app/views/admin/pages/_tabs_show.html.haml +9 -0
- data/app/views/admin/pages/edit.html.haml +1 -0
- data/app/views/admin/pages/index.html.haml +13 -0
- data/app/views/admin/pages/index.json.erb +37 -0
- data/app/views/admin/pages/new.html.haml +2 -0
- data/app/views/admin/pages/show.html.haml +100 -0
- data/app/views/admin/static_content_blocks/_form.html.haml +41 -0
- data/app/views/admin/static_content_blocks/edit.html.haml +1 -0
- data/app/views/admin/static_content_blocks/index.html.haml +16 -0
- data/app/views/admin/static_content_blocks/index.json.erb +28 -0
- data/app/views/admin/static_content_blocks/new.html.haml +1 -0
- data/app/views/admin/static_content_blocks/show.html.haml +23 -0
- data/app/views/admin/statistics/index.html.haml +57 -0
- data/app/views/admin/users/_tabs.html.haml +3 -0
- data/app/views/admin/widget_actualities/_form.html.haml +87 -0
- data/app/views/admin/widget_actualities/_form_item.html.haml +28 -0
- data/app/views/admin/widget_actualities/_item.html.haml +11 -0
- data/app/views/admin/widget_actualities/_tabs.html.haml +8 -0
- data/app/views/admin/widget_actualities/edit.html.haml +2 -0
- data/app/views/admin/widget_actualities/new.html.haml +2 -0
- data/app/views/admin/widget_actualities/show.html.haml +39 -0
- data/app/views/admin/widget_faqs/_form.html.haml +68 -0
- data/app/views/admin/widget_faqs/_tabs.html.haml +8 -0
- data/app/views/admin/widget_faqs/edit.html.haml +2 -0
- data/app/views/admin/widget_faqs/new.html.haml +2 -0
- data/app/views/admin/widgets/_tabs.html.haml +8 -0
- data/app/views/admin/widgets/index.html.haml +28 -0
- data/app/views/admin/widgets/index.json.erb +27 -0
- data/app/views/layouts/admin/_menu.html.haml +0 -0
- data/app/views/layouts/application.html.haml +21 -0
- data/app/views/pages/_linked_pages.html.haml +4 -0
- data/app/views/pages/_page.html.haml +15 -0
- data/app/views/pages/show.html.haml +9 -0
- data/app/views/search/index.html.haml +8 -0
- data/config/locales/activerecord/en.yml +48 -0
- data/config/locales/activerecord/fr.yml +77 -0
- data/config/locales/admin/actuality/en.yml +30 -0
- data/config/locales/admin/actuality/fr.yml +30 -0
- data/config/locales/admin/block/en.yml +38 -0
- data/config/locales/admin/block/fr.yml +38 -0
- data/config/locales/admin/carousel/en.yml +24 -0
- data/config/locales/admin/carousel/fr.yml +24 -0
- data/config/locales/admin/menu/en.yml +33 -0
- data/config/locales/admin/menu/fr.yml +38 -0
- data/config/locales/admin/newsletter/en.yml +30 -0
- data/config/locales/admin/newsletter/fr.yml +30 -0
- data/config/locales/admin/page/en.yml +77 -0
- data/config/locales/admin/page/fr.yml +77 -0
- data/config/locales/admin/section/en.yml +23 -0
- data/config/locales/admin/section/fr.yml +23 -0
- data/config/locales/admin/static_content_block/en.yml +43 -0
- data/config/locales/admin/static_content_block/fr.yml +42 -0
- data/config/locales/admin/widget/en.yml +34 -0
- data/config/locales/admin/widget/fr.yml +34 -0
- data/config/locales/admin/widget_actuality/en.yml +23 -0
- data/config/locales/admin/widget_actuality/fr.yml +23 -0
- data/config/locales/admin/widget_faq/en.yml +22 -0
- data/config/locales/admin/widget_faq/fr.yml +30 -0
- data/config/locales/common/en.yml +208 -0
- data/config/locales/common/fr.yml +209 -0
- data/config/routes.rb +73 -0
- data/db/fixtures/menu_link_translations.yml +5 -0
- data/db/fixtures/menu_links.yml +5 -0
- data/db/fixtures/menus.yml +3 -0
- data/db/fixtures/page_translations.yml +19 -0
- data/db/fixtures/pages.yml +5 -0
- data/db/fixtures/people.yml +11 -0
- data/db/migrate/20091009134405_create_actualities.rb +18 -0
- data/db/migrate/20091009134503_create_blocks.rb +15 -0
- data/db/migrate/20091009134510_create_blocks_pages.rb +13 -0
- data/db/migrate/20091009134518_create_carousel_items.rb +17 -0
- data/db/migrate/20091009134729_create_pages.rb +18 -0
- data/db/migrate/20091009134736_create_pages_links.rb +12 -0
- data/db/migrate/20091027153116_create_menus.rb +14 -0
- data/db/migrate/20091027153659_create_menu_links.rb +19 -0
- data/db/migrate/20091208113459_create_page_translations.rb +9 -0
- data/db/migrate/20091208113460_create_block_translations.rb +9 -0
- data/db/migrate/20091208113461_create_menu_link_translations.rb +9 -0
- data/db/migrate/20091208170256_remove_translations_to_page.rb +10 -0
- data/db/migrate/20091208170257_remove_translations_to_block.rb +9 -0
- data/db/migrate/20091208170258_remove_translations_to_menu_link.rb +9 -0
- data/db/migrate/20100203102853_add_actuality_translations.rb +9 -0
- data/db/migrate/20100203102914_add_carousel_item_translations.rb +9 -0
- data/db/migrate/20100203125804_remove_translated_columns_to_actualities.rb +9 -0
- data/db/migrate/20100203125820_remove_translated_columns_to_carousel_items.rb +10 -0
- data/db/migrate/20100405095844_create_page_cols_table.rb +12 -0
- data/db/migrate/20100405101416_create_blocks_page_cols.rb +13 -0
- data/db/migrate/20100407093551_create_table_translation_for_page_cols.rb +13 -0
- data/db/migrate/20100413134832_add_index_on_menu_links.rb +11 -0
- data/db/migrate/20100501150819_add_code_to_pages.rb +13 -0
- data/db/migrate/20100511161012_create_faqs.rb +13 -0
- data/db/migrate/20100526163534_add_popup_to_menu_link.rb +9 -0
- data/db/migrate/20100929183346_change_answer_type.rb +9 -0
- data/db/migrate/20101015095242_update_actualities.rb +11 -0
- data/db/migrate/20101216155044_create_newsletter.rb +12 -0
- data/db/migrate/20110310092311_add_indexes_to_menu.rb +9 -0
- data/db/migrate/20110408133955_add_summary_to_menu_link_translations.rb +7 -0
- data/lib/forgeos/admin_menu.rb +14 -0
- data/lib/forgeos/cms.rb +8 -0
- data/lib/forgeos/cms/engine.rb +8 -0
- data/lib/forgeos/cms/statistics.rb +16 -0
- data/lib/forgeos_cms.rb +3 -0
- data/lib/tasks/install.rake +9 -0
- data/lib/tasks/upgrade.rake +22 -0
- data/recipes/deploy.rb +14 -0
- 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
|
data/app/models/block.rb
ADDED
@@ -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,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
|
data/app/models/faq.rb
ADDED
data/app/models/menu.rb
ADDED
@@ -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,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
|
data/app/models/page.rb
ADDED
@@ -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
|