alchemy_cms 2.1.4 → 2.1.5

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.
Files changed (143) hide show
  1. data/Gemfile +1 -1
  2. data/README.md +11 -31
  3. data/app/assets/javascripts/alchemy/alchemy.elements_window.js +3 -1
  4. data/app/assets/javascripts/alchemy/alchemy.windows.js +1 -1
  5. data/app/assets/stylesheets/alchemy/base.css.scss +0 -4
  6. data/app/assets/stylesheets/alchemy/buttons.css.scss +7 -4
  7. data/app/assets/stylesheets/alchemy/icons.css.scss +7 -1
  8. data/app/assets/stylesheets/alchemy/tinymce_dialog.css.scss +11 -15
  9. data/app/assets/{javascripts → stylesheets}/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css.scss +51 -18
  10. data/app/controllers/alchemy/admin/contents_controller.rb +5 -5
  11. data/app/controllers/alchemy/base_controller.rb +1 -1
  12. data/app/helpers/alchemy/admin/base_helper.rb +4 -7
  13. data/app/helpers/alchemy/admin/elements_helper.rb +2 -2
  14. data/app/models/alchemy/attachment.rb +1 -1
  15. data/app/models/alchemy/cell.rb +3 -3
  16. data/app/models/alchemy/content.rb +4 -4
  17. data/app/models/alchemy/element.rb +8 -8
  18. data/app/models/alchemy/essence_html.rb +1 -1
  19. data/app/models/alchemy/essence_richtext.rb +4 -4
  20. data/app/models/alchemy/essence_text.rb +1 -1
  21. data/app/models/alchemy/language.rb +10 -7
  22. data/app/models/alchemy/language/code.rb +19 -0
  23. data/app/models/alchemy/message.rb +6 -6
  24. data/app/models/alchemy/page.rb +26 -26
  25. data/app/models/alchemy/picture.rb +11 -13
  26. data/app/models/alchemy/user.rb +5 -5
  27. data/app/models/alchemy/user_session.rb +1 -1
  28. data/app/views/alchemy/admin/contents/destroy.js.erb +1 -1
  29. data/app/views/alchemy/admin/elements/create.js.erb +1 -0
  30. data/app/views/alchemy/admin/elements/fold.js.erb +2 -2
  31. data/app/views/alchemy/admin/elements/index.html.erb +1 -1
  32. data/app/views/alchemy/admin/essence_pictures/edit.html.erb +6 -6
  33. data/app/views/alchemy/admin/languages/_form.html.erb +47 -0
  34. data/app/views/alchemy/admin/languages/_language.html.erb +47 -0
  35. data/app/views/alchemy/admin/languages/_table.html.erb +33 -0
  36. data/app/views/alchemy/essences/_essence_picture_tools.html.erb +4 -1
  37. data/app/views/alchemy/essences/_essence_picture_view.html.erb +1 -3
  38. data/app/views/alchemy/essences/_essence_text_editor.html.erb +1 -1
  39. data/config/locales/alchemy.de.yml +26 -22
  40. data/config/locales/alchemy.en.yml +2 -0
  41. data/config/routes.rb +2 -2
  42. data/db/migrate/20120216135355_add_country_code_to_languages.rb +9 -0
  43. data/lib/alchemy/i18n.rb +21 -14
  44. data/lib/alchemy/seeder.rb +2 -2
  45. data/lib/alchemy/version.rb +1 -1
  46. data/spec/dummy/db/schema.rb +5 -3
  47. data/spec/factories.rb +2 -2
  48. data/spec/models/language_spec.rb +22 -4
  49. data/vendor/assets/javascripts/tiny_mce/langs/de.js +0 -0
  50. data/vendor/assets/javascripts/tiny_mce/langs/en.js +0 -0
  51. data/vendor/assets/javascripts/tiny_mce/license.txt +0 -0
  52. data/vendor/assets/javascripts/tiny_mce/plugins/autoresize/editor_plugin.js +1 -137
  53. data/vendor/assets/javascripts/tiny_mce/plugins/fullscreen/editor_plugin.js +0 -0
  54. data/vendor/assets/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm +0 -0
  55. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin.js +0 -0
  56. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/template.htm +0 -0
  57. data/vendor/assets/javascripts/tiny_mce/plugins/paste/editor_plugin.js +0 -0
  58. data/vendor/assets/javascripts/tiny_mce/plugins/paste/js/pastetext.js +0 -0
  59. data/vendor/assets/javascripts/tiny_mce/plugins/paste/js/pasteword.js +0 -0
  60. data/vendor/assets/javascripts/tiny_mce/plugins/paste/langs/de_dlg.js +0 -0
  61. data/vendor/assets/javascripts/tiny_mce/plugins/paste/langs/en_dlg.js +0 -0
  62. data/vendor/assets/javascripts/tiny_mce/plugins/paste/pastetext.htm +0 -0
  63. data/vendor/assets/javascripts/tiny_mce/plugins/paste/pasteword.htm +0 -0
  64. data/vendor/assets/javascripts/tiny_mce/plugins/table/cell.htm +0 -0
  65. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/cell.css +0 -0
  66. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/row.css +0 -0
  67. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/table.css +0 -0
  68. data/vendor/assets/javascripts/tiny_mce/plugins/table/editor_plugin.js +0 -0
  69. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/cell.js +0 -0
  70. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/merge_cells.js +0 -0
  71. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/row.js +0 -0
  72. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/table.js +5 -1
  73. data/vendor/assets/javascripts/tiny_mce/plugins/table/langs/de_dlg.js +0 -0
  74. data/vendor/assets/javascripts/tiny_mce/plugins/table/langs/en_dlg.js +0 -0
  75. data/vendor/assets/javascripts/tiny_mce/plugins/table/merge_cells.htm +0 -0
  76. data/vendor/assets/javascripts/tiny_mce/plugins/table/row.htm +0 -0
  77. data/vendor/assets/javascripts/tiny_mce/plugins/table/table.htm +0 -0
  78. data/vendor/assets/javascripts/tiny_mce/themes/advanced/about.htm +0 -0
  79. data/vendor/assets/javascripts/tiny_mce/themes/advanced/anchor.htm +0 -0
  80. data/vendor/assets/javascripts/tiny_mce/themes/advanced/charmap.htm +0 -0
  81. data/vendor/assets/javascripts/tiny_mce/themes/advanced/color_picker.htm +0 -0
  82. data/vendor/assets/javascripts/tiny_mce/themes/advanced/editor_template.js +1 -1
  83. data/vendor/assets/javascripts/tiny_mce/themes/advanced/image.htm +0 -0
  84. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
  85. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/flash.gif +0 -0
  86. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/icons.gif +0 -0
  87. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/iframe.gif +0 -0
  88. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/pagebreak.gif +0 -0
  89. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/quicktime.gif +0 -0
  90. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/realmedia.gif +0 -0
  91. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/shockwave.gif +0 -0
  92. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/trans.gif +0 -0
  93. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/video.gif +0 -0
  94. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/windowsmedia.gif +0 -0
  95. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/about.js +0 -0
  96. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/anchor.js +0 -0
  97. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/charmap.js +0 -0
  98. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/color_picker.js +0 -0
  99. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/image.js +0 -0
  100. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/link.js +0 -0
  101. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/source_editor.js +0 -0
  102. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/de.js +0 -0
  103. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/de_dlg.js +0 -0
  104. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/en.js +0 -0
  105. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js +0 -0
  106. data/vendor/assets/javascripts/tiny_mce/themes/advanced/link.htm +0 -0
  107. data/vendor/assets/javascripts/tiny_mce/themes/advanced/shortcuts.htm +0 -0
  108. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/content.css +0 -0
  109. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css +0 -0
  110. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
  111. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
  112. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
  113. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
  114. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
  115. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
  116. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/ui.css +0 -0
  117. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/content.css +0 -0
  118. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +0 -0
  119. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css +0 -0
  120. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css +0 -0
  121. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css +0 -0
  122. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
  123. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
  124. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
  125. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css +0 -0
  126. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +0 -0
  127. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +0 -0
  128. data/vendor/assets/javascripts/tiny_mce/themes/advanced/source_editor.htm +0 -0
  129. data/vendor/assets/javascripts/tiny_mce/tiny_mce.js +1 -1
  130. data/vendor/assets/javascripts/tiny_mce/tiny_mce_popup.js +0 -0
  131. data/vendor/assets/javascripts/tiny_mce/utils/editable_selects.js +0 -0
  132. data/vendor/assets/javascripts/tiny_mce/utils/form_utils.js +0 -0
  133. data/vendor/assets/javascripts/tiny_mce/utils/mctabs.js +0 -0
  134. data/vendor/assets/javascripts/tiny_mce/utils/validate.js +0 -0
  135. metadata +39 -42
  136. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif +0 -0
  137. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif +0 -0
  138. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif +0 -0
  139. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif +0 -0
  140. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif +0 -0
  141. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif +0 -0
  142. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif +0 -0
  143. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css +0 -90
@@ -18,8 +18,8 @@ module Alchemy
18
18
  has_many :elements, :dependent => :destroy, :order => :position
19
19
 
20
20
  def self.definitions
21
- cell_yml = File.join(Rails.root, 'config', 'alchemy', 'cells.yml')
22
- YAML.load_file(cell_yml) if File.exist?(cell_yml)
21
+ cell_yml = ::File.join(::Rails.root, 'config', 'alchemy', 'cells.yml')
22
+ ::YAML.load_file(cell_yml) if ::File.exist?(cell_yml)
23
23
  end
24
24
 
25
25
  def self.definition_for(cellname)
@@ -55,7 +55,7 @@ module Alchemy
55
55
  end
56
56
 
57
57
  def self.translated_label_for(cell_name)
58
- Alchemy::I18n.t("alchemy.cell_names.#{cell_name}", :default => cell_name.camelcase)
58
+ I18n.t(cell_name, :scope => :cell_names)
59
59
  end
60
60
 
61
61
  end
@@ -12,7 +12,7 @@ module Alchemy
12
12
  "element_id = '#{element_id}' AND essence_type = '#{essence_type}'"
13
13
  end
14
14
 
15
- validates_uniqueness_of :name, :scope => :element_id
15
+ #validates_uniqueness_of :name, :scope => :element_id
16
16
  validates_uniqueness_of :position, :scope => [:element_id, :essence_type]
17
17
 
18
18
  scope :essence_pictures, where(:essence_type => "Alchemy::EssencePicture")
@@ -23,7 +23,7 @@ module Alchemy
23
23
  def self.create_from_scratch(element, essences_hash)
24
24
  if essences_hash[:name].blank? && !essences_hash[:essence_type].blank?
25
25
  essences_of_same_type = element.contents.where(
26
- :essence_type => Alchemy::Content.normalize_essence_type(essences_hash[:essence_type])
26
+ :essence_type => Content.normalize_essence_type(essences_hash[:essence_type])
27
27
  )
28
28
  description = {
29
29
  'type' => essences_hash[:essence_type],
@@ -34,7 +34,7 @@ module Alchemy
34
34
  description = element.available_content_description_for(essences_hash[:name]) if description.blank?
35
35
  end
36
36
  raise "No description found in elements.yml for #{essences_hash.inspect} and #{element.inspect}" if description.blank?
37
- essence_class = Alchemy::Content.normalize_essence_type(description['type']).constantize
37
+ essence_class = Content.normalize_essence_type(description['type']).constantize
38
38
  content = self.new(:name => description['name'], :element_id => element.id)
39
39
  if description['type'] == "EssenceRichtext" || description['type'] == "EssenceText"
40
40
  essence = essence_class.create(:do_not_index => !description['do_not_index'].nil?)
@@ -43,7 +43,7 @@ module Alchemy
43
43
  end
44
44
  if essence
45
45
  content.essence = essence
46
- content.save
46
+ content.save!
47
47
  else
48
48
  content = nil
49
49
  end
@@ -11,7 +11,7 @@ module Alchemy
11
11
  has_and_belongs_to_many :to_be_sweeped_pages, :class_name => 'Alchemy::Page', :uniq => true, :join_table => 'alchemy_elements_alchemy_pages'
12
12
 
13
13
  validates_uniqueness_of :position, :scope => [:page_id, :cell_id]
14
- validates_presence_of :name, :on => :create, :message => '^'+Alchemy::I18n.t(:choose_element)
14
+ validates_presence_of :name, :on => :create, :message => '^' + I18n.t(:choose_element)
15
15
 
16
16
  attr_accessor :create_contents_after_create
17
17
 
@@ -152,12 +152,12 @@ module Alchemy
152
152
  # Place a elements.yml file inside your apps config/alchemy folder to define
153
153
  # your own set of elements
154
154
  def self.descriptions
155
- if File.exists? "#{Rails.root}/config/alchemy/elements.yml"
156
- element_definitions = YAML.load_file( "#{Rails.root}/config/alchemy/elements.yml" )
155
+ if ::File.exists? "#{::Rails.root}/config/alchemy/elements.yml"
156
+ element_definitions = ::YAML.load_file( "#{::Rails.root}/config/alchemy/elements.yml" )
157
157
  end
158
158
  if !element_definitions
159
- if File.exists?(File.join(File.dirname(__FILE__), "../../../config/alchemy/elements.yml"))
160
- element_definitions = YAML.load_file( File.join(File.dirname(__FILE__), "../../../config/alchemy/elements.yml") )
159
+ if ::File.exists?(::File.join(::File.dirname(__FILE__), "../../../config/alchemy/elements.yml"))
160
+ element_definitions = ::YAML.load_file( ::File.join(::File.dirname(__FILE__), "../../../config/alchemy/elements.yml") )
161
161
  end
162
162
  end
163
163
  if !element_definitions
@@ -170,7 +170,7 @@ module Alchemy
170
170
  def self.all_for_page(page)
171
171
  raise TypeError if page.class.name != "Alchemy::Page"
172
172
  # if page_layout has cells, collect elements from cells and group them by cellname
173
- page_layout = Alchemy::PageLayout.get(page.page_layout)
173
+ page_layout = PageLayout.get(page.page_layout)
174
174
  if page_layout.blank?
175
175
  logger.warn "\n++++++\nWARNING! Could not find page_layout description for page: #{page.name}\n++++++++\n"
176
176
  return []
@@ -273,7 +273,7 @@ module Alchemy
273
273
  #
274
274
  def display_name
275
275
  return name.capitalize if description.blank?
276
- Alchemy::I18n.t(description['name'], :scope => :element_names)
276
+ I18n.t(description['name'], :scope => :element_names)
277
277
  end
278
278
 
279
279
  # Gets the preview text from the first Content found in the +elements.yml+ Element description file.
@@ -435,7 +435,7 @@ module Alchemy
435
435
  messages = []
436
436
  essence_errors.each do |content_name, errors|
437
437
  errors.each do |error|
438
- messages << Alchemy::I18n.t(
438
+ messages << I18n.t(
439
439
  "content_validations.#{self.name}.#{content_name}.#{error}",
440
440
  :default => [
441
441
  "content_validations.fields.#{content_name}.#{error}".to_sym,
@@ -7,7 +7,7 @@ module Alchemy
7
7
 
8
8
  # Returns the first x (default = 30) (HTML escaped) characters from self.source for the Element#preview_text method.
9
9
  def preview_text(maxlength = 30)
10
- CGI.escapeHTML(source.to_s)[0..maxlength]
10
+ ::CGI.escapeHTML(source.to_s)[0..maxlength]
11
11
  end
12
12
 
13
13
  end
@@ -7,7 +7,7 @@ module Alchemy
7
7
 
8
8
  # Require acts_as_ferret only if Ferret full text search is enabled (default).
9
9
  # You can disable it in +config/alchemy/config.yml+
10
- if Alchemy::Config.get(:ferret) == true
10
+ if Config.get(:ferret) == true
11
11
  require 'acts_as_ferret'
12
12
  acts_as_ferret(
13
13
  :fields => {
@@ -37,11 +37,11 @@ module Alchemy
37
37
  return html if html.blank?
38
38
  if html.index("<")
39
39
  text = ""
40
- tokenizer = HTML::Tokenizer.new(html)
40
+ tokenizer = ::HTML::Tokenizer.new(html)
41
41
  while token = tokenizer.next
42
- node = HTML::Node.parse(nil, 0, 0, token, false)
42
+ node = ::HTML::Node.parse(nil, 0, 0, token, false)
43
43
  # result is only the content of any Text nodes
44
- text << node.to_s if node.class == HTML::Text
44
+ text << node.to_s if node.class == ::HTML::Text
45
45
  end
46
46
  # strip any comments, and if they have a newline at the end (ie. line with
47
47
  # only a comment) strip that too
@@ -5,7 +5,7 @@ module Alchemy
5
5
 
6
6
  # Require acts_as_ferret only if Ferret full text search is enabled (default).
7
7
  # You can disable it in +config/alchemy/config.yml+
8
- if Alchemy::Config.get(:ferret) == true
8
+ if Config.get(:ferret) == true
9
9
  require 'acts_as_ferret'
10
10
  acts_as_ferret(
11
11
  :fields => {
@@ -2,17 +2,18 @@ module Alchemy
2
2
  class Language < ActiveRecord::Base
3
3
 
4
4
  validates_presence_of :name
5
- validates_presence_of :code
5
+ validates_presence_of :language_code
6
6
  validates_presence_of :page_layout
7
7
  validates_presence_of :frontpage_name
8
- validates_uniqueness_of :code
8
+ validates_uniqueness_of :language_code, :scope => :country_code
9
9
  validate :presence_of_default_language
10
10
  validate :publicity_of_default_language
11
11
  has_many :pages
12
12
  after_destroy :delete_language_root_page
13
- validates_format_of :code, :with => /^[a-z]{2}$/
13
+ validates_format_of :language_code, :with => /^[a-z]{2}$/, :if => proc { language_code.present? }
14
+ validates_format_of :country_code, :with => /^[a-z]{2}$/, :if => proc { country_code.present? }
14
15
  before_destroy :check_for_default
15
- after_update :set_pages_language, :if => proc { |m| m.code_changed? }
16
+ after_update :set_pages_language, :if => proc { |m| m.language_code_changed? }
16
17
  after_update :unpublish_pages, :if => proc { changes[:public] == [true, false] }
17
18
  before_save :remove_old_default, :if => proc { |m| m.default_changed? && m != Language.get_default }
18
19
 
@@ -36,15 +37,17 @@ module Alchemy
36
37
  if attrib.to_sym == :code
37
38
  self.code
38
39
  else
39
- Alchemy::I18n.t(self.code, :default => self.name)
40
+ I18n.t(self.code, :default => self.name)
40
41
  end
41
42
  end
42
43
 
44
+ include Code
45
+
43
46
  private
44
47
 
45
48
  def publicity_of_default_language
46
49
  if self.default? && !self.public?
47
- errors.add(:base, Alchemy::I18n.t("Default language has to be public"))
50
+ errors.add(:base, I18n.t("Default language has to be public"))
48
51
  return false
49
52
  else
50
53
  return true
@@ -53,7 +56,7 @@ module Alchemy
53
56
 
54
57
  def presence_of_default_language
55
58
  if Language.get_default == self && self.default_changed?
56
- errors.add(:base, Alchemy::I18n.t("We need at least one default."))
59
+ errors.add(:base, I18n.t("We need at least one default."))
57
60
  return false
58
61
  else
59
62
  return true
@@ -0,0 +1,19 @@
1
+ module Alchemy::Language::Code
2
+ extend ActiveSupport::Concern
3
+
4
+ def code
5
+ [language_code, country_code].select(&:present?).join('-')
6
+ end
7
+
8
+ def code=(code)
9
+ self.language_code = code
10
+ end
11
+
12
+ module ClassMethods
13
+ def find_by_code(code)
14
+ codes = code.split('-')
15
+ codes << nil if codes.length == 1
16
+ find_by_language_code_and_country_code *codes
17
+ end
18
+ end
19
+ end
@@ -33,11 +33,11 @@
33
33
  module Alchemy
34
34
  class Message
35
35
 
36
- @@config = Alchemy::Config.get(:mailer)
36
+ @@config = Config.get(:mailer)
37
37
 
38
- extend ActiveModel::Naming
39
- include ActiveModel::Validations
40
- include ActiveModel::Conversion
38
+ extend ::ActiveModel::Naming
39
+ include ::ActiveModel::Validations
40
+ include ::ActiveModel::Conversion
41
41
 
42
42
  attr_accessor :contact_form_id, :ip
43
43
  @@config[:fields].each do |field|
@@ -45,9 +45,9 @@ module Alchemy
45
45
  end
46
46
 
47
47
  @@config[:validate_fields].each do |field|
48
- validates_presence_of field[0], :message => '^' + Alchemy::I18n.t(field[1][:message].to_s, :scope => "contactform.validations")
48
+ validates_presence_of field[0], :message => '^' + I18n.t(field[1][:message].to_s, :scope => "contactform.validations")
49
49
  if field[0].to_s.include?('email')
50
- validates_format_of field[0], :with => Authlogic::Regex.email, :message => '^' + Alchemy::I18n.t('alchemy.contactform.validations.wrong_email_format'), :if => :email_is_filled
50
+ validates_format_of field[0], :with => ::Authlogic::Regex.email, :message => '^' + I18n.t('alchemy.contactform.validations.wrong_email_format'), :if => :email_is_filled
51
51
  end
52
52
  end
53
53
 
@@ -13,12 +13,12 @@ module Alchemy
13
13
  has_and_belongs_to_many :to_be_sweeped_elements, :class_name => 'Alchemy::Element', :uniq => true, :join_table => 'alchemy_elements_alchemy_pages'
14
14
  belongs_to :language
15
15
 
16
- validates_presence_of :name, :message => '^'+Alchemy::I18n.t("please enter a name")
17
- validates_presence_of :page_layout, :message => '^'+Alchemy::I18n.t("Please choose a page layout."), :unless => :systempage?
18
- validates_presence_of :parent_id, :message => '^'+Alchemy::I18n.t("No parent page was given."), :if => proc { Page.count > 1 }
19
- validates_length_of :urlname, :minimum => 3, :too_short => Alchemy::I18n.t("urlname_to_short"), :if => :urlname_entered?
20
- validates_uniqueness_of :urlname, :message => '^'+Alchemy::I18n.t("URL-Name already token"), :scope => 'language_id', :if => :urlname_entered?
21
- validates :urlname, :exclusion => { :in => RESERVED_URLNAMES, :message => '^'+Alchemy::I18n.t("This urlname is reserved.") }
16
+ validates_presence_of :name, :message => '^' + I18n.t("please enter a name")
17
+ validates_presence_of :page_layout, :message => '^' + I18n.t("Please choose a page layout."), :unless => :systempage?
18
+ validates_presence_of :parent_id, :message => '^' + I18n.t("No parent page was given."), :if => proc { Page.count > 1 }
19
+ validates_length_of :urlname, :minimum => 3, :too_short => I18n.t("urlname_to_short"), :if => :urlname_entered?
20
+ validates_uniqueness_of :urlname, :message => '^' + I18n.t("URL-Name already token"), :scope => 'language_id', :if => :urlname_entered?
21
+ validates :urlname, :exclusion => { :in => RESERVED_URLNAMES, :message => '^' + I18n.t("This urlname is reserved.") }
22
22
 
23
23
  attr_accessor :do_not_autogenerate
24
24
  attr_accessor :do_not_sweep
@@ -110,7 +110,7 @@ module Alchemy
110
110
  end
111
111
 
112
112
  def elements_grouped_by_cells
113
- group = ActiveSupport::OrderedHash.new
113
+ group = ::ActiveSupport::OrderedHash.new
114
114
  self.cells.each { |cell| group[cell] = cell.elements.not_trashed }
115
115
  if element_names_not_in_cell.any?
116
116
  group[Cell.new({:name => 'for_other_elements'})] = elements.not_trashed.not_in_cell
@@ -208,21 +208,21 @@ module Alchemy
208
208
  # Returns the name of the creator of this page.
209
209
  def creator
210
210
  @page_creator ||= User.find_by_id(creator_id)
211
- return Alchemy::I18n.t('unknown') if @page_creator.nil?
211
+ return I18n.t('unknown') if @page_creator.nil?
212
212
  @page_creator.name
213
213
  end
214
214
 
215
215
  # Returns the name of the last updater of this page.
216
216
  def updater
217
217
  @page_updater = User.find_by_id(updater_id)
218
- return Alchemy::I18n.t('unknown') if @page_updater.nil?
218
+ return I18n.t('unknown') if @page_updater.nil?
219
219
  @page_updater.name
220
220
  end
221
221
 
222
222
  # Returns the name of the user currently editing this page.
223
223
  def current_editor
224
224
  @current_editor = User.find_by_id(locked_by)
225
- return Alchemy::I18n.t('unknown') if @current_editor.nil?
225
+ return I18n.t('unknown') if @current_editor.nil?
226
226
  @current_editor.name
227
227
  end
228
228
 
@@ -251,21 +251,21 @@ module Alchemy
251
251
  def humanized_status
252
252
  case self.status
253
253
  when 0
254
- return Alchemy::I18n.t('page_status_visible_public_locked')
254
+ return I18n.t('page_status_visible_public_locked')
255
255
  when 1
256
- return Alchemy::I18n.t('page_status_visible_unpublic_locked')
256
+ return I18n.t('page_status_visible_unpublic_locked')
257
257
  when 2
258
- return Alchemy::I18n.t('page_status_invisible_public_locked')
258
+ return I18n.t('page_status_invisible_public_locked')
259
259
  when 3
260
- return Alchemy::I18n.t('page_status_invisible_unpublic_locked')
260
+ return I18n.t('page_status_invisible_unpublic_locked')
261
261
  when 4
262
- return Alchemy::I18n.t('page_status_visible_public')
262
+ return I18n.t('page_status_visible_public')
263
263
  when 5
264
- return Alchemy::I18n.t('page_status_visible_unpublic')
264
+ return I18n.t('page_status_visible_unpublic')
265
265
  when 6
266
- return Alchemy::I18n.t('page_status_invisible_public')
266
+ return I18n.t('page_status_invisible_public')
267
267
  when 7
268
- return Alchemy::I18n.t('page_status_invisible_unpublic')
268
+ return I18n.t('page_status_invisible_unpublic')
269
269
  end
270
270
  end
271
271
 
@@ -295,7 +295,7 @@ module Alchemy
295
295
  end
296
296
 
297
297
  def has_controller?
298
- !Alchemy::PageLayout.get(self.page_layout).nil? && !Alchemy::PageLayout.get(self.page_layout)["controller"].blank?
298
+ !PageLayout.get(self.page_layout).nil? && !PageLayout.get(self.page_layout)["controller"].blank?
299
299
  end
300
300
 
301
301
  def controller_and_action
@@ -307,7 +307,7 @@ module Alchemy
307
307
  # Returns the self#page_layout description from config/alchemy/page_layouts.yml file.
308
308
  def layout_description
309
309
  return {} if self.systempage?
310
- description = Alchemy::PageLayout.get(self.page_layout)
310
+ description = PageLayout.get(self.page_layout)
311
311
  if description.nil?
312
312
  raise "Description could not be found for page layout named #{self.page_layout}. Please check page_layouts.yml file."
313
313
  else
@@ -326,7 +326,7 @@ module Alchemy
326
326
  # Page layout names are defined inside the config/alchemy/page_layouts.yml file.
327
327
  # Translate the name in your config/locales language yml file.
328
328
  def layout_display_name
329
- Alchemy::I18n.t("alchemy.page_layout_names.#{page_layout}", :default => page_layout.camelize)
329
+ I18n.t("alchemy.page_layout_names.#{page_layout}", :default => page_layout.camelize)
330
330
  end
331
331
 
332
332
  def renamed?
@@ -450,7 +450,7 @@ module Alchemy
450
450
  new_child = Page.copy(child, {
451
451
  :language_id => new_parent.language_id,
452
452
  :language_code => new_parent.language_code,
453
- :name => child.name + ' (' + Alchemy::I18n.t('Copy') + ')',
453
+ :name => child.name + ' (' + I18n.t('Copy') + ')',
454
454
  :urlname => child.redirects_to_external? ? child.urlname : '',
455
455
  :title => ''
456
456
  })
@@ -470,17 +470,17 @@ module Alchemy
470
470
 
471
471
  def self.link_target_options
472
472
  options = [
473
- [Alchemy::I18n.t('default', :scope => :link_target_options), '']
473
+ [I18n.t('default', :scope => :link_target_options), '']
474
474
  ]
475
- link_target_options = Alchemy::Config.get(:link_target_options)
475
+ link_target_options = Config.get(:link_target_options)
476
476
  link_target_options.each do |option|
477
- options << [Alchemy::I18n.t(option, :scope => :link_target_options), option]
477
+ options << [I18n.t(option, :scope => :link_target_options), option]
478
478
  end
479
479
  options
480
480
  end
481
481
 
482
482
  def locker_name
483
- return Alchemy::I18n.t('unknown') if self.locker.nil?
483
+ return I18n.t('unknown') if self.locker.nil?
484
484
  self.locker.name
485
485
  end
486
486
 
@@ -2,17 +2,15 @@ module Alchemy
2
2
  class Picture < ActiveRecord::Base
3
3
 
4
4
  acts_as_fleximage do
5
- image_directory 'uploads/pictures'
6
- image_storage_format Alchemy::Config.get(:image_store_format).to_sym
7
- require_image true
8
- missing_image_message Alchemy::I18n.t("missing_image")
9
- invalid_image_message Alchemy::I18n.t("not a valid image")
10
- if Alchemy::Config.get(:image_output_format) == "jpg"
11
- output_image_jpg_quality Alchemy::Config.get(:output_image_jpg_quality)
12
- end
13
- unless Alchemy::Config.get(:preprocess_image_resize).blank?
5
+ image_directory 'uploads/pictures'
6
+ image_storage_format Config.get(:image_store_format).to_sym
7
+ require_image true
8
+ missing_image_message I18n.t("missing_image")
9
+ invalid_image_message I18n.t("not a valid image")
10
+ output_image_jpg_quality Config.get(:output_image_jpg_quality) if Config.get(:image_output_format) == "jpg"
11
+ unless Config.get(:preprocess_image_resize).blank?
14
12
  preprocess_image do |image|
15
- image.resize Alchemy::Config.get(:preprocess_image_resize)
13
+ image.resize Config.get(:preprocess_image_resize)
16
14
  end
17
15
  end
18
16
  end
@@ -28,14 +26,14 @@ module Alchemy
28
26
 
29
27
  # Returning the filepath relative to Rails.root public folder.
30
28
  def public_file_path
31
- self.file_path.gsub("#{Rails.root}/public", '')
29
+ self.file_path.gsub("#{::Rails.root}/public", '')
32
30
  end
33
31
 
34
32
  def urlname
35
33
  if self.name.blank?
36
34
  "image_#{self.id}"
37
35
  else
38
- CGI.escape(self.name.gsub(/\.(gif|png|jpe?g|tiff?)/i, '').gsub(/\./, ' '))
36
+ ::CGI.escape(self.name.gsub(/\.(gif|png|jpe?g|tiff?)/i, '').gsub(/\./, ' '))
39
37
  end
40
38
  end
41
39
 
@@ -48,7 +46,7 @@ module Alchemy
48
46
  end
49
47
 
50
48
  def humanized_name
51
- (image_filename.to_s.downcase.gsub(/\.#{Regexp.quote(suffix)}$/, '')).humanize
49
+ (image_filename.to_s.downcase.gsub(/\.#{::Regexp.quote(suffix)}$/, '')).humanize
52
50
  end
53
51
 
54
52
  # Returning true if picture's width is greater than it's height
@@ -5,7 +5,7 @@ module Alchemy
5
5
  stampable
6
6
  acts_as_authentic do |c|
7
7
  c.transition_from_restful_authentication = true
8
- c.logged_in_timeout = Alchemy::Config.get(:auto_logout_time).minutes
8
+ c.logged_in_timeout = Config.get(:auto_logout_time).minutes
9
9
  end
10
10
 
11
11
  has_many :folded_pages
@@ -14,7 +14,7 @@ module Alchemy
14
14
 
15
15
  scope :admins, where(:role => 'admin')
16
16
 
17
- ROLES = Alchemy::Config.get(:user_roles)
17
+ ROLES = Config.get(:user_roles)
18
18
 
19
19
  def role_symbols
20
20
  [role.to_sym]
@@ -54,13 +54,13 @@ module Alchemy
54
54
  end
55
55
 
56
56
  def self.human_rolename(role)
57
- Alchemy::I18n.t("user_roles.#{role}")
57
+ I18n.t("user_roles.#{role}")
58
58
  end
59
59
 
60
60
  def self.genders_for_select
61
61
  [
62
- [Alchemy::I18n.t('male'), 'male'],
63
- [Alchemy::I18n.t('female'), 'female']
62
+ [I18n.t('male'), 'male'],
63
+ [I18n.t('female'), 'female']
64
64
  ]
65
65
  end
66
66