alchemy_cms 2.2.4 → 2.3.rc5
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 +1 -1
- data/.travis.yml +3 -4
- data/Gemfile +1 -0
- data/README.md +10 -6
- data/alchemy_cms.gemspec +5 -2
- data/app/assets/images/alchemy/icons.png +0 -0
- data/app/assets/images/sassy-ie-overlay.png +0 -0
- data/app/assets/javascripts/alchemy/alchemy.base.js +50 -59
- data/app/assets/javascripts/alchemy/alchemy.buttons.js +14 -4
- data/app/assets/javascripts/alchemy/alchemy.datepicker.js +8 -2
- data/app/assets/javascripts/alchemy/alchemy.elements_window.js +11 -3
- data/app/assets/javascripts/alchemy/alchemy.gui.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.link_overlay.js.coffee +14 -1
- data/app/assets/javascripts/alchemy/alchemy.preview.js +1 -1
- data/app/assets/javascripts/alchemy/alchemy.preview_window.js +12 -4
- data/app/assets/javascripts/alchemy/alchemy.uploader.js +4 -1
- data/app/assets/javascripts/alchemy/alchemy.windows.js +18 -8
- data/app/assets/stylesheets/alchemy/_defaults.scss +84 -120
- data/app/assets/stylesheets/alchemy/alchemy.css +2 -2
- data/app/assets/stylesheets/alchemy/archive.css.scss +288 -0
- data/app/assets/stylesheets/alchemy/base.css.scss +95 -390
- data/app/assets/stylesheets/alchemy/dashboard.css.scss +4 -4
- data/app/assets/stylesheets/alchemy/elements.css.scss +83 -118
- data/app/assets/stylesheets/alchemy/flash.css.scss +1 -1
- data/app/assets/stylesheets/alchemy/form_elements.css.scss +528 -0
- data/app/assets/stylesheets/alchemy/frame.css.scss +13 -39
- data/app/assets/stylesheets/alchemy/icons.css.scss +217 -228
- data/app/assets/stylesheets/alchemy/jquery-ui.alchemy.css.scss +48 -50
- data/app/assets/stylesheets/alchemy/jquery.Jcrop.css.scss +1 -1
- data/app/assets/stylesheets/alchemy/login.css.scss +1 -5
- data/app/assets/stylesheets/alchemy/menubar.css.scss +19 -29
- data/app/assets/stylesheets/alchemy/pagination.css.scss +3 -4
- data/app/assets/stylesheets/alchemy/sitemap.css.scss +81 -81
- data/app/assets/stylesheets/alchemy/tables.css.scss +63 -57
- data/app/assets/stylesheets/alchemy/tinymce_dialog.css.scss +57 -57
- data/app/assets/stylesheets/alchemy/upload.css.scss +6 -6
- data/app/assets/stylesheets/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css.scss +6 -10
- data/app/controllers/alchemy/admin/attachments_controller.rb +5 -4
- data/app/controllers/alchemy/admin/base_controller.rb +1 -9
- data/app/controllers/alchemy/admin/contents_controller.rb +4 -6
- data/app/controllers/alchemy/admin/elements_controller.rb +2 -2
- data/app/controllers/alchemy/admin/pages_controller.rb +2 -2
- data/app/controllers/alchemy/admin/pictures_controller.rb +74 -15
- data/app/controllers/alchemy/attachments_controller.rb +8 -2
- data/app/controllers/alchemy/base_controller.rb +47 -5
- data/app/controllers/alchemy/elements_controller.rb +1 -1
- data/app/controllers/alchemy/messages_controller.rb +12 -12
- data/app/controllers/alchemy/pages_controller.rb +5 -1
- data/app/controllers/alchemy/pictures_controller.rb +9 -4
- data/app/controllers/alchemy/user_sessions_controller.rb +2 -4
- data/app/helpers/alchemy/admin/base_helper.rb +98 -19
- data/app/helpers/alchemy/admin/contents_helper.rb +2 -2
- data/app/helpers/alchemy/admin/elements_helper.rb +2 -3
- data/app/helpers/alchemy/base_helper.rb +6 -5
- data/app/helpers/alchemy/elements_helper.rb +2 -2
- data/app/helpers/alchemy/essences_helper.rb +4 -5
- data/app/helpers/alchemy/pages_helper.rb +15 -79
- data/app/helpers/alchemy/url_helper.rb +67 -0
- data/app/mailers/alchemy/messages.rb +1 -1
- data/app/mailers/alchemy/notifications.rb +1 -1
- data/app/models/alchemy/attachment.rb +11 -2
- data/app/models/alchemy/cell.rb +20 -10
- data/app/models/alchemy/content.rb +4 -3
- data/app/models/alchemy/element.rb +170 -178
- data/app/models/alchemy/language/code.rb +4 -1
- data/app/models/alchemy/message.rb +19 -3
- data/app/models/alchemy/page.rb +45 -40
- data/app/models/alchemy/picture.rb +24 -2
- data/app/models/alchemy/user.rb +2 -3
- data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +12 -12
- data/app/views/alchemy/admin/attachments/_attachment.html.erb +1 -1
- data/app/views/alchemy/admin/attachments/create.js.erb +1 -0
- data/app/views/alchemy/admin/attachments/edit.html.erb +9 -3
- data/app/views/alchemy/admin/attachments/index.html.erb +3 -2
- data/app/views/alchemy/admin/contents/_missing.html.erb +1 -1
- data/app/views/alchemy/admin/contents/create.js.erb +54 -0
- data/app/views/alchemy/admin/contents/new.html.erb +9 -4
- data/app/views/alchemy/admin/elements/{_add_content.html.erb → _add_picture.html.erb} +4 -4
- data/app/views/alchemy/admin/elements/_elements_select.html.erb +2 -1
- data/app/views/alchemy/admin/elements/_new_element_form.html.erb +1 -1
- data/app/views/alchemy/admin/elements/{_picture_editor.html.erb → _picture_gallery_editor.html.erb} +7 -11
- data/app/views/alchemy/admin/elements/fold.js.erb +46 -0
- data/app/views/alchemy/admin/elements/index.html.erb +24 -24
- data/app/views/alchemy/admin/elements/list.js.erb +11 -9
- data/app/views/alchemy/admin/essence_files/assign.js.erb +3 -1
- data/app/views/alchemy/admin/essence_pictures/destroy.js.erb +28 -0
- data/app/views/alchemy/admin/pages/_contactform_links.html.erb +8 -6
- data/app/views/alchemy/admin/pages/_external_link.html.erb +11 -9
- data/app/views/alchemy/admin/pages/_file_link.html.erb +10 -8
- data/app/views/alchemy/admin/pages/_internal_link.html.erb +14 -10
- data/app/views/alchemy/admin/pages/_new_page_form.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_page.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_page_for_links.html.erb +32 -21
- data/app/views/alchemy/admin/pages/configure.html.erb +2 -2
- data/app/views/alchemy/admin/pages/configure_external.html.erb +13 -13
- data/app/views/alchemy/admin/pages/edit.html.erb +2 -2
- data/app/views/alchemy/admin/pages/index.html.erb +26 -24
- data/app/views/alchemy/admin/pages/link.html.erb +2 -5
- data/app/views/alchemy/admin/partials/_upload_form.html.erb +28 -12
- data/app/views/alchemy/admin/pictures/_archive.html.erb +54 -0
- data/app/views/alchemy/admin/pictures/_archive_overlay.html.erb +10 -7
- data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +21 -22
- data/app/views/alchemy/admin/pictures/_filter_bar.html.erb +31 -0
- data/app/views/alchemy/admin/pictures/_overlay_picture_list.html.erb +9 -0
- data/app/views/alchemy/admin/pictures/_picture.html.erb +36 -6
- data/app/views/alchemy/admin/pictures/_tag_list.html.erb +27 -0
- data/app/views/alchemy/admin/pictures/archive_overlay.js.erb +3 -1
- data/app/views/alchemy/admin/pictures/create.js.erb +4 -5
- data/app/views/alchemy/admin/pictures/edit.html.erb +26 -0
- data/app/views/alchemy/admin/pictures/edit_multiple.html.erb +39 -0
- data/app/views/alchemy/admin/pictures/index.html.erb +81 -70
- data/app/views/alchemy/admin/pictures/index.js.erb +3 -0
- data/app/views/alchemy/admin/pictures/new.html.erb +1 -0
- data/app/views/alchemy/admin/resources/index.html.erb +3 -1
- data/app/views/alchemy/admin/users/_table.html.erb +1 -1
- data/app/views/alchemy/admin/users/index.html.erb +27 -23
- data/app/views/alchemy/elements/_article_editor.html.erb +7 -2
- data/app/views/alchemy/elements/_bild_editor.html.erb +1 -1
- data/app/views/alchemy/elements/_bild_text_editor.html.erb +6 -1
- data/app/views/alchemy/elements/_bild_text_view.html.erb +3 -3
- data/app/views/alchemy/elements/_image_mosaic_editor.html.erb +1 -1
- data/app/views/alchemy/elements/_image_mosaic_view.html.erb +2 -2
- data/app/views/alchemy/elements/_intro_image_text_view.html.erb +4 -4
- data/app/views/alchemy/elements/_searchresult_editor.html.erb +4 -1
- data/app/views/alchemy/essences/_essence_boolean_editor.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_picture_editor.html.erb +2 -3
- data/app/views/alchemy/essences/_essence_picture_tools.html.erb +1 -1
- data/app/views/alchemy/search/_form.html.erb +8 -0
- data/app/views/alchemy/search/_result.html.erb +3 -2
- data/app/views/alchemy/search/_results.html.erb +28 -0
- data/app/views/alchemy/user_sessions/leave.html.erb +4 -4
- data/app/views/alchemy/user_sessions/login.html.erb +1 -2
- data/app/views/layouts/alchemy/admin.html.erb +30 -10
- data/app/views/layouts/alchemy/login.html.erb +2 -39
- data/config/alchemy/elements.yml +1 -2
- data/config/alchemy/page_layouts.yml +8 -5
- data/config/authorization_rules.rb +27 -18
- data/config/initializers/localeapp.rb +9 -0
- data/config/locales/alchemy.de.yml +93 -56
- data/config/locales/alchemy.en.yml +73 -50
- data/config/routes.rb +3 -1
- data/db/migrate/20120704181529_add_upload_hash_to_alchemy_picture.rb +5 -0
- data/db/migrate/20120705214247_acts_as_taggable_on_migration.rb +28 -0
- data/db/migrate/20120728185830_add_cached_tag_list_to_alchemy_pictures.rb +5 -0
- data/db/migrate/20120831135441_set_alchemy_languages_country_code_default_to_empty_string.rb +9 -0
- data/lib/alchemy/capistrano.rb +2 -2
- data/lib/alchemy/essence.rb +14 -0
- data/lib/alchemy/page_layout.rb +0 -6
- data/lib/alchemy/resource.rb +9 -15
- data/lib/alchemy/upgrader.rb +18 -3
- data/lib/alchemy/version.rb +5 -1
- data/lib/alchemy_cms.rb +4 -1
- data/lib/rails/generators/alchemy/deploy_script/deploy_script_generator.rb +16 -6
- data/lib/rails/generators/alchemy/deploy_script/templates/deploy.rb.tt +17 -3
- data/lib/rails/generators/alchemy/elements/elements_generator.rb +6 -1
- data/lib/rails/generators/alchemy/elements/templates/editor.html.erb +10 -1
- data/lib/rails/generators/alchemy/elements/templates/view.html.erb +17 -18
- data/lib/rails/generators/alchemy/scaffold/files/pages.html.erb +4 -2
- data/lib/tasks/fleximage.rake +2 -2
- data/spec/controllers/admin/contents_controller_spec.rb +2 -2
- data/spec/controllers/admin/elements_controller_spec.rb +30 -1
- data/spec/controllers/admin/pages_controller_spec.rb +35 -18
- data/spec/controllers/admin/trash_controller_spec.rb +40 -16
- data/spec/controllers/attachments_controller_spec.rb +62 -0
- data/spec/controllers/base_controller_spec.rb +43 -42
- data/spec/controllers/elements_controller_spec.rb +30 -0
- data/spec/controllers/pages_controller_spec.rb +22 -5
- data/spec/controllers/pictures_controller_spec.rb +82 -0
- data/spec/dummy/app/models/event.rb +2 -1
- data/spec/dummy/config/database.yml +3 -2
- data/spec/dummy/db/schema.rb +51 -27
- data/spec/factories.rb +29 -8
- data/spec/helpers/admin/base_helper_spec.rb +134 -21
- data/spec/helpers/admin/contents_helper_spec.rb +2 -2
- data/spec/helpers/admin/elements_helper_spec.rb +17 -9
- data/spec/helpers/admin/essences_helper_spec.rb +7 -6
- data/spec/helpers/essences_helper_spec.rb +8 -7
- data/spec/helpers/pages_helper_spec.rb +208 -325
- data/spec/helpers/url_helper_spec.rb +171 -0
- data/spec/integration/admin/link_overlay_spec.rb +53 -0
- data/spec/integration/admin/modules_integration_spec.rb +22 -26
- data/spec/integration/admin/pages_controller_spec.rb +10 -19
- data/spec/integration/admin/picture_library_integration_spec.rb +52 -0
- data/spec/integration/admin/resources_integration_spec.rb +68 -75
- data/spec/integration/pages_controller_spec.rb +70 -61
- data/spec/integration/security_spec.rb +3 -5
- data/spec/integration/translation_integration_spec.rb +56 -0
- data/spec/libraries/essence_spec.rb +18 -0
- data/spec/libraries/resource_spec.rb +101 -79
- data/spec/libraries/resources_helper_spec.rb +3 -0
- data/spec/models/content_spec.rb +63 -60
- data/spec/models/element_spec.rb +203 -93
- data/spec/models/language_spec.rb +90 -65
- data/spec/models/page_layout_spec.rb +37 -0
- data/spec/models/page_spec.rb +181 -113
- data/spec/models/picture_spec.rb +73 -26
- data/spec/models/resource_spec.rb +52 -23
- data/spec/support/alchemy/specs_helpers.rb +2 -0
- data/spec/support/image.png +0 -0
- data/spec/{helpers/url_helpers_spec.rb → url_helpers_spec.rb} +0 -0
- data/vendor/assets/javascripts/jquery_plugins/jquery.selectBoxIt.js +1909 -0
- data/vendor/assets/javascripts/jquery_plugins/preloadCssImages.jQuery_v5.js +152 -0
- metadata +106 -33
- data/app/assets/stylesheets/alchemy/buttons.css.scss +0 -361
- data/app/assets/stylesheets/alchemy/jquery.sb.css.scss +0 -260
- data/app/views/alchemy/admin/contents/create.js.coffee +0 -49
- data/app/views/alchemy/admin/elements/fold.js.coffee +0 -37
- data/app/views/alchemy/admin/essence_pictures/destroy.js.coffee +0 -19
- data/app/views/alchemy/admin/pictures/_pictures_list.html.erb +0 -16
- data/app/views/alchemy/admin/pictures/update.js.erb +0 -3
- data/spec/dummy/config/locales/en.yml +0 -5
- data/spec/dummy/config/locales/fo.yml +0 -5
- data/spec/page_layout_spec.rb +0 -35
- data/vendor/assets/javascripts/jquery_plugins/jquery.in-place-edit.js +0 -172
- data/vendor/assets/javascripts/jquery_plugins/jquery.sb.min.js +0 -14
|
@@ -74,10 +74,10 @@ en:
|
|
|
74
74
|
|
|
75
75
|
# == Translations for the build in full text search.
|
|
76
76
|
search_result_page:
|
|
77
|
-
|
|
77
|
+
result_page: Page
|
|
78
|
+
no_results: "Your search for '%{query}' offers no result"
|
|
78
79
|
result_heading: "Your search for '%{query}'"
|
|
79
80
|
result_count:
|
|
80
|
-
zero: 'Offers no results'
|
|
81
81
|
one: 'Offers one result'
|
|
82
82
|
other: 'Offers %{count} results'
|
|
83
83
|
|
|
@@ -177,6 +177,7 @@ en:
|
|
|
177
177
|
assign_file: "Assign a file"
|
|
178
178
|
assign_file_from_archive: "assign a file from your archive"
|
|
179
179
|
assign_image: "Assign an image"
|
|
180
|
+
attachment_filename_notice: "*) Please do not use any special characters for the filename."
|
|
180
181
|
auto_play: "Play movie after load"
|
|
181
182
|
big_thumbnails: "Big thumbnails"
|
|
182
183
|
choose_element_as_target: "Please choose an element as target"
|
|
@@ -186,6 +187,7 @@ en:
|
|
|
186
187
|
confirm_to_delete_file: "Do you really want to delete this file from the server?"
|
|
187
188
|
confirm_to_delete_image: "Do you really want to delete this image from server?"
|
|
188
189
|
confirm_to_delete_image_from_server: "Do you really want to delete this image from the server?"
|
|
190
|
+
confirm_to_delete_images_from_server: "Do you really want to delete these images from the server?"
|
|
189
191
|
confirm_to_delete_user: "Do you really want to delete this user?"
|
|
190
192
|
contactform_body: "Message Template"
|
|
191
193
|
content_essence_not_found: "Content essence not found"
|
|
@@ -194,6 +196,7 @@ en:
|
|
|
194
196
|
copy_element: "Copy this element"
|
|
195
197
|
copy_language_tree_heading: "Copy page tree"
|
|
196
198
|
copy_page: "Copy page"
|
|
199
|
+
"Could not delete Pictures": "Could not delete Pictures"
|
|
197
200
|
country_code_placeholder: 'i.e. us (optional)'
|
|
198
201
|
country_code_foot_note: "You only need to set a country code if you want to provide each country with an individual language."
|
|
199
202
|
"Create language": "Create a new language"
|
|
@@ -218,6 +221,7 @@ en:
|
|
|
218
221
|
edit_language: "Edit language"
|
|
219
222
|
edit_page: "Edit this page"
|
|
220
223
|
edit_page_properties: "Edit the page´s properties."
|
|
224
|
+
edit_selected_pictures: "Edit selected pictures"
|
|
221
225
|
edit_user: "Edit the user´s properties."
|
|
222
226
|
element_dirty_notice: "This element has unsaved changes. Do you really want to fold it?"
|
|
223
227
|
element_dirty_close_window_notice: "You have unsaved elements. Do you really want to close the elements window?"
|
|
@@ -317,7 +321,15 @@ en:
|
|
|
317
321
|
picture_gallery_editor: 'Pictures'
|
|
318
322
|
"Picture uploaded succesfully": "Picture %{name} uploaded succesfully"
|
|
319
323
|
"Picture renamed successfully": "Picture renamed successfully from %{from} to %{to}"
|
|
320
|
-
"Picture deleted successfully": "Picture %{name} deleted"
|
|
324
|
+
"Picture deleted successfully": "Picture %{name} successfully deleted"
|
|
325
|
+
picture_updated_successfully: "Picture %{name} successfully updated"
|
|
326
|
+
picture_update_failed: "Failed to update picture %{name}"
|
|
327
|
+
"Pictures deleted successfully": "Pictures %{names} successfully deleted"
|
|
328
|
+
pictures_deleted_successfully: "Pictures %{name} deleted"
|
|
329
|
+
picture_library:
|
|
330
|
+
filter:
|
|
331
|
+
last_upload: "Showing only pictures from last upload"
|
|
332
|
+
recent: "Showing only recently uploaded pictures"
|
|
321
333
|
place_link: "Link text"
|
|
322
334
|
player_version: "Flashplayer Version"
|
|
323
335
|
"please enter subject and mail address": "Please enter recipient and subject."
|
|
@@ -481,7 +493,61 @@ en:
|
|
|
481
493
|
one: "over 1 year"
|
|
482
494
|
many: "over %{count} years"
|
|
483
495
|
|
|
496
|
+
errors: &errors
|
|
497
|
+
template:
|
|
498
|
+
header: "Validation failed"
|
|
499
|
+
body: "Please review the form and check the errors."
|
|
500
|
+
|
|
501
|
+
messages:
|
|
502
|
+
inclusion: "is not included in the list"
|
|
503
|
+
exclusion: "is reserved"
|
|
504
|
+
invalid: "is invalid"
|
|
505
|
+
confirmation: "doesn't match confirmation"
|
|
506
|
+
accepted: "must be accepted"
|
|
507
|
+
empty: "can't be empty"
|
|
508
|
+
blank: "can't be blank"
|
|
509
|
+
too_long: "is too long (maximum is %{count} characters)"
|
|
510
|
+
too_short: "is too short (minimum is %{count} characters)"
|
|
511
|
+
wrong_length: "is the wrong length (should be %{count} characters)"
|
|
512
|
+
taken: "has already been taken"
|
|
513
|
+
not_a_number: "is not a number"
|
|
514
|
+
greater_than: "must be greater than %{count}"
|
|
515
|
+
greater_than_or_equal_to: "must be greater than or equal to %{count}"
|
|
516
|
+
equal_to: "must be equal to %{count}"
|
|
517
|
+
less_than: "must be less than %{count}"
|
|
518
|
+
less_than_or_equal_to: "must be less than or equal to %{count}"
|
|
519
|
+
odd: "must be odd"
|
|
520
|
+
even: "must be even"
|
|
521
|
+
models:
|
|
522
|
+
alchemy/content:
|
|
523
|
+
attributes:
|
|
524
|
+
essence:
|
|
525
|
+
validation_failed: 'Validation failed.'
|
|
526
|
+
alchemy/element:
|
|
527
|
+
attributes:
|
|
528
|
+
name:
|
|
529
|
+
blank: "^Please choose an element."
|
|
530
|
+
alchemy/language:
|
|
531
|
+
attributes:
|
|
532
|
+
code:
|
|
533
|
+
invalid: '^Format of languagecode is not valid. Please use exactly two lowercase characters.'
|
|
534
|
+
alchemy/page:
|
|
535
|
+
attributes:
|
|
536
|
+
name:
|
|
537
|
+
blank: "^Please enter a name."
|
|
538
|
+
page_layout:
|
|
539
|
+
blank: "^Please choose a page layout."
|
|
540
|
+
urlname:
|
|
541
|
+
too_short: "^The pages urlname is too short (minimum of 3 characters)."
|
|
542
|
+
taken: "^URL-Name already taken."
|
|
543
|
+
exclusion: "^URL-Name reserved."
|
|
544
|
+
|
|
484
545
|
activemodel:
|
|
546
|
+
models:
|
|
547
|
+
alchemy/message:
|
|
548
|
+
one: Message
|
|
549
|
+
other: Messages
|
|
550
|
+
|
|
485
551
|
attributes:
|
|
486
552
|
alchemy/message:
|
|
487
553
|
salutation: 'Salutation'
|
|
@@ -493,6 +559,9 @@ en:
|
|
|
493
559
|
email: 'Email'
|
|
494
560
|
message: 'Message'
|
|
495
561
|
|
|
562
|
+
errors:
|
|
563
|
+
<<: *errors
|
|
564
|
+
|
|
496
565
|
# Translations for active record database models and error messages.
|
|
497
566
|
activerecord:
|
|
498
567
|
|
|
@@ -566,53 +635,7 @@ en:
|
|
|
566
635
|
role: "Userrole"
|
|
567
636
|
|
|
568
637
|
errors:
|
|
569
|
-
|
|
570
|
-
header: "Validation failed"
|
|
571
|
-
body: ""
|
|
572
|
-
|
|
573
|
-
messages:
|
|
574
|
-
inclusion: "is not included in the list"
|
|
575
|
-
exclusion: "is reserved"
|
|
576
|
-
invalid: "is invalid"
|
|
577
|
-
confirmation: "doesn't match confirmation"
|
|
578
|
-
accepted: "must be accepted"
|
|
579
|
-
empty: "can't be empty"
|
|
580
|
-
blank: "can't be blank"
|
|
581
|
-
too_long: "is too long (maximum is %{count} characters)"
|
|
582
|
-
too_short: "is too short (minimum is %{count} characters)"
|
|
583
|
-
wrong_length: "is the wrong length (should be %{count} characters)"
|
|
584
|
-
taken: "has already been taken"
|
|
585
|
-
not_a_number: "is not a number"
|
|
586
|
-
greater_than: "must be greater than %{count}"
|
|
587
|
-
greater_than_or_equal_to: "must be greater than or equal to %{count}"
|
|
588
|
-
equal_to: "must be equal to %{count}"
|
|
589
|
-
less_than: "must be less than %{count}"
|
|
590
|
-
less_than_or_equal_to: "must be less than or equal to %{count}"
|
|
591
|
-
odd: "must be odd"
|
|
592
|
-
even: "must be even"
|
|
593
|
-
models:
|
|
594
|
-
alchemy/content:
|
|
595
|
-
attributes:
|
|
596
|
-
essence:
|
|
597
|
-
validation_failed: 'Validation failed.'
|
|
598
|
-
alchemy/element:
|
|
599
|
-
attributes:
|
|
600
|
-
name:
|
|
601
|
-
blank: "^Please choose an element."
|
|
602
|
-
alchemy/language:
|
|
603
|
-
attributes:
|
|
604
|
-
code:
|
|
605
|
-
invalid: '^Format of languagecode is not valid. Please use exactly two lowercase characters.'
|
|
606
|
-
alchemy/page:
|
|
607
|
-
attributes:
|
|
608
|
-
name:
|
|
609
|
-
blank: "^Please enter a name."
|
|
610
|
-
page_layout:
|
|
611
|
-
blank: "^Please choose a page layout."
|
|
612
|
-
urlname:
|
|
613
|
-
too_short: "^The pages urlname is too short (minimum of 3 characters)."
|
|
614
|
-
taken: "^URL-Name already taken."
|
|
615
|
-
exclusion: "^URL-Name reserved."
|
|
638
|
+
<<: *errors
|
|
616
639
|
|
|
617
640
|
# Translations for the authentication system used in alchemy.
|
|
618
641
|
authlogic:
|
data/config/routes.rb
CHANGED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
class ActsAsTaggableOnMigration < ActiveRecord::Migration
|
|
2
|
+
def self.up
|
|
3
|
+
create_table :tags do |t|
|
|
4
|
+
t.string :name
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
create_table :taggings do |t|
|
|
8
|
+
t.references :tag
|
|
9
|
+
|
|
10
|
+
# You should make sure that the column created is
|
|
11
|
+
# long enough to store the required class names.
|
|
12
|
+
t.references :taggable, :polymorphic => true
|
|
13
|
+
t.references :tagger, :polymorphic => true
|
|
14
|
+
|
|
15
|
+
t.string :context
|
|
16
|
+
|
|
17
|
+
t.datetime :created_at
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
add_index :taggings, :tag_id
|
|
21
|
+
add_index :taggings, [:taggable_id, :taggable_type, :context]
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.down
|
|
25
|
+
drop_table :taggings
|
|
26
|
+
drop_table :tags
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
class SetAlchemyLanguagesCountryCodeDefaultToEmptyString < ActiveRecord::Migration
|
|
2
|
+
def up
|
|
3
|
+
change_column :alchemy_languages, :country_code, :string, :default => '', :null => false
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def down
|
|
7
|
+
change_column :alchemy_languages, :country_code, :string, :default => nil, :null => true
|
|
8
|
+
end
|
|
9
|
+
end
|
data/lib/alchemy/capistrano.rb
CHANGED
|
@@ -17,7 +17,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
|
17
17
|
run "mkdir -p #{shared_path}/index"
|
|
18
18
|
run "mkdir -p #{shared_path}/uploads/pictures"
|
|
19
19
|
run "mkdir -p #{shared_path}/uploads/attachments"
|
|
20
|
-
run "mkdir -p #{File.join(shared_path, 'cache', Capistrano::CLI.ui.ask("
|
|
20
|
+
run "mkdir -p #{File.join(shared_path, 'cache', Capistrano::CLI.ui.ask("\nWhere is Alchemy CMS mounted at? ('/'): "), 'pictures')}"
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
# This task sets the symlinks for uploads, picture cache and ferret index folder.
|
|
@@ -42,7 +42,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
|
42
42
|
|
|
43
43
|
desc "Creates the database.yml file"
|
|
44
44
|
task :create do
|
|
45
|
-
db_adapter = Capistrano::CLI.ui.ask("
|
|
45
|
+
db_adapter = Capistrano::CLI.ui.ask("\nPlease enter database adapter (Options: mysql2, or postgresql. Default mysql2): ")
|
|
46
46
|
db_adapter = db_adapter.empty? ? 'mysql2' : db_adapter.gsub(/^mysql$/, 'mysql2')
|
|
47
47
|
db_name = Capistrano::CLI.ui.ask("Please enter database name: ")
|
|
48
48
|
db_username = Capistrano::CLI.ui.ask("Please enter database username: ")
|
data/lib/alchemy/essence.rb
CHANGED
|
@@ -31,6 +31,8 @@ module Alchemy #:nodoc:
|
|
|
31
31
|
stampable(:stamper_class_name => 'Alchemy::User')
|
|
32
32
|
validate :essence_validations, :on => :update
|
|
33
33
|
has_many :contents, :as => :essence
|
|
34
|
+
has_many :elements, :through => :contents
|
|
35
|
+
has_many :pages, :through => :elements
|
|
34
36
|
|
|
35
37
|
def acts_as_essence_class
|
|
36
38
|
#{self.name}
|
|
@@ -132,6 +134,18 @@ module Alchemy #:nodoc:
|
|
|
132
134
|
end
|
|
133
135
|
end
|
|
134
136
|
|
|
137
|
+
# Returns the value stored from the database column that is configured as ingredient column.
|
|
138
|
+
def ingredient=(value)
|
|
139
|
+
if self.respond_to?(ingredient_setter_method)
|
|
140
|
+
self.send(ingredient_setter_method, value)
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# Returns the setter method for ingredient column
|
|
145
|
+
def ingredient_setter_method
|
|
146
|
+
ingredient_column.to_s + '='
|
|
147
|
+
end
|
|
148
|
+
|
|
135
149
|
# Essence description from config/elements.yml
|
|
136
150
|
def description
|
|
137
151
|
return {} if element.nil? or element.content_descriptions.nil?
|
data/lib/alchemy/page_layout.rb
CHANGED
|
@@ -77,12 +77,6 @@ module Alchemy
|
|
|
77
77
|
end
|
|
78
78
|
end
|
|
79
79
|
|
|
80
|
-
def self.get_page_layout_names
|
|
81
|
-
a = []
|
|
82
|
-
get_layouts.each { |l| a << l.keys.first }
|
|
83
|
-
a
|
|
84
|
-
end
|
|
85
|
-
|
|
86
80
|
def self.has_a_page_this_layout?(layout, language_id)
|
|
87
81
|
Page.where({:page_layout => layout, :language_id => language_id}).any?
|
|
88
82
|
end
|
data/lib/alchemy/resource.rb
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
require 'active_support/inflector'
|
|
2
|
+
require 'active_support/core_ext'
|
|
2
3
|
|
|
3
4
|
module Alchemy
|
|
4
5
|
class Resource
|
|
5
6
|
|
|
6
|
-
attr_accessor :skip_attributes
|
|
7
|
+
attr_accessor :skip_attributes, :resource_relations
|
|
7
8
|
|
|
8
9
|
DEFAULT_SKIPPED_ATTRIBUTES = %W[id updated_at created_at creator_id updater_id]
|
|
9
10
|
|
|
10
11
|
def initialize(controller_path, module_definition=nil)
|
|
11
12
|
@controller_path = controller_path
|
|
12
13
|
@module_definition = module_definition
|
|
13
|
-
self.skip_attributes = DEFAULT_SKIPPED_ATTRIBUTES
|
|
14
|
+
self.skip_attributes = model.respond_to?(:skip_attributes) ? model.skip_attributes : DEFAULT_SKIPPED_ATTRIBUTES
|
|
15
|
+
self.resource_relations = model.resource_relations if model.respond_to?(:resource_relations)
|
|
14
16
|
end
|
|
15
17
|
|
|
16
18
|
def model_array
|
|
@@ -43,7 +45,7 @@ module Alchemy
|
|
|
43
45
|
end
|
|
44
46
|
|
|
45
47
|
def attributes
|
|
46
|
-
self.model.columns.collect do |col|
|
|
48
|
+
@_attributes ||= self.model.columns.collect do |col|
|
|
47
49
|
{:name => (resource_relation_name(col.name) || col.name), :type => (resource_relation_type(col.name) || col.type)} unless self.skip_attributes.include?(col.name)
|
|
48
50
|
end.compact
|
|
49
51
|
end
|
|
@@ -67,7 +69,7 @@ module Alchemy
|
|
|
67
69
|
@module_definition and @module_definition['engine_name']
|
|
68
70
|
end
|
|
69
71
|
|
|
70
|
-
|
|
72
|
+
protected
|
|
71
73
|
|
|
72
74
|
def controller_path_array
|
|
73
75
|
@controller_path.split('/')
|
|
@@ -78,23 +80,15 @@ module Alchemy
|
|
|
78
80
|
end
|
|
79
81
|
|
|
80
82
|
def resource_relation_name(column_name)
|
|
81
|
-
resource_relation(column_name)[
|
|
83
|
+
resource_relation(column_name).try(:[], :attr_method)
|
|
82
84
|
end
|
|
83
85
|
|
|
84
86
|
def resource_relation_type(column_name)
|
|
85
|
-
resource_relation(column_name)[
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
def self.resource_relations
|
|
89
|
-
Config.get(:resource_relations)
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
def resource_relations
|
|
93
|
-
self.class.resource_relations[model_name.to_s] if self.class.resource_relations
|
|
87
|
+
resource_relation(column_name).try(:[], :attr_type)
|
|
94
88
|
end
|
|
95
89
|
|
|
96
90
|
def resource_relation(column_name)
|
|
97
|
-
resource_relations[column_name.
|
|
91
|
+
resource_relations[column_name.to_sym] if resource_relations
|
|
98
92
|
end
|
|
99
93
|
|
|
100
94
|
end
|
data/lib/alchemy/upgrader.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
|
|
1
3
|
module Alchemy
|
|
2
4
|
class Upgrader < Alchemy::Seeder
|
|
3
5
|
|
|
@@ -14,6 +16,7 @@ module Alchemy
|
|
|
14
16
|
upgrade_to_namespaced_essence_type
|
|
15
17
|
convert_essence_texts_displayed_as_select_into_essence_selects
|
|
16
18
|
convert_essence_texts_displayed_as_checkbox_into_essence_booleans
|
|
19
|
+
copy_new_config_file
|
|
17
20
|
|
|
18
21
|
display_todos
|
|
19
22
|
end
|
|
@@ -71,11 +74,11 @@ module Alchemy
|
|
|
71
74
|
essences.each do |essence|
|
|
72
75
|
case essence.link_target
|
|
73
76
|
when '1'
|
|
74
|
-
if essence.
|
|
77
|
+
if essence.update_column(:link_target, 'blank')
|
|
75
78
|
log("Updated #{essence.preview_text} link target to #{essence.link_target}.")
|
|
76
79
|
end
|
|
77
80
|
when '0'
|
|
78
|
-
essence.
|
|
81
|
+
essence.update_column(:link_target, nil)
|
|
79
82
|
log("Updated #{essence.preview_text} link target to #{essence.link_target.inspect}.")
|
|
80
83
|
else
|
|
81
84
|
log("#{essence.preview_text} already upgraded.", :skip)
|
|
@@ -94,7 +97,7 @@ module Alchemy
|
|
|
94
97
|
success = 0
|
|
95
98
|
errors = []
|
|
96
99
|
depricated_contents.each do |c|
|
|
97
|
-
if c.
|
|
100
|
+
if c.update_column(:essence_type, c.essence_type.gsub(/^Essence/, 'Alchemy::Essence'))
|
|
98
101
|
success += 1
|
|
99
102
|
else
|
|
100
103
|
errors << c.errors.full_messages
|
|
@@ -176,6 +179,18 @@ module Alchemy
|
|
|
176
179
|
end
|
|
177
180
|
end
|
|
178
181
|
|
|
182
|
+
def copy_new_config_file
|
|
183
|
+
desc "Copy config file"
|
|
184
|
+
old_config_file = Rails.root.join('config/alchemy/config.yml')
|
|
185
|
+
if File.exist?(old_config_file)
|
|
186
|
+
FileUtils.mv old_config_file, Rails.root.join('config/alchemy/config.yml.old')
|
|
187
|
+
log "Backed up old config file"
|
|
188
|
+
end
|
|
189
|
+
FileUtils.cp File.join(File.dirname(__FILE__), '../../config/alchemy/config.yml'), old_config_file
|
|
190
|
+
log "Copied new config file"
|
|
191
|
+
todo "Check the config/alchemy/config.yml.old file for custom configuration options and insert them into the new config file."
|
|
192
|
+
end
|
|
193
|
+
|
|
179
194
|
end
|
|
180
195
|
|
|
181
196
|
end
|
data/lib/alchemy/version.rb
CHANGED
data/lib/alchemy_cms.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
if defined?(Rails) && Rails::VERSION::MAJOR == 3 && Rails::VERSION::MINOR == 2
|
|
2
2
|
require 'acts_as_list'
|
|
3
|
+
require 'acts-as-taggable-on'
|
|
3
4
|
require 'attachment_magic'
|
|
4
5
|
require 'authlogic'
|
|
5
6
|
require 'awesome_nested_set'
|
|
@@ -10,7 +11,9 @@ if defined?(Rails) && Rails::VERSION::MAJOR == 3 && Rails::VERSION::MINOR == 2
|
|
|
10
11
|
require 'userstamp'
|
|
11
12
|
require 'yaml'
|
|
12
13
|
require 'sass-rails'
|
|
14
|
+
require 'compass-rails'
|
|
13
15
|
require 'coffee-rails'
|
|
16
|
+
require 'sassy-buttons'
|
|
14
17
|
require 'declarative_authorization'
|
|
15
18
|
require 'extensions/hash'
|
|
16
19
|
require 'extensions/array'
|
|
@@ -24,7 +27,7 @@ if defined?(Rails) && Rails::VERSION::MAJOR == 3 && Rails::VERSION::MINOR == 2
|
|
|
24
27
|
end
|
|
25
28
|
require File.join(File.dirname(__FILE__), "alchemy", "seeder")
|
|
26
29
|
else
|
|
27
|
-
raise "Alchemy 2.
|
|
30
|
+
raise "Alchemy 2.3 needs Rails 3.2 or higher. You are currently using Rails #{Rails::VERSION::STRING}"
|
|
28
31
|
end
|
|
29
32
|
|
|
30
33
|
module Alchemy
|