alchemy_cms 2.1.beta1 → 2.1.beta5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +2 -1
- data/.rspec +2 -2
- data/.travis.yml +2 -1
- data/Gemfile +8 -9
- data/README.md +10 -10
- data/Rakefile +0 -1
- data/alchemy_cms.gemspec +7 -9
- data/app/assets/images/alchemy/icons.png +0 -0
- data/app/assets/javascripts/alchemy/alchemy.base.js +8 -2
- data/app/assets/javascripts/alchemy/{alchemy.dragndrop.js → alchemy.dragndrop.js.erb} +3 -3
- data/app/assets/javascripts/alchemy/alchemy.element_editor_selector.js +1 -1
- data/app/assets/javascripts/alchemy/alchemy.growler.js +3 -3
- data/app/assets/javascripts/alchemy/alchemy.js +10 -15
- data/app/assets/javascripts/alchemy/alchemy.link_overlay.js +6 -2
- data/app/assets/javascripts/alchemy/alchemy.page_sorter.js +1 -1
- data/app/assets/javascripts/alchemy/alchemy.preview.js +1 -1
- data/app/assets/javascripts/alchemy/alchemy.routes.js.erb +38 -0
- data/app/assets/javascripts/alchemy/alchemy.swf_upload.js +360 -0
- data/app/assets/javascripts/alchemy/alchemy.windows.js +32 -17
- data/app/assets/javascripts/alchemy/preview.js +1 -0
- data/{vendor → app}/assets/javascripts/tiny_mce/plugins/alchemy_link/editor_plugin.js +0 -0
- data/{vendor → app}/assets/javascripts/tiny_mce/plugins/alchemy_link/langs/de.js +0 -0
- data/{vendor → app}/assets/javascripts/tiny_mce/plugins/alchemy_link/langs/en.js +0 -0
- data/{vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css.erb → app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css.scss} +15 -33
- data/app/assets/stylesheets/alchemy/_defaults.scss +4 -16
- data/app/assets/stylesheets/alchemy/alchemy.css +2 -2
- data/app/assets/stylesheets/alchemy/base.css.scss +161 -205
- data/app/assets/stylesheets/alchemy/elements.css.scss +15 -8
- data/app/assets/stylesheets/alchemy/{jquery-ui.alchemy.css → jquery-ui.alchemy.css.scss} +41 -45
- data/app/assets/stylesheets/alchemy/jquery.sb.css.scss +14 -10
- data/app/assets/stylesheets/alchemy/{tinymce_content.css → tinymce_content.css.scss} +7 -6
- data/app/assets/stylesheets/alchemy/{tinymce_dialog.css → tinymce_dialog.css.scss} +7 -7
- data/app/controllers/alchemy/admin/attachments_controller.rb +131 -0
- data/app/controllers/alchemy/admin/base_controller.rb +118 -0
- data/app/controllers/alchemy/admin/clipboard_controller.rb +46 -0
- data/app/controllers/alchemy/admin/contents_controller.rb +55 -0
- data/app/controllers/alchemy/admin/dashboard_controller.rb +15 -0
- data/app/controllers/alchemy/admin/elements_controller.rb +123 -0
- data/app/controllers/alchemy/admin/essence_audios_controller.rb +12 -0
- data/app/controllers/alchemy/admin/essence_files_controller.rb +27 -0
- data/app/controllers/alchemy/admin/essence_flashes_controller.rb +12 -0
- data/app/controllers/alchemy/admin/essence_pictures_controller.rb +91 -0
- data/app/controllers/alchemy/admin/essence_videos_controller.rb +12 -0
- data/app/controllers/alchemy/admin/languages_controller.rb +7 -0
- data/app/controllers/alchemy/admin/layoutpages_controller.rb +13 -0
- data/app/controllers/alchemy/admin/pages_controller.rb +253 -0
- data/app/controllers/alchemy/admin/pictures_controller.rb +139 -0
- data/app/controllers/alchemy/admin/resources_controller.rb +132 -0
- data/app/controllers/alchemy/admin/trash_controller.rb +24 -0
- data/app/controllers/alchemy/admin/users_controller.rb +81 -0
- data/app/controllers/alchemy/attachments_controller.rb +30 -0
- data/app/controllers/alchemy/base_controller.rb +137 -0
- data/app/controllers/alchemy/elements_controller.rb +18 -0
- data/app/controllers/alchemy/messages_controller.rb +115 -0
- data/app/controllers/alchemy/pages_controller.rb +169 -0
- data/app/controllers/alchemy/pictures_controller.rb +62 -0
- data/app/controllers/alchemy/user_sessions_controller.rb +80 -0
- data/app/helpers/alchemy/admin/attachments_helper.rb +11 -0
- data/app/helpers/alchemy/admin/base_helper.rb +423 -0
- data/app/helpers/alchemy/admin/contents_helper.rb +75 -0
- data/app/helpers/alchemy/admin/elements_helper.rb +118 -0
- data/app/helpers/alchemy/admin/essences_helper.rb +78 -0
- data/app/helpers/alchemy/admin/pages_helper.rb +46 -0
- data/app/helpers/alchemy/admin/pictures_helper.rb +30 -0
- data/app/helpers/alchemy/base_helper.rb +65 -0
- data/app/helpers/alchemy/elements_helper.rb +173 -0
- data/app/helpers/alchemy/essences_helper.rb +101 -0
- data/app/helpers/alchemy/pages_helper.rb +550 -0
- data/app/mailers/alchemy/messages.rb +17 -0
- data/app/mailers/alchemy/notifications.rb +25 -0
- data/app/models/alchemy.rb +7 -0
- data/app/models/alchemy/attachment.rb +82 -0
- data/app/models/alchemy/cell.rb +61 -0
- data/app/models/alchemy/content.rb +163 -0
- data/app/models/alchemy/element.rb +479 -0
- data/app/models/alchemy/essence_audio.rb +19 -0
- data/app/models/alchemy/essence_date.rb +22 -0
- data/app/models/alchemy/essence_file.rb +19 -0
- data/app/models/alchemy/essence_flash.rb +17 -0
- data/app/models/alchemy/essence_html.rb +21 -0
- data/app/models/alchemy/essence_picture.rb +29 -0
- data/app/models/alchemy/essence_richtext.rb +63 -0
- data/app/models/alchemy/essence_text.rb +40 -0
- data/app/models/alchemy/essence_video.rb +19 -0
- data/app/models/alchemy/folded_page.rb +5 -0
- data/app/models/alchemy/language.rb +90 -0
- data/app/models/alchemy/message.rb +71 -0
- data/app/models/alchemy/page.rb +548 -0
- data/app/models/alchemy/picture.rb +100 -0
- data/app/models/alchemy/user.rb +72 -0
- data/app/models/alchemy/user_session.rb +12 -0
- data/app/sweepers/alchemy/content_sweeper.rb +22 -0
- data/app/sweepers/alchemy/pages_sweeper.rb +49 -0
- data/app/sweepers/alchemy/pictures_sweeper.rb +23 -0
- data/app/views/{admin → alchemy/admin}/attachments/_archive_overlay.html.erb +6 -6
- data/app/views/{admin → alchemy/admin}/attachments/_attachment.html.erb +14 -14
- data/app/views/{admin → alchemy/admin}/attachments/_file_to_assign.html.erb +0 -0
- data/app/views/alchemy/admin/attachments/_files_list.html.erb +25 -0
- data/app/views/{admin → alchemy/admin}/attachments/create.js.erb +0 -0
- data/app/views/{admin → alchemy/admin}/attachments/destroy.js.erb +0 -0
- data/app/views/{admin → alchemy/admin}/attachments/edit.html.erb +2 -2
- data/app/views/alchemy/admin/attachments/index.html.erb +18 -0
- data/app/views/{admin → alchemy/admin}/attachments/new.html.erb +3 -3
- data/app/views/{admin → alchemy/admin}/clipboard/clear.js.erb +1 -1
- data/app/views/alchemy/admin/clipboard/index.html.erb +19 -0
- data/app/views/alchemy/admin/clipboard/insert.js.erb +14 -0
- data/app/views/alchemy/admin/clipboard/remove.js.erb +10 -0
- data/app/views/{admin → alchemy/admin}/contents/_missing.html.erb +4 -4
- data/app/views/{admin → alchemy/admin}/contents/create.js.erb +10 -10
- data/app/views/{admin → alchemy/admin}/contents/destroy.js.erb +0 -0
- data/app/views/{admin → alchemy/admin}/contents/new.html.erb +1 -1
- data/app/views/{admin → alchemy/admin}/contents/order.js.erb +0 -0
- data/app/views/alchemy/admin/dashboard/index.html.erb +96 -0
- data/app/views/{admin → alchemy/admin}/elements/_add_content.html.erb +2 -2
- data/app/views/{admin → alchemy/admin}/elements/_element.html.erb +3 -3
- data/app/views/{admin → alchemy/admin}/elements/_element_foot.html.erb +8 -8
- data/app/views/{admin → alchemy/admin}/elements/_element_head.html.erb +4 -4
- data/app/views/{admin → alchemy/admin}/elements/_elements_select.html.erb +2 -2
- data/app/views/alchemy/admin/elements/_new_element_form.html.erb +30 -0
- data/app/views/{admin → alchemy/admin}/elements/_picture_editor.html.erb +3 -3
- data/app/views/{admin → alchemy/admin}/elements/create.js.erb +2 -2
- data/app/views/{admin → alchemy/admin}/elements/destroy.js.erb +1 -1
- data/app/views/{admin → alchemy/admin}/elements/fold.js.erb +2 -2
- data/app/views/{admin → alchemy/admin}/elements/index.html.erb +1 -10
- data/app/views/{admin → alchemy/admin}/elements/list.js.erb +2 -2
- data/app/views/alchemy/admin/elements/new.html.erb +41 -0
- data/app/views/{admin → alchemy/admin}/elements/order.js.erb +1 -1
- data/app/views/{admin → alchemy/admin}/elements/trash.js.erb +1 -1
- data/app/views/{admin → alchemy/admin}/elements/update.js.erb +1 -1
- data/app/views/{admin → alchemy/admin}/essence_files/assign.js.erb +1 -1
- data/app/views/{admin → alchemy/admin}/essence_files/edit.html.erb +23 -23
- data/app/views/{admin → alchemy/admin}/essence_pictures/assign.js.erb +2 -2
- data/app/views/{admin → alchemy/admin}/essence_pictures/crop.html.erb +15 -6
- data/app/views/{admin → alchemy/admin}/essence_pictures/destroy.js.erb +1 -1
- data/app/views/{admin → alchemy/admin}/essence_pictures/edit.html.erb +11 -11
- data/app/views/{admin → alchemy/admin}/essence_pictures/save_link.js.erb +0 -0
- data/app/views/{admin → alchemy/admin}/essence_pictures/update.js.erb +2 -2
- data/app/views/alchemy/admin/languages/_language.html.erb +36 -0
- data/app/views/{admin → alchemy/admin}/layoutpages/_layoutpage.html.erb +18 -18
- data/app/views/alchemy/admin/layoutpages/index.html.erb +65 -0
- data/app/views/{admin → alchemy/admin}/pages/_contactform_links.html.erb +6 -6
- data/app/views/alchemy/admin/pages/_create_language_form.html.erb +38 -0
- data/app/views/{admin → alchemy/admin}/pages/_external_link.html.erb +9 -9
- data/app/views/{admin → alchemy/admin}/pages/_file_link.html.erb +13 -13
- data/app/views/{admin → alchemy/admin}/pages/_internal_link.html.erb +8 -8
- data/app/views/{admin → alchemy/admin}/pages/_new_page_form.html.erb +6 -6
- data/app/views/{admin → alchemy/admin}/pages/_page.html.erb +25 -25
- data/app/views/{admin → alchemy/admin}/pages/_page_for_links.html.erb +6 -6
- data/app/views/{admin → alchemy/admin}/pages/_page_infos.html.erb +3 -3
- data/app/views/{admin → alchemy/admin}/pages/_page_status.html.erb +4 -4
- data/app/views/{admin → alchemy/admin}/pages/_sitemap.html.erb +21 -21
- data/app/views/alchemy/admin/pages/configure.html.erb +71 -0
- data/app/views/{admin → alchemy/admin}/pages/configure_external.html.erb +9 -9
- data/app/views/{admin → alchemy/admin}/pages/destroy.js.erb +2 -2
- data/app/views/alchemy/admin/pages/edit.html.erb +181 -0
- data/app/views/alchemy/admin/pages/flush.js.erb +2 -0
- data/app/views/{admin → alchemy/admin}/pages/fold.js.erb +0 -0
- data/app/views/alchemy/admin/pages/index.html.erb +104 -0
- data/app/views/{admin → alchemy/admin}/pages/link.html.erb +4 -4
- data/app/views/alchemy/admin/pages/locked.html.erb +3 -0
- data/app/views/{admin → alchemy/admin}/pages/new.html.erb +8 -8
- data/app/views/{admin → alchemy/admin}/pages/show.html.erb +0 -0
- data/app/views/{admin → alchemy/admin}/pages/sort.js.erb +0 -0
- data/app/views/{admin → alchemy/admin}/pages/unlock.js.erb +1 -1
- data/app/views/{admin → alchemy/admin}/pages/update.js.erb +5 -5
- data/app/views/{admin → alchemy/admin}/partials/_flash.html.erb +0 -0
- data/app/views/{admin → alchemy/admin}/partials/_flash_notices.html.erb +1 -1
- data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +14 -0
- data/app/views/alchemy/admin/partials/_pagination_links.html.erb +5 -0
- data/app/views/{admin → alchemy/admin}/partials/_remote_pagination_links.html.erb +2 -2
- data/app/views/{admin → alchemy/admin}/partials/_remote_search_form.html.erb +2 -2
- data/app/views/{admin → alchemy/admin}/partials/_search_form.html.erb +6 -7
- data/app/views/alchemy/admin/partials/_sub_navigation_tab.html.erb +8 -0
- data/app/views/alchemy/admin/partials/_upload_form.html.erb +129 -0
- data/app/views/{admin → alchemy/admin}/pictures/_archive_overlay.html.erb +3 -3
- data/app/views/{admin → alchemy/admin}/pictures/_filter_and_size_bar.html.erb +15 -15
- data/app/views/{admin → alchemy/admin}/pictures/_picture.html.erb +7 -7
- data/app/views/{admin → alchemy/admin}/pictures/_picture_to_assign.html.erb +2 -2
- data/app/views/alchemy/admin/pictures/_pictures_list.html.erb +14 -0
- data/app/views/{admin → alchemy/admin}/pictures/archive_overlay.js.erb +0 -0
- data/app/views/{admin → alchemy/admin}/pictures/create.js.erb +3 -3
- data/app/views/{admin → alchemy/admin}/pictures/flush.js.erb +0 -0
- data/app/views/alchemy/admin/pictures/index.html.erb +83 -0
- data/app/views/{admin → alchemy/admin}/pictures/new.html.erb +3 -3
- data/app/views/alchemy/admin/pictures/show_in_window.html.erb +1 -0
- data/app/views/{admin → alchemy/admin}/pictures/update.js.erb +0 -0
- data/app/views/alchemy/admin/resources/_form.html.erb +20 -0
- data/app/views/alchemy/admin/resources/_resource.html.erb +35 -0
- data/app/views/alchemy/admin/resources/_table.html.erb +23 -0
- data/app/views/alchemy/admin/resources/destroy.js.erb +1 -0
- data/app/views/{admin/languages → alchemy/admin/resources}/edit.html.erb +0 -0
- data/app/views/alchemy/admin/resources/index.html.erb +19 -0
- data/app/views/{admin/languages → alchemy/admin/resources}/new.html.erb +0 -0
- data/app/views/{admin → alchemy/admin}/trash/clear.js.erb +1 -1
- data/app/views/{admin → alchemy/admin}/trash/index.html.erb +4 -4
- data/app/views/alchemy/admin/users/_table.html.erb +54 -0
- data/app/views/{admin → alchemy/admin}/users/_user.html.erb +14 -12
- data/app/views/{admin → alchemy/admin}/users/edit.html.erb +0 -0
- data/app/views/alchemy/admin/users/index.html.erb +41 -0
- data/app/views/{admin → alchemy/admin}/users/new.html.erb +1 -1
- data/app/views/{attachments → alchemy/attachments}/show.html.erb +0 -0
- data/app/views/alchemy/base/500.html.erb +5 -0
- data/app/views/alchemy/base/error_notice.js.erb +2 -0
- data/app/views/alchemy/base/permission_denied.js.erb +2 -0
- data/app/views/alchemy/{redirect.js.erb → base/redirect.js.erb} +0 -0
- data/app/views/alchemy/{remote_errors.js.erb → base/remote_errors.js.erb} +0 -0
- data/app/views/alchemy/{update.js.erb → base/update.js.erb} +0 -0
- data/app/views/{elements → alchemy/elements}/_article_editor.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_article_view.html.erb +1 -1
- data/app/views/{elements → alchemy/elements}/_bild_editor.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_bild_text_editor.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_bild_text_view.html.erb +1 -1
- data/app/views/{elements → alchemy/elements}/_bild_view.html.erb +1 -1
- data/app/views/{elements → alchemy/elements}/_claim_editor.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_claim_view.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_contactform_editor.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_contactform_view.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_editor_not_found.html.erb +1 -1
- data/app/views/{elements → alchemy/elements}/_footnote_editor.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_footnote_view.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_header_editor.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_header_view.html.erb +1 -1
- data/app/views/{elements → alchemy/elements}/_headline_editor.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_headline_view.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_image_mosaic_editor.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_image_mosaic_view.html.erb +1 -1
- data/app/views/{elements → alchemy/elements}/_intro_editor.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_intro_image_text_editor.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_intro_image_text_view.html.erb +1 -1
- data/app/views/{elements → alchemy/elements}/_intro_view.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_news_editor.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_news_view.html.erb +0 -0
- data/app/views/alchemy/elements/_searchresult_editor.html.erb +1 -0
- data/app/views/alchemy/elements/_searchresult_view.html.erb +4 -0
- data/app/views/alchemy/elements/_sitemap_editor.html.erb +3 -0
- data/app/views/{elements → alchemy/elements}/_sitemap_view.html.erb +2 -2
- data/app/views/{elements → alchemy/elements}/_sitename_editor.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_sitename_view.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_subheadline_editor.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_subheadline_view.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_text_editor.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_text_view.html.erb +0 -0
- data/app/views/{elements → alchemy/elements}/_view_not_found.html.erb +0 -0
- data/app/views/alchemy/elements/show.html.erb +6 -0
- data/app/views/{elements → alchemy/elements}/show.js.erb +1 -1
- data/app/views/alchemy/essences/_essence_audio_editor.html.erb +1 -0
- data/app/views/{essences → alchemy/essences}/_essence_audio_view.html.erb +0 -0
- data/app/views/{essences → alchemy/essences}/_essence_date_editor.html.erb +0 -0
- data/app/views/{essences → alchemy/essences}/_essence_date_view.html.erb +0 -0
- data/app/views/{essences → alchemy/essences}/_essence_file_editor.html.erb +9 -9
- data/app/views/{essences → alchemy/essences}/_essence_file_view.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_flash_editor.html.erb +1 -0
- data/app/views/{essences → alchemy/essences}/_essence_flash_view.html.erb +0 -0
- data/app/views/{essences → alchemy/essences}/_essence_html_editor.html.erb +0 -0
- data/app/views/{essences → alchemy/essences}/_essence_html_view.html.erb +0 -0
- data/app/views/{essences → alchemy/essences}/_essence_picture_editor.html.erb +8 -8
- data/app/views/{essences → alchemy/essences}/_essence_picture_tools.html.erb +11 -11
- data/app/views/{essences → alchemy/essences}/_essence_picture_view.html.erb +2 -4
- data/app/views/alchemy/essences/_essence_richtext_editor.html.erb +11 -0
- data/app/views/{essences → alchemy/essences}/_essence_richtext_view.html.erb +0 -0
- data/app/views/{essences → alchemy/essences}/_essence_text_editor.html.erb +6 -6
- data/app/views/{essences → alchemy/essences}/_essence_text_view.html.erb +0 -0
- data/app/views/alchemy/essences/_essence_video_editor.html.erb +1 -0
- data/app/views/{essences → alchemy/essences}/_essence_video_view.html.erb +1 -1
- data/app/views/{messages → alchemy/messages}/contact_form_mail.html.erb +0 -0
- data/app/views/{messages → alchemy/messages}/contact_form_mail.text.erb +0 -0
- data/app/views/{messages → alchemy/messages}/new.html.erb +0 -0
- data/app/views/{navigation → alchemy/navigation}/_image_link.html.erb +0 -0
- data/app/views/{navigation → alchemy/navigation}/_link.html.erb +1 -1
- data/app/views/{navigation → alchemy/navigation}/_renderer.html.erb +0 -0
- data/app/views/alchemy/notifications/admin_user_created.text.erb +13 -0
- data/app/views/alchemy/notifications/registered_user_created.text.erb +10 -0
- data/app/views/{page_layouts → alchemy/page_layouts}/_contact.html.erb +0 -0
- data/app/views/{page_layouts → alchemy/page_layouts}/_external.html.erb +0 -0
- data/app/views/{page_layouts → alchemy/page_layouts}/_intro.html.erb +0 -0
- data/app/views/{page_layouts → alchemy/page_layouts}/_layout_footer.html.erb +0 -0
- data/app/views/{page_layouts → alchemy/page_layouts}/_layout_header.html.erb +0 -0
- data/app/views/{page_layouts → alchemy/page_layouts}/_news.html.erb +0 -0
- data/app/views/{_newsletter_layout.html.erb → alchemy/page_layouts/_newsletter_layout.html.erb} +0 -0
- data/app/views/{page_layouts → alchemy/page_layouts}/_search.html.erb +0 -0
- data/app/views/{page_layouts → alchemy/page_layouts}/_standard.html.erb +0 -0
- data/app/views/{pages → alchemy/pages}/show.html.erb +0 -0
- data/app/views/{pages → alchemy/pages}/show.rss.builder +0 -0
- data/app/views/{pages → alchemy/pages}/sitemap.xml.erb +0 -0
- data/app/views/{pictures → alchemy/pictures}/show.gif.flexi +0 -0
- data/app/views/{pictures → alchemy/pictures}/show.jpg.flexi +0 -0
- data/app/views/{pictures → alchemy/pictures}/show.png.flexi +0 -0
- data/app/views/{pictures → alchemy/pictures}/thumbnail.png.flexi +0 -0
- data/app/views/{pictures → alchemy/pictures}/zoom.png.flexi +0 -0
- data/app/views/alchemy/search/_result.html.erb +9 -0
- data/app/views/alchemy/user_sessions/leave.html.erb +11 -0
- data/app/views/alchemy/user_sessions/login.html.erb +47 -0
- data/app/views/alchemy/user_sessions/logout.html.erb +3 -0
- data/app/views/alchemy/user_sessions/signup.html.erb +14 -0
- data/app/views/layouts/{alchemy.html.erb → alchemy/admin.html.erb} +23 -17
- data/app/views/layouts/alchemy/login.html.erb +37 -0
- data/app/views/layouts/alchemy/pages.html.erb +29 -0
- data/app/views/layouts/{sitemap.xml.erb → alchemy/sitemap.xml.erb} +0 -0
- data/config/alchemy/config.yml +2 -80
- data/config/alchemy/modules.yml +70 -0
- data/config/alchemy/page_layouts.yml +2 -0
- data/config/authorization_rules.rb +32 -39
- data/config/locales/alchemy.de.yml +789 -0
- data/config/locales/alchemy.en.yml +587 -0
- data/config/routes.rb +144 -142
- data/db/migrate/20111116125112_namespace_models.rb +23 -0
- data/lib/alchemy/auth_engine.rb +7 -0
- data/lib/alchemy/capistrano.rb +4 -1
- data/lib/alchemy/engine.rb +39 -25
- data/lib/alchemy/essence.rb +5 -1
- data/lib/alchemy/i18n.rb +47 -0
- data/lib/alchemy/modules.rb +38 -0
- data/lib/alchemy/page_layout.rb +98 -56
- data/lib/alchemy/seeder.rb +60 -110
- data/lib/alchemy/tinymce.rb +2 -2
- data/lib/alchemy/version.rb +3 -3
- data/lib/alchemy_cms.rb +23 -23
- data/lib/rails/generators/alchemy/elements/elements_generator.rb +1 -1
- data/lib/rails/generators/alchemy/elements/templates/editor.html.erb +1 -1
- data/lib/rails/generators/alchemy/elements/templates/view.html.erb +2 -2
- data/lib/rails/generators/alchemy/page_layouts/page_layouts_generator.rb +1 -1
- data/lib/rails/generators/alchemy/plugin/plugin_generator.rb +0 -1
- data/lib/rails/generators/alchemy/scaffold/files/pages.html.erb +1 -1
- data/lib/rails/generators/alchemy/scaffold/scaffold_generator.rb +34 -34
- data/lib/tasks/install.rake +2 -9
- data/lib/tasks/upgrade.rake +69 -208
- data/spec/controllers/admin/clipboard_controller_spec.rb +33 -35
- data/spec/controllers/admin/contents_controller_spec.rb +5 -5
- data/spec/controllers/admin/elements_controller_spec.rb +22 -0
- data/spec/controllers/admin/trash_controller_spec.rb +5 -5
- data/spec/controllers/base_controller_spec.rb +67 -0
- data/spec/controllers/pages_controller_spec.rb +6 -6
- data/spec/dummy/config/application.rb +1 -8
- data/spec/dummy/config/routes.rb +2 -57
- data/spec/dummy/db/schema.rb +27 -27
- data/spec/factories.rb +8 -8
- data/spec/helpers/{alchemy_helper_spec.rb → admin/base_helper_spec.rb} +8 -1
- data/spec/helpers/admin/contents_helper_spec.rb +25 -0
- data/spec/helpers/admin/elements_helper_spec.rb +31 -3
- data/spec/helpers/admin/essences_helper_spec.rb +27 -0
- data/spec/helpers/elements_helper_spec.rb +99 -21
- data/spec/helpers/essences_helper_spec.rb +1 -18
- data/spec/helpers/pages_helper_spec.rb +212 -26
- data/spec/integration/admin/pages_controller_spec.rb +56 -0
- data/spec/integration/navigation_spec.rb +1 -1
- data/spec/integration/pages_controller_spec.rb +85 -68
- data/spec/integration/security_spec.rb +49 -22
- data/spec/models/content_spec.rb +3 -3
- data/spec/models/element_spec.rb +19 -11
- data/spec/models/essence_richtext_spec.rb +2 -2
- data/spec/models/language_spec.rb +36 -7
- data/spec/models/page_spec.rb +57 -13
- data/spec/models/user_spec.rb +1 -1
- data/spec/page_layout_spec.rb +13 -3
- data/spec/routing_spec.rb +12 -8
- data/spec/spec_helper.rb +8 -9
- data/spec/support/controller_hacks.rb +37 -0
- data/vendor/assets/javascripts/swfupload/SWFObject License.txt +4 -0
- data/vendor/assets/javascripts/swfupload/swfupload.cookies.js +53 -0
- data/vendor/assets/javascripts/swfupload/swfupload.js +1 -1
- data/vendor/assets/javascripts/swfupload/{queue.js → swfupload.queue.js} +97 -97
- data/vendor/assets/javascripts/swfupload/swfupload.speed.js +342 -0
- data/vendor/assets/javascripts/swfupload/swfupload.swfobject.js +111 -0
- data/vendor/assets/javascripts/tiny_mce/license.txt +504 -504
- data/vendor/assets/javascripts/tiny_mce/plugins/autoresize/editor_plugin.js +1 -1
- data/vendor/assets/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm +110 -110
- data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif +0 -0
- data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif +0 -0
- data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif +0 -0
- data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif +0 -0
- data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif +0 -0
- data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif +0 -0
- data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif +0 -0
- data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css +90 -0
- data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/template.htm +387 -387
- data/vendor/assets/javascripts/tiny_mce/plugins/paste/js/pastetext.js +36 -36
- data/vendor/assets/javascripts/tiny_mce/plugins/paste/js/pasteword.js +51 -51
- data/vendor/assets/javascripts/tiny_mce/plugins/paste/pastetext.htm +26 -26
- data/vendor/assets/javascripts/tiny_mce/plugins/paste/pasteword.htm +21 -21
- data/vendor/assets/javascripts/tiny_mce/plugins/table/cell.htm +180 -180
- data/vendor/assets/javascripts/tiny_mce/plugins/table/css/cell.css +16 -16
- data/vendor/assets/javascripts/tiny_mce/plugins/table/css/row.css +25 -25
- data/vendor/assets/javascripts/tiny_mce/plugins/table/css/table.css +13 -13
- data/vendor/assets/javascripts/tiny_mce/plugins/table/editor_plugin.js +1 -1
- data/vendor/assets/javascripts/tiny_mce/plugins/table/js/cell.js +319 -319
- data/vendor/assets/javascripts/tiny_mce/plugins/table/js/merge_cells.js +27 -27
- data/vendor/assets/javascripts/tiny_mce/plugins/table/js/row.js +237 -237
- data/vendor/assets/javascripts/tiny_mce/plugins/table/js/table.js +484 -450
- data/vendor/assets/javascripts/tiny_mce/plugins/table/merge_cells.htm +32 -32
- data/vendor/assets/javascripts/tiny_mce/plugins/table/row.htm +158 -158
- data/vendor/assets/javascripts/tiny_mce/plugins/table/table.htm +188 -188
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/about.htm +52 -52
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/anchor.htm +26 -26
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/charmap.htm +55 -51
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/color_picker.htm +74 -74
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/editor_template.js +1 -1
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/image.htm +80 -80
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/about.js +73 -73
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/anchor.js +43 -43
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/charmap.js +363 -355
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/color_picker.js +329 -329
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/image.js +251 -251
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/link.js +153 -153
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/source_editor.js +56 -56
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js +1 -1
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/link.htm +57 -57
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/shortcuts.htm +47 -47
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/content.css +50 -50
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css +117 -117
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/ui.css +214 -214
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/content.css +24 -0
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +105 -0
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css +102 -0
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css +48 -48
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css +117 -117
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css +217 -217
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +7 -7
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +5 -5
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/source_editor.htm +25 -25
- data/vendor/assets/javascripts/tiny_mce/tiny_mce.js +1 -1
- data/vendor/assets/javascripts/tiny_mce/utils/editable_selects.js +70 -70
- data/vendor/assets/javascripts/tiny_mce/utils/form_utils.js +210 -210
- data/vendor/assets/javascripts/tiny_mce/utils/mctabs.js +161 -161
- data/vendor/assets/javascripts/tiny_mce/utils/validate.js +252 -252
- metadata +432 -465
- data/app/controllers/admin/attachments_controller.rb +0 -136
- data/app/controllers/admin/clipboard_controller.rb +0 -43
- data/app/controllers/admin/contents_controller.rb +0 -60
- data/app/controllers/admin/elements_controller.rb +0 -134
- data/app/controllers/admin/essence_audios_controller.rb +0 -10
- data/app/controllers/admin/essence_files_controller.rb +0 -25
- data/app/controllers/admin/essence_flashes_controller.rb +0 -10
- data/app/controllers/admin/essence_pictures_controller.rb +0 -84
- data/app/controllers/admin/essence_videos_controller.rb +0 -10
- data/app/controllers/admin/languages_controller.rb +0 -64
- data/app/controllers/admin/layoutpages_controller.rb +0 -12
- data/app/controllers/admin/pages_controller.rb +0 -251
- data/app/controllers/admin/pictures_controller.rb +0 -143
- data/app/controllers/admin/trash_controller.rb +0 -28
- data/app/controllers/admin/users_controller.rb +0 -73
- data/app/controllers/admin_controller.rb +0 -76
- data/app/controllers/alchemy_controller.rb +0 -245
- data/app/controllers/attachments_controller.rb +0 -28
- data/app/controllers/elements_controller.rb +0 -16
- data/app/controllers/messages_controller.rb +0 -113
- data/app/controllers/pages_controller.rb +0 -150
- data/app/controllers/pictures_controller.rb +0 -63
- data/app/helpers/admin/attachments_helper.rb +0 -7
- data/app/helpers/admin/elements_helper.rb +0 -112
- data/app/helpers/admin/pages_helper.rb +0 -38
- data/app/helpers/admin/pictures_helper.rb +0 -26
- data/app/helpers/alchemy_helper.rb +0 -379
- data/app/helpers/contents_helper.rb +0 -69
- data/app/helpers/elements_helper.rb +0 -170
- data/app/helpers/essences_helper.rb +0 -167
- data/app/helpers/layout_helper.rb +0 -37
- data/app/helpers/pages_helper.rb +0 -503
- data/app/mailers/messages.rb +0 -15
- data/app/mailers/notifications.rb +0 -23
- data/app/models/attachment.rb +0 -80
- data/app/models/cell.rb +0 -59
- data/app/models/content.rb +0 -145
- data/app/models/element.rb +0 -476
- data/app/models/essence_audio.rb +0 -17
- data/app/models/essence_date.rb +0 -20
- data/app/models/essence_file.rb +0 -17
- data/app/models/essence_flash.rb +0 -15
- data/app/models/essence_html.rb +0 -19
- data/app/models/essence_picture.rb +0 -27
- data/app/models/essence_richtext.rb +0 -61
- data/app/models/essence_text.rb +0 -38
- data/app/models/essence_video.rb +0 -17
- data/app/models/folded_page.rb +0 -3
- data/app/models/language.rb +0 -83
- data/app/models/message.rb +0 -69
- data/app/models/page.rb +0 -545
- data/app/models/picture.rb +0 -98
- data/app/models/user.rb +0 -70
- data/app/models/user_session.rb +0 -10
- data/app/sweepers/content_sweeper.rb +0 -20
- data/app/sweepers/pages_sweeper.rb +0 -47
- data/app/sweepers/pictures_sweeper.rb +0 -21
- data/app/views/_contact.html.erb +0 -3
- data/app/views/_intro.html.erb +0 -3
- data/app/views/_news.html.erb +0 -3
- data/app/views/_search.html.erb +0 -3
- data/app/views/_standard.html.erb +0 -1
- data/app/views/admin/attachments/_files_list.html.erb +0 -24
- data/app/views/admin/attachments/index.html.erb +0 -30
- data/app/views/admin/clipboard/index.html.erb +0 -19
- data/app/views/admin/clipboard/insert.js.erb +0 -14
- data/app/views/admin/clipboard/remove.js.erb +0 -10
- data/app/views/admin/elements/_new_element_form.html.erb +0 -25
- data/app/views/admin/elements/new.html.erb +0 -33
- data/app/views/admin/index.html.erb +0 -102
- data/app/views/admin/infos.html.erb +0 -5
- data/app/views/admin/languages/_form.html.erb +0 -34
- data/app/views/admin/languages/_language.html.erb +0 -35
- data/app/views/admin/languages/destroy.js.erb +0 -1
- data/app/views/admin/languages/index.html.erb +0 -41
- data/app/views/admin/layoutpages/index.html.erb +0 -75
- data/app/views/admin/leave.html.erb +0 -11
- data/app/views/admin/login.html.erb +0 -46
- data/app/views/admin/logout.html.erb +0 -5
- data/app/views/admin/pages/_create_language_form.html.erb +0 -43
- data/app/views/admin/pages/configure.html.erb +0 -71
- data/app/views/admin/pages/edit.html.erb +0 -185
- data/app/views/admin/pages/flush.js.erb +0 -2
- data/app/views/admin/pages/index.html.erb +0 -108
- data/app/views/admin/pages/locked.html.erb +0 -3
- data/app/views/admin/partials/_mainnavigation_entry.html.erb +0 -27
- data/app/views/admin/partials/_pagination_links.html.erb +0 -5
- data/app/views/admin/partials/_per_page_links.html.erb +0 -17
- data/app/views/admin/partials/_sub_navigation.html.erb +0 -14
- data/app/views/admin/partials/_upload_form.html.erb +0 -119
- data/app/views/admin/pictures/_pictures_list.html.erb +0 -12
- data/app/views/admin/pictures/index.html.erb +0 -89
- data/app/views/admin/pictures/show_in_window.html.erb +0 -1
- data/app/views/admin/signup.html.erb +0 -16
- data/app/views/admin/users/_table.html.erb +0 -54
- data/app/views/admin/users/index.html.erb +0 -41
- data/app/views/alchemy/error_notice.js.erb +0 -1
- data/app/views/alchemy/permission_denied.js.erb +0 -2
- data/app/views/elements/_searchresult_editor.html.erb +0 -1
- data/app/views/elements/_searchresult_view.html.erb +0 -49
- data/app/views/elements/_sitemap_editor.html.erb +0 -3
- data/app/views/elements/show.html.erb +0 -6
- data/app/views/essences/_essence_audio_editor.html.erb +0 -1
- data/app/views/essences/_essence_flash_editor.html.erb +0 -1
- data/app/views/essences/_essence_richtext_editor.html.erb +0 -9
- data/app/views/essences/_essence_video_editor.html.erb +0 -1
- data/app/views/layouts/login.html.erb +0 -59
- data/app/views/layouts/pages.html.erb +0 -29
- data/app/views/notifications/admin_user_created.text.erb +0 -13
- data/app/views/notifications/registered_user_created.text.erb +0 -10
- data/app/views/page_layouts/_newsletter_layout.html.erb +0 -1
- data/config/initializers/authorization.rb +0 -4
- data/config/initializers/fast_gettext.rb +0 -3
- data/config/locales/de.yml +0 -377
- data/config/locales/en.yml +0 -371
- data/lib/alchemy/controller.rb +0 -79
- data/lib/rails/generators/alchemy/plugin/templates/gettext.rb +0 -2
- data/lib/tasks/gettext.rake +0 -120
- data/lib/translation_extras/alchemy_core_modules.rb +0 -11
- data/locale/alchemy.pot +0 -1749
- data/locale/de/alchemy.po +0 -1795
- data/locale/en/alchemy.po +0 -1745
- data/locale/missing_translations.rb +0 -4
- data/locale/model_attributes.rb +0 -56
- data/spec/helpers/contents_helper_spec.rb +0 -27
- data/vendor/assets/javascripts/jquery-1.6.2.min.js +0 -18
- data/vendor/assets/javascripts/jquery-ui-custom-1.8.16.min.js +0 -550
- data/vendor/assets/javascripts/swfupload/fileprogress.js +0 -203
- data/vendor/assets/javascripts/swfupload/handlers.js +0 -171
- data/vendor/assets/javascripts/tiny_mce/jquery.tinymce.js +0 -1
data/app/models/essence_audio.rb
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
class EssenceAudio < ActiveRecord::Base
|
|
2
|
-
|
|
3
|
-
acts_as_essence(
|
|
4
|
-
:ingredient_column => :attachment,
|
|
5
|
-
:preview_text_method => :name
|
|
6
|
-
)
|
|
7
|
-
|
|
8
|
-
belongs_to :attachment
|
|
9
|
-
|
|
10
|
-
# Saves the ingredient
|
|
11
|
-
def save_ingredient(params, options = {})
|
|
12
|
-
return true if params.blank?
|
|
13
|
-
self.attachment_id = params["attachment_id"].to_s
|
|
14
|
-
self.save
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
end
|
data/app/models/essence_date.rb
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
class EssenceDate < ActiveRecord::Base
|
|
2
|
-
|
|
3
|
-
acts_as_essence(
|
|
4
|
-
:ingredient_column => :date
|
|
5
|
-
)
|
|
6
|
-
|
|
7
|
-
# Returns self.date for the Element#preview_text method.
|
|
8
|
-
def preview_text(foo=nil)
|
|
9
|
-
return "" if date.blank?
|
|
10
|
-
I18n.l(date)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
# Saves the ingredient
|
|
14
|
-
def save_ingredient(params, options = {})
|
|
15
|
-
return true if params.blank?
|
|
16
|
-
self.date = DateTime.parse(params['date'].values.join('-'))
|
|
17
|
-
self.save
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
end
|
data/app/models/essence_file.rb
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
class EssenceFile < ActiveRecord::Base
|
|
2
|
-
|
|
3
|
-
acts_as_essence(
|
|
4
|
-
:ingredient_column => :attachment,
|
|
5
|
-
:preview_text_method => :name
|
|
6
|
-
)
|
|
7
|
-
|
|
8
|
-
belongs_to :attachment
|
|
9
|
-
|
|
10
|
-
# Saves the ingredient
|
|
11
|
-
def save_ingredient(params, options = {})
|
|
12
|
-
return true if params.blank?
|
|
13
|
-
self.attachment_id = params["attachment_id"].to_s
|
|
14
|
-
self.save
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
end
|
data/app/models/essence_flash.rb
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
class EssenceFlash < ActiveRecord::Base
|
|
2
|
-
|
|
3
|
-
acts_as_essence(
|
|
4
|
-
:ingredient_column => :attachment,
|
|
5
|
-
:preview_text_method => :name
|
|
6
|
-
)
|
|
7
|
-
|
|
8
|
-
# Saves the ingredient
|
|
9
|
-
def save_ingredient(params, options = {})
|
|
10
|
-
return true if params.blank?
|
|
11
|
-
self.attachment_id = params["attachment_id"].to_s
|
|
12
|
-
self.save
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
end
|
data/app/models/essence_html.rb
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
class EssenceHtml < ActiveRecord::Base
|
|
2
|
-
|
|
3
|
-
acts_as_essence(
|
|
4
|
-
:ingredient_column => :source
|
|
5
|
-
)
|
|
6
|
-
|
|
7
|
-
# Returns the first x (default = 30) (HTML escaped) characters from self.source for the Element#preview_text method.
|
|
8
|
-
def preview_text(maxlength = 30)
|
|
9
|
-
CGI.escapeHTML(source.to_s)[0..maxlength]
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
# Saves the ingredient
|
|
13
|
-
def save_ingredient(params, options = {})
|
|
14
|
-
return true if params.blank?
|
|
15
|
-
self.source = params["source"].to_s
|
|
16
|
-
self.save
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
end
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
class EssencePicture < ActiveRecord::Base
|
|
2
|
-
|
|
3
|
-
acts_as_essence(
|
|
4
|
-
:ingredient_column => :picture,
|
|
5
|
-
:preview_text_method => :name
|
|
6
|
-
)
|
|
7
|
-
|
|
8
|
-
belongs_to :picture
|
|
9
|
-
before_save :replace_newlines
|
|
10
|
-
|
|
11
|
-
def replace_newlines
|
|
12
|
-
return nil if caption.nil?
|
|
13
|
-
caption.gsub!(/(\r\n|\r|\n)/, "<br/>")
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
# Saves the ingredient
|
|
17
|
-
def save_ingredient(params, options = {})
|
|
18
|
-
return true if params.blank?
|
|
19
|
-
self.link_class_name = params['link_class_name']
|
|
20
|
-
self.link_target = params['link_target']
|
|
21
|
-
self.link = params['link']
|
|
22
|
-
self.link_title = params['link_title']
|
|
23
|
-
self.picture_id = params['picture_id']
|
|
24
|
-
self.save
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
end
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
class EssenceRichtext < ActiveRecord::Base
|
|
2
|
-
|
|
3
|
-
acts_as_essence(
|
|
4
|
-
:preview_text_column => :stripped_body
|
|
5
|
-
)
|
|
6
|
-
|
|
7
|
-
# Require acts_as_ferret only if Ferret full text search is enabled (default).
|
|
8
|
-
# You can disable it in +config/alchemy/config.yml+
|
|
9
|
-
if Alchemy::Config.get(:ferret) == true
|
|
10
|
-
require 'acts_as_ferret'
|
|
11
|
-
acts_as_ferret(
|
|
12
|
-
:fields => {
|
|
13
|
-
:stripped_body => {:store => :yes}
|
|
14
|
-
},
|
|
15
|
-
:remote => false
|
|
16
|
-
)
|
|
17
|
-
before_save :check_ferret_indexing
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
before_save :strip_content
|
|
21
|
-
|
|
22
|
-
# Saves the ingredient
|
|
23
|
-
def save_ingredient(params, options = {})
|
|
24
|
-
return true if params.blank?
|
|
25
|
-
self.body = params['body'].to_s
|
|
26
|
-
self.public = options[:public]
|
|
27
|
-
self.save
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
private
|
|
31
|
-
|
|
32
|
-
def strip_content
|
|
33
|
-
self.stripped_body = strip_tags(self.body)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def check_ferret_indexing
|
|
37
|
-
if self.do_not_index
|
|
38
|
-
self.disable_ferret(:always)
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
# Stripping HTML Tags and only returns plain text.
|
|
43
|
-
def strip_tags(html)
|
|
44
|
-
return html if html.blank?
|
|
45
|
-
if html.index("<")
|
|
46
|
-
text = ""
|
|
47
|
-
tokenizer = HTML::Tokenizer.new(html)
|
|
48
|
-
while token = tokenizer.next
|
|
49
|
-
node = HTML::Node.parse(nil, 0, 0, token, false)
|
|
50
|
-
# result is only the content of any Text nodes
|
|
51
|
-
text << node.to_s if node.class == HTML::Text
|
|
52
|
-
end
|
|
53
|
-
# strip any comments, and if they have a newline at the end (ie. line with
|
|
54
|
-
# only a comment) strip that too
|
|
55
|
-
text.gsub(/<!--(.*?)-->[\n]?/m, "")
|
|
56
|
-
else
|
|
57
|
-
html # already plain text
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
end
|
data/app/models/essence_text.rb
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
class EssenceText < ActiveRecord::Base
|
|
2
|
-
|
|
3
|
-
acts_as_essence
|
|
4
|
-
|
|
5
|
-
# Require acts_as_ferret only if Ferret full text search is enabled (default).
|
|
6
|
-
# You can disable it in +config/alchemy/config.yml+
|
|
7
|
-
if Alchemy::Config.get(:ferret) == true
|
|
8
|
-
require 'acts_as_ferret'
|
|
9
|
-
acts_as_ferret(
|
|
10
|
-
:fields => {
|
|
11
|
-
:body => {:store => :yes}
|
|
12
|
-
},
|
|
13
|
-
:remote => false
|
|
14
|
-
)
|
|
15
|
-
before_save :check_ferret_indexing
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# Saves the content from params
|
|
19
|
-
def save_ingredient(params, options = {})
|
|
20
|
-
return true if params.blank?
|
|
21
|
-
self.body = params["body"]
|
|
22
|
-
self.link = params["link"]
|
|
23
|
-
self.link_title = params["link_title"]
|
|
24
|
-
self.link_class_name = params["link_class_name"]
|
|
25
|
-
self.link_target = params["link_target"]
|
|
26
|
-
self.public = options[:public]
|
|
27
|
-
self.save
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
private
|
|
31
|
-
|
|
32
|
-
def check_ferret_indexing
|
|
33
|
-
if self.do_not_index
|
|
34
|
-
self.disable_ferret(:always)
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
end
|
data/app/models/essence_video.rb
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
class EssenceVideo < ActiveRecord::Base
|
|
2
|
-
|
|
3
|
-
acts_as_essence(
|
|
4
|
-
:ingredient_column => :attachment,
|
|
5
|
-
:preview_text_method => :name
|
|
6
|
-
)
|
|
7
|
-
|
|
8
|
-
belongs_to :attachment
|
|
9
|
-
|
|
10
|
-
# Saves the ingredient
|
|
11
|
-
def save_ingredient(params, options = {})
|
|
12
|
-
return true if params.blank?
|
|
13
|
-
self.attachment_id = params["attachment_id"].to_s
|
|
14
|
-
self.save
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
end
|
data/app/models/folded_page.rb
DELETED
data/app/models/language.rb
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
class Language < ActiveRecord::Base
|
|
2
|
-
|
|
3
|
-
validates_presence_of :name
|
|
4
|
-
validates_presence_of :code
|
|
5
|
-
validates_presence_of :page_layout
|
|
6
|
-
validates_presence_of :frontpage_name
|
|
7
|
-
validates_uniqueness_of :code
|
|
8
|
-
validate :presence_of_default_language
|
|
9
|
-
validate :publicity_of_default_language
|
|
10
|
-
has_many :pages
|
|
11
|
-
after_destroy :delete_language_root_page
|
|
12
|
-
validates_format_of :code, :with => /^[a-z]{2}$/
|
|
13
|
-
before_destroy :check_for_default
|
|
14
|
-
after_update :set_pages_language, :if => proc { |m| m.code_changed? }
|
|
15
|
-
before_save :remove_old_default, :if => proc { |m| m.default_changed? && m != Language.get_default }
|
|
16
|
-
|
|
17
|
-
scope :published, where(:public => true)
|
|
18
|
-
|
|
19
|
-
def self.all_for_created_language_trees
|
|
20
|
-
find(Page.language_roots.collect(&:language_id))
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def self.all_codes_for_published
|
|
24
|
-
self.published.collect(&:code)
|
|
25
|
-
rescue
|
|
26
|
-
[]
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def self.get_default
|
|
30
|
-
self.find_by_default(true)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def label(attrib)
|
|
34
|
-
if attrib.to_sym == :code
|
|
35
|
-
self.code
|
|
36
|
-
else
|
|
37
|
-
I18n.t("name", :scope => "alchemy.languages.#{self.code}", :default => self.name)
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
private
|
|
42
|
-
|
|
43
|
-
def publicity_of_default_language
|
|
44
|
-
if self.default? && !self.public?
|
|
45
|
-
errors.add(:base, N_("Defaut language has to be public"))
|
|
46
|
-
return false
|
|
47
|
-
else
|
|
48
|
-
return true
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def presence_of_default_language
|
|
53
|
-
if Language.get_default == self && self.default_changed?
|
|
54
|
-
errors.add(:base, N_("we_need_at_least_one_default"))
|
|
55
|
-
return false
|
|
56
|
-
else
|
|
57
|
-
return true
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def remove_old_default
|
|
62
|
-
lang = Language.get_default
|
|
63
|
-
return true if lang.nil?
|
|
64
|
-
lang.default = false
|
|
65
|
-
lang.save(false)
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
def set_pages_language
|
|
69
|
-
pages.map { |page| page.language_code = self.code; page.save(false) }
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def check_for_default
|
|
73
|
-
raise "Default language not deletable" if self.default?
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
def delete_language_root_page
|
|
77
|
-
page = Page.language_root_for(id)
|
|
78
|
-
page.destroy if page
|
|
79
|
-
layoutroot = Page.layout_root_for(id)
|
|
80
|
-
layoutroot.destroy if layoutroot
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
end
|
data/app/models/message.rb
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
# This is a tableless model only used for validating Contactform Fields.
|
|
2
|
-
# You can specify the fields for your contactform in the config/alchemy/config.yml file in the :mailer options
|
|
3
|
-
#
|
|
4
|
-
# === Options:
|
|
5
|
-
#
|
|
6
|
-
# - form_layout_name: A Alchemy::PageLayout name (String). Used to render the contactform on a page with this layout.
|
|
7
|
-
#
|
|
8
|
-
# === Validating fields:
|
|
9
|
-
#
|
|
10
|
-
# Pass the field name as symbol and a message_id (will be translated) to :validate_fields:
|
|
11
|
-
#
|
|
12
|
-
# === Translating the validation messages:
|
|
13
|
-
#
|
|
14
|
-
# Validationmessages will be send to +I18n.t+ method with the scope +"alchemy.contactform.validations.#{field[1][:message].to_s}"+.
|
|
15
|
-
# So a +name+ field with the validation message_id +blank_name+ will be available for translation in your locale files like:
|
|
16
|
-
#
|
|
17
|
-
# de:
|
|
18
|
-
# contactform:
|
|
19
|
-
# validations:
|
|
20
|
-
# blank_name: 'Bitte geben Sie Ihren Namen an'
|
|
21
|
-
#
|
|
22
|
-
# === Example Contactform Configuration:
|
|
23
|
-
#
|
|
24
|
-
# :mailer:
|
|
25
|
-
# :form_layout_name: contact
|
|
26
|
-
# :fields: [subject, name, email, message, info]
|
|
27
|
-
# :validate_fields:
|
|
28
|
-
# :name:
|
|
29
|
-
# :message: blank_name
|
|
30
|
-
# :email:
|
|
31
|
-
# :message: blank_email
|
|
32
|
-
|
|
33
|
-
class Message
|
|
34
|
-
|
|
35
|
-
@@config = Alchemy::Config.get(:mailer)
|
|
36
|
-
|
|
37
|
-
extend ActiveModel::Naming
|
|
38
|
-
include ActiveModel::Validations
|
|
39
|
-
include ActiveModel::Conversion
|
|
40
|
-
|
|
41
|
-
attr_accessor :contact_form_id, :ip
|
|
42
|
-
@@config[:fields].each do |field|
|
|
43
|
-
attr_accessor field.to_sym
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
@@config[:validate_fields].each do |field|
|
|
47
|
-
validates_presence_of field[0], :message => '^' + I18n.t(field[1][:message].to_s, :scope => "alchemy.contactform.validations")
|
|
48
|
-
if field[0].to_s.include?('email')
|
|
49
|
-
validates_format_of field[0], :with => Authlogic::Regex.email, :message => '^' + I18n.t('alchemy.contactform.validations.wrong_email_format'), :if => :email_is_filled
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def initialize(attributes = {})
|
|
54
|
-
attributes.keys.each do |a|
|
|
55
|
-
send("#{a}=", attributes[a])
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def persisted? #:nodoc:
|
|
60
|
-
false
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
private
|
|
64
|
-
|
|
65
|
-
def email_is_filled #:nodoc:
|
|
66
|
-
!email.blank?
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
end
|
data/app/models/page.rb
DELETED
|
@@ -1,545 +0,0 @@
|
|
|
1
|
-
# encoding: UTF-8
|
|
2
|
-
class Page < ActiveRecord::Base
|
|
3
|
-
|
|
4
|
-
RESERVED_PAGE_LAYOUTS = %w(rootpage)
|
|
5
|
-
RESERVED_URLNAMES = %w(admin messages)
|
|
6
|
-
|
|
7
|
-
acts_as_nested_set
|
|
8
|
-
stampable
|
|
9
|
-
|
|
10
|
-
has_many :folded_pages
|
|
11
|
-
has_many :cells, :dependent => :destroy
|
|
12
|
-
has_many :elements, :dependent => :destroy, :order => :position
|
|
13
|
-
has_and_belongs_to_many :to_be_sweeped_elements, :class_name => 'Element', :uniq => true
|
|
14
|
-
belongs_to :language
|
|
15
|
-
|
|
16
|
-
validates_presence_of :name, :message => N_("please enter a name")
|
|
17
|
-
validates_presence_of :page_layout, :message => N_("Please choose a page layout.")
|
|
18
|
-
validates_presence_of :parent_id, :message => N_("No parent page was given."), :unless => :rootpage?
|
|
19
|
-
validates_length_of :urlname, :minimum => 3, :too_short => N_("urlname_to_short"), :if => :urlname_entered?
|
|
20
|
-
validates_uniqueness_of :urlname, :message => N_("URL-Name already token"), :scope => 'language_id', :if => :urlname_entered?
|
|
21
|
-
validates :page_layout, :exclusion => { :in => RESERVED_PAGE_LAYOUTS, :message => N_("This page_layout name is reserved.") }, :unless => :rootpage?
|
|
22
|
-
validates :urlname, :exclusion => { :in => RESERVED_URLNAMES, :message => N_("This urlname is reserved.") }
|
|
23
|
-
|
|
24
|
-
attr_accessor :do_not_autogenerate
|
|
25
|
-
attr_accessor :do_not_sweep
|
|
26
|
-
attr_accessor :do_not_validate_language
|
|
27
|
-
|
|
28
|
-
before_save :set_url_name, :unless => Proc.new { |page| page.redirects_to_external? }
|
|
29
|
-
before_save :set_title, :unless => Proc.new { |page| page.redirects_to_external? }
|
|
30
|
-
before_save :set_language_code
|
|
31
|
-
after_create :autogenerate_elements, :unless => Proc.new { |page| page.do_not_autogenerate }
|
|
32
|
-
after_create :create_cells
|
|
33
|
-
after_save :set_restrictions_to_child_pages
|
|
34
|
-
|
|
35
|
-
scope :language_roots, where(:language_root => true)
|
|
36
|
-
scope :layoutpages, where(:layoutpage => true)
|
|
37
|
-
scope :all_locked, where(:locked => true)
|
|
38
|
-
scope :not_locked, where(:locked => false)
|
|
39
|
-
scope :visible, where(:visible => true)
|
|
40
|
-
scope :published, where(:public => true)
|
|
41
|
-
scope :accessable, where(:restricted => false)
|
|
42
|
-
scope :restricted, where(:restricted => true)
|
|
43
|
-
scope :public_language_roots, lambda {
|
|
44
|
-
where(:language_root => true).where("language_code IN ('#{Language.all_codes_for_published.join('\',\'')}')").where(:public => true)
|
|
45
|
-
}
|
|
46
|
-
scope :all_last_edited_from, lambda { |user| where(:updater_id => user.id).order('updated_at DESC').limit(5) }
|
|
47
|
-
|
|
48
|
-
# Returns all pages that have the given language_id
|
|
49
|
-
scope :with_language, lambda { |language_id| where(:language_id => language_id) }
|
|
50
|
-
|
|
51
|
-
# Returns all pages that are not locked and public.
|
|
52
|
-
# Used for flushing all page caches at once.
|
|
53
|
-
scope :flushables, public.not_locked
|
|
54
|
-
|
|
55
|
-
scope :contentpages, where("pages.layoutpage = 0 AND pages.parent_id IS NOT NULL")
|
|
56
|
-
|
|
57
|
-
# Finds selected elements from page.
|
|
58
|
-
#
|
|
59
|
-
# Options are:
|
|
60
|
-
#
|
|
61
|
-
# :only => Array of element names # Returns only elements with given names
|
|
62
|
-
# :except => Array of element names # Returns all elements except the ones with given names
|
|
63
|
-
# :count => Integer # Limit the count of returned elements
|
|
64
|
-
# :offset => Integer # Starts with an offset while returning elements
|
|
65
|
-
# :random => Boolean # Returning elements randomly shuffled
|
|
66
|
-
# :from_cell => Cell # Returning elements from given cell
|
|
67
|
-
#
|
|
68
|
-
# Returns only public elements by default.
|
|
69
|
-
# Pass true as second argument to get all elements.
|
|
70
|
-
#
|
|
71
|
-
def find_selected_elements(options = {}, show_non_public = false)
|
|
72
|
-
if options[:from_cell].class.name == 'Cell'
|
|
73
|
-
elements = options[:from_cell].elements
|
|
74
|
-
else
|
|
75
|
-
elements = self.elements
|
|
76
|
-
end
|
|
77
|
-
if !options[:only].blank?
|
|
78
|
-
elements = self.elements.named(options[:only])
|
|
79
|
-
elsif !options[:except].blank?
|
|
80
|
-
elements = self.elements.excluded(options[:except])
|
|
81
|
-
end
|
|
82
|
-
elements = elements.offset(options[:offset]).limit(options[:count])
|
|
83
|
-
elements = elements.order("RAND()") if options[:random]
|
|
84
|
-
if show_non_public
|
|
85
|
-
elements
|
|
86
|
-
else
|
|
87
|
-
elements.published
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
def find_elements(options = {}, show_non_public = false) #:nodoc:
|
|
92
|
-
# TODO: What is this? A Kind of proxy method? Why not rendering the elements directly if you already have them????
|
|
93
|
-
if !options[:collection].blank? && options[:collection].is_a?(Array)
|
|
94
|
-
return options[:collection]
|
|
95
|
-
else
|
|
96
|
-
find_selected_elements(options, show_non_public)
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
# Returns all elements that should be feeded via rss.
|
|
101
|
-
#
|
|
102
|
-
# Define feedable elements in your +page_layouts.yml+:
|
|
103
|
-
#
|
|
104
|
-
# - name: news
|
|
105
|
-
# feed: true
|
|
106
|
-
# feed_elements: [element_name, element_2_name]
|
|
107
|
-
#
|
|
108
|
-
def feed_elements
|
|
109
|
-
elements.find_all_by_name(definition['feed_elements'])
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
def elements_grouped_by_cells
|
|
113
|
-
group = ActiveSupport::OrderedHash.new
|
|
114
|
-
cells.each { |cell| group[cell] = cell.elements.not_trashed }
|
|
115
|
-
group[Cell.new({:name => 'for_other_elements'})] = elements.not_trashed.where(:cell_id => nil)
|
|
116
|
-
return group
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
# Finds the previous page on the same structure level. Otherwise it returns nil.
|
|
120
|
-
# Options:
|
|
121
|
-
# => :restricted => boolean (standard: nil) - next restricted page (true), skip restricted pages (false), ignore restriction (nil)
|
|
122
|
-
# => :public => boolean (standard: true) - next public page (true), skip public pages (false)
|
|
123
|
-
def previous_page(options = {})
|
|
124
|
-
default_options = {
|
|
125
|
-
:restricted => nil,
|
|
126
|
-
:public => true
|
|
127
|
-
}
|
|
128
|
-
options = default_options.merge(options)
|
|
129
|
-
find_next_or_previous_page("previous", options)
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
# Finds the next page on the same structure level. Otherwise it returns nil.
|
|
133
|
-
# Options:
|
|
134
|
-
# => :restricted => boolean (standard: nil) - next restricted page (true), skip restricted pages (false), ignore restriction (nil)
|
|
135
|
-
# => :public => boolean (standard: true) - next public page (true), skip public pages (false)
|
|
136
|
-
def next_page(options = {})
|
|
137
|
-
default_options = {
|
|
138
|
-
:restricted => nil,
|
|
139
|
-
:public => true
|
|
140
|
-
}
|
|
141
|
-
options = default_options.merge(options)
|
|
142
|
-
find_next_or_previous_page("next", options)
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
def find_first_public(page)
|
|
146
|
-
if(page.public == true)
|
|
147
|
-
return page
|
|
148
|
-
end
|
|
149
|
-
page.children.each do |child|
|
|
150
|
-
result = find_first_public(child)
|
|
151
|
-
if(result!=nil)
|
|
152
|
-
return result
|
|
153
|
-
end
|
|
154
|
-
end
|
|
155
|
-
return nil
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
def name_entered?
|
|
159
|
-
!self.name.blank?
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
def urlname_entered?
|
|
163
|
-
!self.urlname.blank?
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
def set_url_name
|
|
167
|
-
self.urlname = convert_url_name((self.urlname.blank? ? self.name : self.urlname))
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
def set_title
|
|
171
|
-
self.title = self.name
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
def show_in_navigation?
|
|
175
|
-
if visible?
|
|
176
|
-
return true
|
|
177
|
-
end
|
|
178
|
-
return false
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
def lock(user)
|
|
182
|
-
self.locked = true
|
|
183
|
-
self.locked_by = user.id
|
|
184
|
-
self.save(:validate => false)
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
def unlock
|
|
188
|
-
self.locked = false
|
|
189
|
-
self.locked_by = nil
|
|
190
|
-
self.do_not_sweep = true
|
|
191
|
-
self.save
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
def public_elements
|
|
195
|
-
self.elements.select{ |m| m.public? }
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
# Returns the name of the creator of this page.
|
|
199
|
-
def creator
|
|
200
|
-
@page_creator ||= User.find_by_id(creator_id)
|
|
201
|
-
return _('unknown') if @page_creator.nil?
|
|
202
|
-
@page_creator.name
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
# Returns the name of the last updater of this page.
|
|
206
|
-
def updater
|
|
207
|
-
@page_updater = User.find_by_id(updater_id)
|
|
208
|
-
return _('unknown') if @page_updater.nil?
|
|
209
|
-
@page_updater.name
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
# Returns the name of the user currently editing this page.
|
|
213
|
-
def current_editor
|
|
214
|
-
@current_editor = User.find_by_id(locked_by)
|
|
215
|
-
return _('unknown') if @current_editor.nil?
|
|
216
|
-
@current_editor.name
|
|
217
|
-
end
|
|
218
|
-
|
|
219
|
-
def locker
|
|
220
|
-
User.find_by_id(self.locked_by)
|
|
221
|
-
end
|
|
222
|
-
|
|
223
|
-
def fold(user_id, status)
|
|
224
|
-
folded_page = FoldedPage.find_or_create_by_user_id_and_page_id(user_id, self.id)
|
|
225
|
-
folded_page.update_attributes(:folded => status)
|
|
226
|
-
folded_page.save
|
|
227
|
-
end
|
|
228
|
-
|
|
229
|
-
def folded?(user_id)
|
|
230
|
-
folded_page = FoldedPage.find_by_user_id_and_page_id(user_id, self.id)
|
|
231
|
-
return false if folded_page.nil?
|
|
232
|
-
folded_page.folded
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
def elements_by_type type
|
|
236
|
-
elements.select{|m| type.include? m.name}
|
|
237
|
-
end
|
|
238
|
-
|
|
239
|
-
# Returns the translated explanation of seven the page stati.
|
|
240
|
-
# TODO: Let I18n do this!
|
|
241
|
-
def humanized_status
|
|
242
|
-
case self.status
|
|
243
|
-
when 0
|
|
244
|
-
then
|
|
245
|
-
return _('page_status_visible_public_locked')
|
|
246
|
-
when 1
|
|
247
|
-
then
|
|
248
|
-
return _('page_status_visible_unpublic_locked')
|
|
249
|
-
when 2
|
|
250
|
-
then
|
|
251
|
-
return _('page_status_invisible_public_locked')
|
|
252
|
-
when 3
|
|
253
|
-
then
|
|
254
|
-
return _('page_status_invisible_unpublic_locked')
|
|
255
|
-
when 4
|
|
256
|
-
then
|
|
257
|
-
return _('page_status_visible_public')
|
|
258
|
-
when 5
|
|
259
|
-
then
|
|
260
|
-
return _('page_status_visible_unpublic')
|
|
261
|
-
when 6
|
|
262
|
-
then
|
|
263
|
-
return _('page_status_invisible_public')
|
|
264
|
-
when 7
|
|
265
|
-
then
|
|
266
|
-
return _('page_status_invisible_unpublic')
|
|
267
|
-
end
|
|
268
|
-
end
|
|
269
|
-
|
|
270
|
-
# Returns the status code. Used by humanized_status and the page status icon inside the sitemap rendered by Pages.index.
|
|
271
|
-
def status
|
|
272
|
-
if self.locked
|
|
273
|
-
if self.public? && self.visible?
|
|
274
|
-
return 0
|
|
275
|
-
elsif !self.public? && self.visible?
|
|
276
|
-
return 1
|
|
277
|
-
elsif self.public? && !self.visible?
|
|
278
|
-
return 2
|
|
279
|
-
elsif !self.public? && !self.visible?
|
|
280
|
-
return 3
|
|
281
|
-
end
|
|
282
|
-
else
|
|
283
|
-
if self.public? && self.visible?
|
|
284
|
-
return 4
|
|
285
|
-
elsif !self.public? && self.visible?
|
|
286
|
-
return 5
|
|
287
|
-
elsif self.public? && !self.visible?
|
|
288
|
-
return 6
|
|
289
|
-
elsif !self.public? && !self.visible?
|
|
290
|
-
return 7
|
|
291
|
-
end
|
|
292
|
-
end
|
|
293
|
-
end
|
|
294
|
-
|
|
295
|
-
def has_controller?
|
|
296
|
-
!Alchemy::PageLayout.get(self.page_layout).nil? && !Alchemy::PageLayout.get(self.page_layout)["controller"].blank?
|
|
297
|
-
end
|
|
298
|
-
|
|
299
|
-
def controller_and_action
|
|
300
|
-
if self.has_controller?
|
|
301
|
-
{:controller => self.layout_description["controller"], :action => self.layout_description["action"]}
|
|
302
|
-
end
|
|
303
|
-
end
|
|
304
|
-
|
|
305
|
-
# Returns the self#page_layout description from config/alchemy/page_layouts.yml file.
|
|
306
|
-
def layout_description
|
|
307
|
-
description = Alchemy::PageLayout.get(self.page_layout)
|
|
308
|
-
if self.root?
|
|
309
|
-
return {}
|
|
310
|
-
elsif description.nil?
|
|
311
|
-
raise "Description could not be found for page layout named #{self.page_layout}. Please check page_layouts.yml file."
|
|
312
|
-
else
|
|
313
|
-
description
|
|
314
|
-
end
|
|
315
|
-
end
|
|
316
|
-
alias_method :definition, :layout_description
|
|
317
|
-
|
|
318
|
-
# Returns translated name of the pages page_layout value.
|
|
319
|
-
# Page layout names are defined inside the config/alchemy/page_layouts.yml file.
|
|
320
|
-
# Translate the name in your config/locales language yml file.
|
|
321
|
-
def layout_display_name
|
|
322
|
-
I18n.t("alchemy.page_layout_names.#{page_layout}", :default => page_layout.camelize)
|
|
323
|
-
end
|
|
324
|
-
|
|
325
|
-
def renamed?
|
|
326
|
-
self.name_was != self.name || self.urlname_was != self.urlname
|
|
327
|
-
end
|
|
328
|
-
|
|
329
|
-
def changed_publicity?
|
|
330
|
-
self.public_was != self.public
|
|
331
|
-
end
|
|
332
|
-
|
|
333
|
-
def set_restrictions_to_child_pages
|
|
334
|
-
return nil if self.restricted_was == self.restricted
|
|
335
|
-
descendants.each do |child|
|
|
336
|
-
child.restricted = restricted
|
|
337
|
-
child.save
|
|
338
|
-
end
|
|
339
|
-
end
|
|
340
|
-
|
|
341
|
-
def contains_feed?
|
|
342
|
-
definition["feed"]
|
|
343
|
-
end
|
|
344
|
-
|
|
345
|
-
# Returns true or false if the pages layout_description for config/alchemy/page_layouts.yml contains redirects_to_external: true
|
|
346
|
-
def redirects_to_external?
|
|
347
|
-
definition["redirects_to_external"]
|
|
348
|
-
end
|
|
349
|
-
|
|
350
|
-
# Returns an array of all pages currently locked by user
|
|
351
|
-
def self.all_locked_by(user)
|
|
352
|
-
find_all_by_locked_and_locked_by(true, user.id)
|
|
353
|
-
end
|
|
354
|
-
|
|
355
|
-
def first_public_child
|
|
356
|
-
self.children.where(:public => true).limit(1).first
|
|
357
|
-
end
|
|
358
|
-
|
|
359
|
-
def self.language_root_for(language_id)
|
|
360
|
-
self.language_roots.find_by_language_id(language_id)
|
|
361
|
-
end
|
|
362
|
-
|
|
363
|
-
# Creates a copy of source (a Page object) and does a copy of all elements depending to source.
|
|
364
|
-
# You can pass any kind of Page#attributes as a difference to source.
|
|
365
|
-
# Notice: It prevents the element auto_generator from running.
|
|
366
|
-
def self.copy(source, differences = {})
|
|
367
|
-
attributes = source.attributes.symbolize_keys.merge(differences)
|
|
368
|
-
attributes.merge!(
|
|
369
|
-
:do_not_autogenerate => true,
|
|
370
|
-
:do_not_sweep => true,
|
|
371
|
-
:visible => false,
|
|
372
|
-
:public => false,
|
|
373
|
-
:locked => false,
|
|
374
|
-
:locked_by => nil
|
|
375
|
-
)
|
|
376
|
-
page = self.new(attributes.except(["id", "updated_at", "created_at", "created_id", "updater_id"]))
|
|
377
|
-
if page.save
|
|
378
|
-
# copy the page´s cells
|
|
379
|
-
source.cells.each do |cell|
|
|
380
|
-
new_cell = Cell.create(:name => cell.name, :page_id => page.id)
|
|
381
|
-
end
|
|
382
|
-
# copy the page´s elements
|
|
383
|
-
source.elements.each do |element|
|
|
384
|
-
# detect cell for element
|
|
385
|
-
# if cell is nil also pass nil to element.cell_id
|
|
386
|
-
cell = nil
|
|
387
|
-
cell = page.cells.detect{ |c| c.name == element.cell.name } if element.cell
|
|
388
|
-
new_element = Element.copy(element, :page_id => page.id, :cell_id => (cell.blank? ? nil : cell.id))
|
|
389
|
-
new_element.move_to_bottom
|
|
390
|
-
end
|
|
391
|
-
return page
|
|
392
|
-
else
|
|
393
|
-
raise page.errors.full_messages
|
|
394
|
-
end
|
|
395
|
-
end
|
|
396
|
-
|
|
397
|
-
# Gets the language_root page for page
|
|
398
|
-
def get_language_root
|
|
399
|
-
return self if self.language_root
|
|
400
|
-
page = self
|
|
401
|
-
while page.parent do
|
|
402
|
-
page = page.parent
|
|
403
|
-
break if page.language_root?
|
|
404
|
-
end
|
|
405
|
-
return page
|
|
406
|
-
end
|
|
407
|
-
|
|
408
|
-
def self.layout_root_for(language_id)
|
|
409
|
-
where({:parent_id => Page.root.id, :layoutpage => true, :language_id => language_id}).limit(1).first
|
|
410
|
-
end
|
|
411
|
-
|
|
412
|
-
def self.find_or_create_layout_root_for(language_id)
|
|
413
|
-
layoutroot = layout_root_for(language_id)
|
|
414
|
-
return layoutroot if layoutroot
|
|
415
|
-
language = Language.find(language_id)
|
|
416
|
-
layoutroot = Page.new({
|
|
417
|
-
:name => "Layoutroot for #{language.name}",
|
|
418
|
-
:layoutpage => true,
|
|
419
|
-
:language => language,
|
|
420
|
-
:do_not_autogenerate => true
|
|
421
|
-
})
|
|
422
|
-
if layoutroot.save(false)
|
|
423
|
-
layoutroot.move_to_child_of(Page.root)
|
|
424
|
-
return layoutroot
|
|
425
|
-
else
|
|
426
|
-
raise "Layout root for #{language.name} could not be created"
|
|
427
|
-
end
|
|
428
|
-
end
|
|
429
|
-
|
|
430
|
-
def self.all_from_clipboard(clipboard)
|
|
431
|
-
return [] if clipboard.blank?
|
|
432
|
-
self.find_all_by_id(clipboard.collect { |i| i[:id] })
|
|
433
|
-
end
|
|
434
|
-
|
|
435
|
-
def self.all_from_clipboard_for_select(clipboard, language_id, layoutpage = false)
|
|
436
|
-
return [] if clipboard.blank?
|
|
437
|
-
clipboard_pages = self.all_from_clipboard(clipboard)
|
|
438
|
-
allowed_page_layouts = Alchemy::PageLayout.selectable_layouts(language_id, layoutpage)
|
|
439
|
-
allowed_page_layout_names = allowed_page_layouts.collect{ |p| p['name'] }
|
|
440
|
-
clipboard_pages.select { |cp| allowed_page_layout_names.include?(cp.page_layout) }
|
|
441
|
-
end
|
|
442
|
-
|
|
443
|
-
def copy_children_to(new_parent)
|
|
444
|
-
self.children.each do |child|
|
|
445
|
-
next if child == new_parent
|
|
446
|
-
new_child = Page.copy(child, {
|
|
447
|
-
:language_id => new_parent.language_id,
|
|
448
|
-
:language_code => new_parent.language_code,
|
|
449
|
-
:name => child.name + ' (' + _('Copy') + ')',
|
|
450
|
-
:urlname => '',
|
|
451
|
-
:title => ''
|
|
452
|
-
})
|
|
453
|
-
new_child.move_to_child_of(new_parent)
|
|
454
|
-
child.copy_children_to(new_child) unless child.children.blank?
|
|
455
|
-
end
|
|
456
|
-
end
|
|
457
|
-
|
|
458
|
-
# Returns true or false if the page has a page_layout that has cells.
|
|
459
|
-
def can_have_cells?
|
|
460
|
-
!definition['cells'].blank?
|
|
461
|
-
end
|
|
462
|
-
|
|
463
|
-
def has_cells?
|
|
464
|
-
cells.any?
|
|
465
|
-
end
|
|
466
|
-
|
|
467
|
-
def self.link_target_options
|
|
468
|
-
options = [
|
|
469
|
-
[I18n.t('default', :scope => 'alchemy.link_target_options'), '']
|
|
470
|
-
]
|
|
471
|
-
link_target_options = Alchemy::Config.get(:link_target_options)
|
|
472
|
-
link_target_options.each do |option|
|
|
473
|
-
options << [I18n.t(option, :scope => 'alchemy.link_target_options'), option]
|
|
474
|
-
end
|
|
475
|
-
options
|
|
476
|
-
end
|
|
477
|
-
|
|
478
|
-
def locker_name
|
|
479
|
-
return N_('unknown') if self.locker.nil?
|
|
480
|
-
self.locker.name
|
|
481
|
-
end
|
|
482
|
-
|
|
483
|
-
# is the curent object the main rootpage?
|
|
484
|
-
def rootpage?
|
|
485
|
-
(self.page_layout == "rootpage") && self.parent_id.blank?
|
|
486
|
-
end
|
|
487
|
-
|
|
488
|
-
def self.rootpage
|
|
489
|
-
where(:page_layout => 'rootpage').where(:parent_id => nil).first
|
|
490
|
-
end
|
|
491
|
-
|
|
492
|
-
private
|
|
493
|
-
|
|
494
|
-
def find_next_or_previous_page(direction = "next", options = {})
|
|
495
|
-
if direction == "previous"
|
|
496
|
-
step_direction = ["pages.lft < ?", self.lft]
|
|
497
|
-
order_direction = "lft DESC"
|
|
498
|
-
else
|
|
499
|
-
step_direction = ["pages.lft > ?", self.lft]
|
|
500
|
-
order_direction = "lft"
|
|
501
|
-
end
|
|
502
|
-
conditions = Page.merge_conditions(
|
|
503
|
-
{:parent_id => self.parent_id},
|
|
504
|
-
{:public => options[:public]},
|
|
505
|
-
step_direction
|
|
506
|
-
)
|
|
507
|
-
if !options[:restricted].nil?
|
|
508
|
-
conditions = Page.merge_conditions(conditions, {:restricted => options[:restricted]})
|
|
509
|
-
end
|
|
510
|
-
return Page.where(conditions).order(order_direction).limit(1)
|
|
511
|
-
end
|
|
512
|
-
|
|
513
|
-
# Converts the given nbame into an url friendly string
|
|
514
|
-
# Names shorter than 3 will be filled with dashes, so it does not collidate with the language code.
|
|
515
|
-
def convert_url_name(name)
|
|
516
|
-
url_name = name.gsub(/[äÄ]/, 'ae').gsub(/[üÜ]/, 'ue').gsub(/[öÖ]/, 'oe').parameterize
|
|
517
|
-
url_name = ('-' * (3 - url_name.length)) + url_name if url_name.length < 3
|
|
518
|
-
return url_name
|
|
519
|
-
end
|
|
520
|
-
|
|
521
|
-
# Looks in the layout_descripion, if there are elements to autogenerate.
|
|
522
|
-
# If so, it generates them.
|
|
523
|
-
def autogenerate_elements
|
|
524
|
-
elements = self.layout_description["autogenerate"]
|
|
525
|
-
unless (elements.blank?)
|
|
526
|
-
elements.each do |element|
|
|
527
|
-
element = Element.create_from_scratch({'page_id' => self.id, 'name' => element})
|
|
528
|
-
element.move_to_bottom if element
|
|
529
|
-
end
|
|
530
|
-
end
|
|
531
|
-
end
|
|
532
|
-
|
|
533
|
-
def set_language_code
|
|
534
|
-
return false if self.language.blank?
|
|
535
|
-
self.language_code = self.language.code
|
|
536
|
-
end
|
|
537
|
-
|
|
538
|
-
def create_cells
|
|
539
|
-
return false if !can_have_cells?
|
|
540
|
-
definition['cells'].each do |cellname|
|
|
541
|
-
cells.create({:name => cellname})
|
|
542
|
-
end
|
|
543
|
-
end
|
|
544
|
-
|
|
545
|
-
end
|