alchemy_cms 2.5.0.b5 → 2.5.0.b9
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -1
- data/alchemy_cms.gemspec +2 -2
- data/app/assets/javascripts/alchemy/alchemy.base.js +0 -24
- data/app/assets/javascripts/alchemy/alchemy.growler.js +2 -4
- data/app/assets/javascripts/alchemy/alchemy.gui.js.coffee +0 -1
- data/app/assets/javascripts/alchemy/alchemy.page_sorter.js +1 -1
- data/app/assets/stylesheets/alchemy/base.scss +4 -20
- data/app/assets/stylesheets/alchemy/elements.scss +19 -31
- data/app/assets/stylesheets/alchemy/flash.scss +11 -0
- data/app/assets/stylesheets/alchemy/form_elements.scss +2 -14
- data/app/assets/stylesheets/alchemy/menubar.css.scss +1 -0
- data/app/assets/stylesheets/alchemy/mixins.scss +37 -2
- data/app/assets/stylesheets/alchemy/notices.scss +1 -0
- data/app/assets/stylesheets/alchemy/sitemap.scss +30 -0
- data/app/assets/stylesheets/alchemy/tables.scss +20 -27
- data/app/controllers/alchemy/admin/attachments_controller.rb +3 -3
- data/app/controllers/alchemy/admin/base_controller.rb +1 -1
- data/app/controllers/alchemy/admin/contents_controller.rb +2 -2
- data/app/controllers/alchemy/admin/elements_controller.rb +3 -3
- data/app/controllers/alchemy/admin/essence_pictures_controller.rb +2 -2
- data/app/controllers/alchemy/admin/pages_controller.rb +16 -9
- data/app/controllers/alchemy/admin/pictures_controller.rb +8 -8
- data/app/controllers/alchemy/admin/resources_controller.rb +1 -1
- data/app/controllers/alchemy/admin/tags_controller.rb +4 -4
- data/app/controllers/alchemy/admin/users_controller.rb +3 -3
- data/app/controllers/alchemy/base_controller.rb +10 -12
- data/app/controllers/alchemy/messages_controller.rb +2 -2
- data/app/controllers/alchemy/pages_controller.rb +4 -1
- data/app/controllers/alchemy/pictures_controller.rb +1 -4
- data/app/controllers/alchemy/user_sessions_controller.rb +5 -5
- data/app/helpers/alchemy/admin/attachments_helper.rb +1 -1
- data/app/helpers/alchemy/admin/base_helper.rb +13 -13
- data/app/helpers/alchemy/admin/contents_helper.rb +6 -6
- data/app/helpers/alchemy/admin/elements_helper.rb +2 -2
- data/app/helpers/alchemy/admin/essences_helper.rb +8 -8
- data/app/helpers/alchemy/admin/pages_helper.rb +13 -7
- data/app/helpers/alchemy/base_helper.rb +20 -5
- data/app/helpers/alchemy/elements_helper.rb +2 -2
- data/app/helpers/alchemy/essences_helper.rb +2 -2
- data/app/helpers/alchemy/pages_helper.rb +2 -3
- data/app/models/alchemy/cell.rb +11 -3
- data/app/models/alchemy/content.rb +17 -17
- data/app/models/alchemy/element.rb +49 -26
- data/app/models/alchemy/legacy_page_url.rb +6 -0
- data/app/models/alchemy/page.rb +24 -45
- data/app/models/alchemy/picture.rb +1 -2
- data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +3 -3
- data/app/views/alchemy/admin/attachments/_attachment.html.erb +6 -6
- data/app/views/alchemy/admin/attachments/_files_list.html.erb +2 -2
- data/app/views/alchemy/admin/attachments/edit.html.erb +5 -3
- data/app/views/alchemy/admin/attachments/index.html.erb +3 -3
- data/app/views/alchemy/admin/attachments/new.html.erb +2 -2
- data/app/views/alchemy/admin/clipboard/clear.js.erb +1 -1
- data/app/views/alchemy/admin/clipboard/index.html.erb +3 -3
- data/app/views/alchemy/admin/clipboard/insert.js.erb +2 -2
- data/app/views/alchemy/admin/clipboard/remove.js.erb +4 -4
- data/app/views/alchemy/admin/contents/_missing.html.erb +2 -2
- data/app/views/alchemy/admin/contents/create.js.erb +1 -1
- data/app/views/alchemy/admin/contents/new.html.erb +3 -3
- data/app/views/alchemy/admin/dashboard/index.html.erb +12 -12
- data/app/views/alchemy/admin/elements/_add_picture.html.erb +1 -1
- data/app/views/alchemy/admin/elements/_element.html.erb +1 -1
- data/app/views/alchemy/admin/elements/_element_foot.html.erb +5 -5
- data/app/views/alchemy/admin/elements/_element_head.html.erb +6 -6
- data/app/views/alchemy/admin/elements/_elements_select.html.erb +2 -2
- data/app/views/alchemy/admin/elements/_new_element_form.html.erb +4 -4
- data/app/views/alchemy/admin/elements/_picture_gallery_editor.html.erb +1 -1
- data/app/views/alchemy/admin/elements/create.js.erb +2 -2
- data/app/views/alchemy/admin/elements/index.html.erb +2 -2
- data/app/views/alchemy/admin/elements/list.js.erb +1 -1
- data/app/views/alchemy/admin/elements/new.html.erb +4 -4
- data/app/views/alchemy/admin/elements/order.js.erb +1 -1
- data/app/views/alchemy/admin/elements/trash.js.erb +1 -1
- data/app/views/alchemy/admin/elements/update.js.erb +1 -1
- data/app/views/alchemy/admin/essence_files/edit.html.erb +5 -5
- data/app/views/alchemy/admin/essence_pictures/crop.html.erb +4 -4
- data/app/views/alchemy/admin/essence_pictures/edit.html.erb +4 -4
- data/app/views/alchemy/admin/languages/_form.html.erb +6 -10
- data/app/views/alchemy/admin/languages/_language.html.erb +4 -4
- data/app/views/alchemy/admin/languages/_table.html.erb +1 -1
- data/app/views/alchemy/admin/languages/index.html.erb +1 -1
- data/app/views/alchemy/admin/layoutpages/_layoutpage.html.erb +6 -6
- data/app/views/alchemy/admin/layoutpages/index.html.erb +8 -8
- data/app/views/alchemy/admin/pages/_contactform_links.html.erb +7 -7
- data/app/views/alchemy/admin/pages/_create_language_form.html.erb +10 -9
- data/app/views/alchemy/admin/pages/_external_link.html.erb +7 -7
- data/app/views/alchemy/admin/pages/_file_link.html.erb +6 -6
- data/app/views/alchemy/admin/pages/_internal_link.html.erb +5 -5
- data/app/views/alchemy/admin/pages/_new_page_form.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_page.html.erb +28 -28
- data/app/views/alchemy/admin/pages/_page_for_links.html.erb +5 -5
- data/app/views/alchemy/admin/pages/_page_infos.html.erb +3 -3
- data/app/views/alchemy/admin/pages/_page_status.html.erb +3 -3
- data/app/views/alchemy/admin/pages/_sitemap.html.erb +1 -1
- data/app/views/alchemy/admin/pages/configure.html.erb +11 -11
- data/app/views/alchemy/admin/pages/configure_external.html.erb +4 -4
- data/app/views/alchemy/admin/pages/destroy.js.erb +0 -1
- data/app/views/alchemy/admin/pages/edit.html.erb +35 -35
- data/app/views/alchemy/admin/pages/flush.js.erb +1 -1
- data/app/views/alchemy/admin/pages/fold.js.erb +0 -1
- data/app/views/alchemy/admin/pages/index.html.erb +14 -14
- data/app/views/alchemy/admin/pages/link.html.erb +4 -4
- data/app/views/alchemy/admin/pages/locked.html.erb +1 -1
- data/app/views/alchemy/admin/pages/new.html.erb +4 -4
- data/app/views/alchemy/admin/pages/update.js.erb +2 -2
- data/app/views/alchemy/admin/partials/_autocomplete_tag_list.html.erb +1 -1
- data/app/views/alchemy/admin/partials/_flash_notices.html.erb +3 -3
- data/app/views/alchemy/admin/partials/_flash_upload.html.erb +8 -8
- data/app/views/alchemy/admin/partials/_language_tree_select.html.erb +1 -1
- data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +1 -1
- data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +2 -2
- data/app/views/alchemy/admin/partials/_search_form.html.erb +2 -2
- data/app/views/alchemy/admin/partials/_sub_navigation_tab.html.erb +1 -1
- data/app/views/alchemy/admin/partials/_upload_form.html.erb +11 -11
- data/app/views/alchemy/admin/pictures/_archive.html.erb +13 -13
- data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +7 -7
- data/app/views/alchemy/admin/pictures/_filter_bar.html.erb +4 -4
- data/app/views/alchemy/admin/pictures/_overlay_picture_list.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/_picture.html.erb +7 -7
- data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/_tag_list.html.erb +2 -2
- data/app/views/alchemy/admin/pictures/edit.html.erb +2 -2
- data/app/views/alchemy/admin/pictures/edit_multiple.html.erb +6 -6
- data/app/views/alchemy/admin/pictures/index.html.erb +10 -10
- data/app/views/alchemy/admin/pictures/info.html.erb +2 -2
- data/app/views/alchemy/admin/pictures/new.html.erb +2 -2
- data/app/views/alchemy/admin/resources/_boolean.html.erb +5 -0
- data/app/views/alchemy/admin/resources/_datetime.html.erb +2 -0
- data/app/views/alchemy/admin/resources/_form.html.erb +17 -28
- data/app/views/alchemy/admin/resources/_resource.html.erb +4 -4
- data/app/views/alchemy/admin/resources/_string.html.erb +5 -0
- data/app/views/alchemy/admin/resources/_table.html.erb +1 -1
- data/app/views/alchemy/admin/resources/_text.html.erb +5 -0
- data/app/views/alchemy/admin/resources/index.html.erb +1 -1
- data/app/views/alchemy/admin/tags/_tag.html.erb +4 -4
- data/app/views/alchemy/admin/tags/edit.html.erb +4 -4
- data/app/views/alchemy/admin/tags/index.html.erb +5 -5
- data/app/views/alchemy/admin/tags/new.html.erb +2 -2
- data/app/views/alchemy/admin/trash/clear.js.coffee +1 -1
- data/app/views/alchemy/admin/trash/index.html.erb +3 -3
- data/app/views/alchemy/admin/users/_table.html.erb +3 -3
- data/app/views/alchemy/admin/users/_user.html.erb +6 -6
- data/app/views/alchemy/admin/users/index.html.erb +4 -4
- data/app/views/alchemy/base/error_notice.html.erb +1 -4
- data/app/views/alchemy/elements/_editor_not_found.html.erb +2 -2
- data/app/views/alchemy/essences/_essence_boolean_view.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_file_editor.html.erb +7 -7
- data/app/views/alchemy/essences/_essence_picture_editor.html.erb +5 -5
- data/app/views/alchemy/essences/_essence_picture_tools.html.erb +8 -8
- data/app/views/alchemy/essences/_linkable_essence_tools.html.erb +2 -2
- data/app/views/alchemy/search/_form.html.erb +2 -2
- data/app/views/alchemy/search/_result.html.erb +1 -1
- data/app/views/alchemy/search/_results.html.erb +3 -3
- data/app/views/alchemy/user_sessions/leave.html.erb +5 -5
- data/app/views/alchemy/user_sessions/login.html.erb +1 -1
- data/app/views/alchemy/user_sessions/signup.html.erb +2 -2
- data/app/views/kaminari/_gap.html.erb +1 -1
- data/app/views/kaminari/_next_page.html.erb +2 -2
- data/app/views/kaminari/_prev_page.html.erb +2 -2
- data/app/views/layouts/alchemy/admin.html.erb +7 -7
- data/bin/alchemy +1 -1
- data/config/authorization_rules.rb +1 -3
- data/config/locales/alchemy.de.yml +33 -23
- data/config/locales/alchemy.en.yml +31 -6
- data/db/migrate/{20121026100815_alchemy_two_point_three.rb → 20121118000000_alchemy_two_point_four.rb} +51 -28
- data/db/migrate/20130110212411_create_alchemy_legacy_page_urls.rb +11 -0
- data/lib/alchemy/capistrano.rb +22 -30
- data/lib/alchemy/errors.rb +45 -0
- data/lib/alchemy/i18n.rb +7 -5
- data/lib/alchemy/logger.rb +16 -0
- data/lib/alchemy/page_layout.rb +3 -3
- data/lib/alchemy/resource.rb +17 -1
- data/lib/alchemy/resources_helper.rb +8 -1
- data/lib/alchemy/upgrader.rb +9 -0
- data/lib/alchemy/version.rb +1 -1
- data/lib/alchemy_cms.rb +1 -6
- data/lib/rails/generators/alchemy/scaffold/files/elements.yml +41 -19
- data/lib/rails/generators/alchemy/scaffold/scaffold_generator.rb +13 -0
- data/lib/tasks/alchemy/db.rake +5 -11
- data/lib/tasks/alchemy/install.rake +7 -7
- data/spec/controllers/admin/pages_controller_spec.rb +14 -2
- data/spec/controllers/pages_controller_spec.rb +50 -17
- data/spec/dummy/config/application.rb +1 -1
- data/spec/dummy/db/migrate/{20121026100815_alchemy_two_point_three.rb → 20121118000000_alchemy_two_point_four.rb} +51 -28
- data/spec/dummy/db/migrate/20130110212411_create_alchemy_legacy_page_urls.rb +11 -0
- data/spec/dummy/db/schema.rb +10 -1
- data/spec/factories.rb +1 -0
- data/spec/integration/admin/picture_library_integration_spec.rb +8 -2
- data/spec/integration/security_spec.rb +2 -2
- data/spec/integration/translation_integration_spec.rb +20 -4
- data/spec/libraries/resources_helper_spec.rb +1 -1
- data/spec/models/cell_spec.rb +45 -0
- data/spec/models/page_spec.rb +19 -2
- data/spec/models/picture_spec.rb +12 -0
- data/spec/routing_spec.rb +115 -115
- data/spec/spec_helper.rb +3 -0
- data/spec/support/alchemy/specs_helpers.rb +6 -2
- data/spec/support/image.png +0 -0
- data/spec/support/image2.PNG +0 -0
- data/spec/support/image3.jpeg +0 -0
- metadata +27 -23
- data/db/migrate/20121113115120_create_alchemy_essence_links.rb +0 -13
- data/db/migrate/20121115100736_add_cached_tag_list_to_elements_pages_and_users.rb +0 -7
- data/db/migrate/20121116140636_add_cached_tag_list_to_alchemy_attachments.rb +0 -5
- data/db/migrate/20121116141016_change_alchemy_pictures_tag_list_column.rb +0 -9
- data/spec/dummy/db/migrate/20121113115120_create_alchemy_essence_links.rb +0 -13
- data/spec/dummy/db/migrate/20121115100736_add_cached_tag_list_to_elements_pages_and_users.rb +0 -7
- data/spec/dummy/db/migrate/20121116140636_add_cached_tag_list_to_alchemy_attachments.rb +0 -5
- data/spec/dummy/db/migrate/20121116141016_change_alchemy_pictures_tag_list_column.rb +0 -9
@@ -1,5 +1,6 @@
|
|
1
1
|
module Alchemy
|
2
2
|
class Element < ActiveRecord::Base
|
3
|
+
include Logger
|
3
4
|
|
4
5
|
FORBIDDEN_DEFINITION_ATTRIBUTES = %w(contents available_contents amount picture_gallery taggable hint)
|
5
6
|
SKIPPED_ATTRIBUTES_ON_COPY = %w(id position folded created_at updated_at creator_id updater_id cached_tag_list)
|
@@ -58,7 +59,7 @@ module Alchemy
|
|
58
59
|
if element_scratch
|
59
60
|
new(element_scratch.merge(attributes).except(*FORBIDDEN_DEFINITION_ATTRIBUTES))
|
60
61
|
else
|
61
|
-
raise "Element description for #{attributes[:name]} not found. Please check your elements.yml"
|
62
|
+
raise ElementDefinitionError, "Element description for #{attributes[:name]} not found. Please check your elements.yml"
|
62
63
|
end
|
63
64
|
end
|
64
65
|
|
@@ -70,24 +71,18 @@ module Alchemy
|
|
70
71
|
end
|
71
72
|
|
72
73
|
# Returns the descriptions from elements.yml file.
|
73
|
-
#
|
74
|
+
#
|
74
75
|
# Place a elements.yml file inside your apps config/alchemy folder to define
|
75
76
|
# your own set of elements
|
77
|
+
#
|
76
78
|
def descriptions
|
77
79
|
if ::File.exists? "#{::Rails.root}/config/alchemy/elements.yml"
|
78
|
-
|
79
|
-
|
80
|
-
if !element_definitions
|
81
|
-
if ::File.exists?(::File.join(::File.dirname(__FILE__), "../../../config/alchemy/elements.yml"))
|
82
|
-
element_definitions = ::YAML.load_file(::File.join(::File.dirname(__FILE__), "../../../config/alchemy/elements.yml"))
|
83
|
-
end
|
84
|
-
end
|
85
|
-
if !element_definitions
|
80
|
+
::YAML.load_file("#{::Rails.root}/config/alchemy/elements.yml")
|
81
|
+
else
|
86
82
|
raise LoadError, "Could not find elements.yml file! Please run: rails generate alchemy:scaffold"
|
87
83
|
end
|
88
|
-
element_definitions
|
89
84
|
rescue TypeError => e
|
90
|
-
|
85
|
+
warn "Your elements.yml is empty."
|
91
86
|
[]
|
92
87
|
end
|
93
88
|
alias_method :definitions, :descriptions
|
@@ -108,7 +103,7 @@ module Alchemy
|
|
108
103
|
# if page_layout has cells, collect elements from cells and group them by cellname
|
109
104
|
page_layout = PageLayout.get(page.page_layout)
|
110
105
|
if page_layout.blank?
|
111
|
-
|
106
|
+
warn "Could not find page_layout description for page: #{page.name}"
|
112
107
|
return []
|
113
108
|
end
|
114
109
|
elements_for_layout = []
|
@@ -296,7 +291,7 @@ module Alchemy
|
|
296
291
|
# Returns the description for given content_name
|
297
292
|
def content_description_for(content_name)
|
298
293
|
if content_descriptions.blank?
|
299
|
-
|
294
|
+
warn "Element #{self.name} is missing the content description for #{content_name}"
|
300
295
|
return nil
|
301
296
|
else
|
302
297
|
content_descriptions.detect { |d| d['name'] == content_name }
|
@@ -313,7 +308,8 @@ module Alchemy
|
|
313
308
|
def description
|
314
309
|
description = self.class.descriptions.detect { |d| d['name'] == self.name }
|
315
310
|
if description.blank?
|
316
|
-
|
311
|
+
warn "Could not find element definition for #{self.name}. Please check your elements.yml!"
|
312
|
+
return {}
|
317
313
|
else
|
318
314
|
return description
|
319
315
|
end
|
@@ -436,7 +432,7 @@ module Alchemy
|
|
436
432
|
|
437
433
|
# Essence validation errors
|
438
434
|
#
|
439
|
-
#
|
435
|
+
# == Error messages are translated via I18n
|
440
436
|
#
|
441
437
|
# Inside your translation file add translations like:
|
442
438
|
#
|
@@ -446,11 +442,11 @@ module Alchemy
|
|
446
442
|
# name_of_the_content:
|
447
443
|
# validation_error_type: Error Message
|
448
444
|
#
|
449
|
-
# validation_error_type has to be one of:
|
445
|
+
# NOTE: +validation_error_type+ has to be one of:
|
450
446
|
#
|
451
|
-
#
|
452
|
-
#
|
453
|
-
#
|
447
|
+
# * blank
|
448
|
+
# * taken
|
449
|
+
# * invalid
|
454
450
|
#
|
455
451
|
# === Example:
|
456
452
|
#
|
@@ -459,17 +455,44 @@ module Alchemy
|
|
459
455
|
# content_validations:
|
460
456
|
# contactform:
|
461
457
|
# email:
|
462
|
-
#
|
458
|
+
# invalid: 'Die Email hat nicht das richtige Format'
|
459
|
+
#
|
460
|
+
#
|
461
|
+
# == Error message translation fallbacks
|
462
|
+
#
|
463
|
+
# In order to not translate every single content for every element you can provide default error messages per content name:
|
464
|
+
#
|
465
|
+
# === Example
|
466
|
+
#
|
467
|
+
# en:
|
468
|
+
# alchemy:
|
469
|
+
# content_validations:
|
470
|
+
# fields:
|
471
|
+
# email:
|
472
|
+
# invalid: E-Mail has wrong format
|
473
|
+
# blank: E-Mail can't be blank
|
474
|
+
#
|
475
|
+
# And even further you can provide general field agnostic error messages:
|
476
|
+
#
|
477
|
+
# === Example
|
478
|
+
#
|
479
|
+
# en:
|
480
|
+
# alchemy:
|
481
|
+
# content_validations:
|
482
|
+
# errors:
|
483
|
+
# invalid: %{field} has wrong format
|
484
|
+
# blank: %{field} can't be blank
|
463
485
|
#
|
464
486
|
def essence_error_messages
|
465
487
|
messages = []
|
466
488
|
essence_errors.each do |content_name, errors|
|
467
489
|
errors.each do |error|
|
468
|
-
messages << I18n.t(
|
469
|
-
|
490
|
+
messages << I18n.t(
|
491
|
+
"#{name}.#{content_name}.#{error}",
|
492
|
+
:scope => :content_validations,
|
470
493
|
:default => [
|
471
|
-
"
|
472
|
-
"
|
494
|
+
"fields.#{content_name}.#{error}".to_sym,
|
495
|
+
"errors.#{error}".to_sym
|
473
496
|
],
|
474
497
|
:field => Content.translated_label_for(content_name)
|
475
498
|
)
|
@@ -561,7 +584,7 @@ module Alchemy
|
|
561
584
|
def create_contents
|
562
585
|
contents = []
|
563
586
|
if description["contents"].blank?
|
564
|
-
|
587
|
+
warn "Could not find any content descriptions for element: #{self.name}"
|
565
588
|
else
|
566
589
|
description["contents"].each do |content_hash|
|
567
590
|
contents << Content.create_from_scratch(self, content_hash.symbolize_keys)
|
data/app/models/alchemy/page.rb
CHANGED
@@ -48,6 +48,7 @@ module Alchemy
|
|
48
48
|
has_many :cells, :dependent => :destroy
|
49
49
|
has_many :elements, :dependent => :destroy, :order => :position
|
50
50
|
has_many :contents, :through => :elements
|
51
|
+
has_many :legacy_urls, :class_name => 'Alchemy::LegacyPageUrl'
|
51
52
|
has_and_belongs_to_many :to_be_sweeped_elements, :class_name => 'Alchemy::Element', :uniq => true, :join_table => 'alchemy_elements_alchemy_pages'
|
52
53
|
belongs_to :language
|
53
54
|
|
@@ -72,6 +73,7 @@ module Alchemy
|
|
72
73
|
after_create :autogenerate_elements, :unless => proc { |page| page.systempage? || page.do_not_autogenerate }
|
73
74
|
after_update :trash_not_allowed_elements, :if => :page_layout_changed?
|
74
75
|
after_update :autogenerate_elements, :if => :page_layout_changed?
|
76
|
+
after_update :create_legacy_url, :if => :urlname_changed?
|
75
77
|
|
76
78
|
scope :language_roots, where(:language_root => true)
|
77
79
|
scope :layoutpages, where(:layoutpage => true)
|
@@ -399,52 +401,23 @@ module Alchemy
|
|
399
401
|
elements.select { |m| type.include? m.name }
|
400
402
|
end
|
401
403
|
|
402
|
-
# Returns
|
403
|
-
#
|
404
|
-
def
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
return I18n.t('page_status_invisible_public_locked')
|
412
|
-
when 3
|
413
|
-
return I18n.t('page_status_invisible_unpublic_locked')
|
414
|
-
when 4
|
415
|
-
return I18n.t('page_status_visible_public')
|
416
|
-
when 5
|
417
|
-
return I18n.t('page_status_visible_unpublic')
|
418
|
-
when 6
|
419
|
-
return I18n.t('page_status_invisible_public')
|
420
|
-
when 7
|
421
|
-
return I18n.t('page_status_invisible_unpublic')
|
422
|
-
end
|
404
|
+
# Returns a Hash of attributes describing the status of the Page.
|
405
|
+
#
|
406
|
+
def status
|
407
|
+
combined_status = {}
|
408
|
+
combined_status[:visible] = self.visible?
|
409
|
+
combined_status[:public] = self.public?
|
410
|
+
combined_status[:locked] = self.locked?
|
411
|
+
combined_status[:restricted] = self.restricted?
|
412
|
+
return combined_status
|
423
413
|
end
|
424
414
|
|
425
|
-
# Returns the status
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
return 1
|
432
|
-
elsif self.public? && !self.visible?
|
433
|
-
return 2
|
434
|
-
elsif !self.public? && !self.visible?
|
435
|
-
return 3
|
436
|
-
end
|
437
|
-
else
|
438
|
-
if self.public? && self.visible?
|
439
|
-
return 4
|
440
|
-
elsif !self.public? && self.visible?
|
441
|
-
return 5
|
442
|
-
elsif self.public? && !self.visible?
|
443
|
-
return 6
|
444
|
-
elsif !self.public? && !self.visible?
|
445
|
-
return 7
|
446
|
-
end
|
447
|
-
end
|
415
|
+
# Returns the translated status for given status type.
|
416
|
+
#
|
417
|
+
# @param [Symbol] status_type
|
418
|
+
#
|
419
|
+
def status_title(status_type)
|
420
|
+
I18n.t(self.send(status_type), :scope => "page_states.#{status_type}")
|
448
421
|
end
|
449
422
|
|
450
423
|
def has_controller?
|
@@ -463,7 +436,7 @@ module Alchemy
|
|
463
436
|
return {} if self.systempage?
|
464
437
|
description = PageLayout.get(self.page_layout)
|
465
438
|
if description.nil?
|
466
|
-
raise "Description could not be found for page layout named #{self.page_layout}. Please check page_layouts.yml file."
|
439
|
+
raise PageLayoutDefinitionError, "Description could not be found for page layout named #{self.page_layout}. Please check page_layouts.yml file."
|
467
440
|
else
|
468
441
|
description
|
469
442
|
end
|
@@ -649,5 +622,11 @@ module Alchemy
|
|
649
622
|
elements.select { |e| !definition['elements'].include?(e.name) }.map(&:trash)
|
650
623
|
end
|
651
624
|
|
625
|
+
# Stores the old urlname in a LegacyPageUrl
|
626
|
+
def create_legacy_url
|
627
|
+
legacy_url = legacy_urls.new(:urlname => urlname_was)
|
628
|
+
legacy_url.save!
|
629
|
+
end
|
630
|
+
|
652
631
|
end
|
653
632
|
end
|
@@ -22,7 +22,7 @@ module Alchemy
|
|
22
22
|
end
|
23
23
|
|
24
24
|
validates_presence_of :image_file
|
25
|
-
validates_property :format, :of => :image_file, :in => Config.get('uploader')['allowed_filetypes']['pictures']
|
25
|
+
validates_property :format, :of => :image_file, :in => Config.get('uploader')['allowed_filetypes']['pictures'], :case_sensitive => false, :message => I18n.t("not a valid image")
|
26
26
|
|
27
27
|
acts_as_taggable
|
28
28
|
|
@@ -170,5 +170,4 @@ module Alchemy
|
|
170
170
|
end
|
171
171
|
|
172
172
|
end
|
173
|
-
class PictureInUseError < StandardError; end
|
174
173
|
end
|
@@ -9,13 +9,13 @@
|
|
9
9
|
:options => @options
|
10
10
|
),
|
11
11
|
{
|
12
|
-
:title =>
|
12
|
+
:title => _t('upload_file'),
|
13
13
|
:size => '540x550'
|
14
14
|
},
|
15
|
-
:title =>
|
15
|
+
:title => _t('upload_file'),
|
16
16
|
:class => 'icon_button'
|
17
17
|
) %>
|
18
|
-
<label><%=
|
18
|
+
<label><%= _t('upload_file') %></label>
|
19
19
|
</div>
|
20
20
|
<%= js_filter_field(:onkeyup => "Alchemy.ListFilter('.assign_file_file')") %>
|
21
21
|
</div>
|
@@ -8,7 +8,7 @@
|
|
8
8
|
attachment.name,
|
9
9
|
alchemy.admin_attachment_path(attachment),
|
10
10
|
:target => '_blank',
|
11
|
-
:title =>
|
11
|
+
:title => _t('View File')
|
12
12
|
) %>
|
13
13
|
<% else %>
|
14
14
|
<%= attachment.name %>
|
@@ -23,14 +23,14 @@
|
|
23
23
|
<%= link_to(
|
24
24
|
"",
|
25
25
|
alchemy.download_admin_attachment_path(attachment),
|
26
|
-
:title =>
|
26
|
+
:title => _t("download_file", :filename => attachment.filename),
|
27
27
|
:class => "icon file_download"
|
28
28
|
) %>
|
29
29
|
<% end %>
|
30
30
|
<% permitted_to?(:destroy, :alchemy_admin_attachments) do %>
|
31
31
|
<%= link_to_confirmation_window(
|
32
32
|
"",
|
33
|
-
|
33
|
+
_t("confirm_to_delete_file"),
|
34
34
|
alchemy.admin_attachment_path(
|
35
35
|
:id => attachment,
|
36
36
|
:query => params[:query],
|
@@ -39,7 +39,7 @@
|
|
39
39
|
),
|
40
40
|
{
|
41
41
|
:class => 'icon file_delete',
|
42
|
-
:title =>
|
42
|
+
:title => _t('delete_file')
|
43
43
|
}
|
44
44
|
) %>
|
45
45
|
<% end %>
|
@@ -47,11 +47,11 @@
|
|
47
47
|
<%= link_to_overlay_window("",
|
48
48
|
alchemy.edit_admin_attachment_path(attachment, :query => params[:query], :page => params[:page]),
|
49
49
|
{
|
50
|
-
:title =>
|
50
|
+
:title => _t('rename_file'),
|
51
51
|
:size => '380x220'
|
52
52
|
},
|
53
53
|
:class => 'icon file_edit',
|
54
|
-
:title =>
|
54
|
+
:title => _t('rename_file')
|
55
55
|
) %>
|
56
56
|
<% end %>
|
57
57
|
</td>
|
@@ -1,12 +1,12 @@
|
|
1
1
|
<%- if @attachments.blank? && params[:query].nil? -%>
|
2
2
|
<div class="info" id="no_files_notice">
|
3
3
|
<%= render_icon('info') %>
|
4
|
-
<%=
|
4
|
+
<%= _t("no_files_in_archive") %>
|
5
5
|
</div>
|
6
6
|
<%- elsif @attachments.blank? -%>
|
7
7
|
<div class="info">
|
8
8
|
<%= render_icon('info') %>
|
9
|
-
<%=
|
9
|
+
<%= _t("no_search_results") %>
|
10
10
|
</div>
|
11
11
|
<%- end -%>
|
12
12
|
<table id="all_files" class="list">
|
@@ -6,7 +6,10 @@
|
|
6
6
|
</tr>
|
7
7
|
<tr>
|
8
8
|
<td class="label"><%= f.label 'filename' %>*</td>
|
9
|
-
<td class="input"
|
9
|
+
<td class="input">
|
10
|
+
<%= f.text_field 'filename', :class => 'thin_border long' %>
|
11
|
+
<p class="foot_note"><%= _t(:attachment_filename_notice) %></p>
|
12
|
+
</td>
|
10
13
|
</tr>
|
11
14
|
<tr>
|
12
15
|
<td class="label"><%= f.label 'tag_list' %></td>
|
@@ -16,9 +19,8 @@
|
|
16
19
|
</tr>
|
17
20
|
<tr>
|
18
21
|
<td colspan="2" class="submit">
|
19
|
-
<%= f.button
|
22
|
+
<%= f.button _t('save'), :class => 'button' %>
|
20
23
|
</td>
|
21
24
|
</tr>
|
22
25
|
</table>
|
23
|
-
<p class="foot_note"><%= t(:attachment_filename_notice) %></p>
|
24
26
|
<% end %>
|
@@ -4,12 +4,12 @@
|
|
4
4
|
:icon => 'upload',
|
5
5
|
:url => alchemy.new_admin_attachment_path,
|
6
6
|
:overlay_options => {
|
7
|
-
:title =>
|
7
|
+
:title => _t('upload_file'),
|
8
8
|
:size => '540x550'
|
9
9
|
},
|
10
|
-
:title =>
|
10
|
+
:title => _t('upload_file'),
|
11
11
|
:class => 'icon_button',
|
12
|
-
:label =>
|
12
|
+
:label => _t('upload_file'),
|
13
13
|
:if_permitted_to => [:new, :alchemy_admin_attachments]
|
14
14
|
}
|
15
15
|
]
|
@@ -3,9 +3,9 @@
|
|
3
3
|
:partial => "alchemy/admin/partials/upload_form",
|
4
4
|
:locals => {
|
5
5
|
:file_types => configuration(:uploader)['allowed_filetypes']['attachments'],
|
6
|
-
:file_types_description =>
|
6
|
+
:file_types_description => _t('documents'),
|
7
7
|
:model_name => 'attachment',
|
8
|
-
:item_type =>
|
8
|
+
:item_type => _t('files')
|
9
9
|
}
|
10
10
|
) %>
|
11
11
|
<% end %>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
(function($) {
|
2
2
|
|
3
|
-
$("#clipboard_items").replaceWith("<p><%=
|
3
|
+
$("#clipboard_items").replaceWith("<p><%= _t('No items in your clipboard') -%></p>");
|
4
4
|
$('#clipboard_button .icon.clipboard').removeClass('full');
|
5
5
|
Alchemy.pleaseWaitOverlay(false);
|
6
6
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<%- if @clipboard_items.blank? -%>
|
3
3
|
<div class="info">
|
4
4
|
<%= render_icon('info') %>
|
5
|
-
<%=
|
5
|
+
<%= _t('No items in your clipboard') %>
|
6
6
|
</div>
|
7
7
|
<%- else -%>
|
8
8
|
<div id="clipboard_items">
|
@@ -11,12 +11,12 @@
|
|
11
11
|
<% item_class = item.class.name.demodulize.underscore.pluralize %>
|
12
12
|
<li id="clipboard_item_<%= item.id -%>" class="<%= item_class -%>">
|
13
13
|
<%= item.class.to_s == 'Alchemy::Element' ? item.display_name_with_preview_text(60) : item.name %>
|
14
|
-
<span class="float_right"><%= link_to(render_icon('delete-small'), alchemy.remove_admin_clipboard_path(:remarkable_type => item_class, :remarkable_id => item.id), :remote => true, :method => :delete, :title =>
|
14
|
+
<span class="float_right"><%= link_to(render_icon('delete-small'), alchemy.remove_admin_clipboard_path(:remarkable_type => item_class, :remarkable_id => item.id), :remote => true, :method => :delete, :title => _t('Remove item from clipboard')) %></span>
|
15
15
|
</li>
|
16
16
|
<%- end -%>
|
17
17
|
</ul>
|
18
18
|
<p>
|
19
|
-
<%= link_to_confirmation_window(
|
19
|
+
<%= link_to_confirmation_window(_t('clear clipboard'), _t('Do you really want to clear the clipboard?'), alchemy.clear_admin_clipboard_path(:remarkable_type => params[:remarkable_type]), :class => 'button') %>
|
20
20
|
</p>
|
21
21
|
</div>
|
22
22
|
<%- end -%>
|