alchemy_cms 2.6.3 → 2.7.0

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 (246) hide show
  1. checksums.yaml +4 -4
  2. data/.simplecov +14 -0
  3. data/.travis.yml +1 -1
  4. data/Gemfile +7 -6
  5. data/README.md +15 -5
  6. data/alchemy_cms.gemspec +3 -2
  7. data/app/assets/javascripts/alchemy/alchemy.base.js.coffee +9 -17
  8. data/app/assets/javascripts/alchemy/alchemy.dirty.js.coffee +70 -0
  9. data/app/assets/javascripts/alchemy/alchemy.dragndrop.js.coffee +80 -0
  10. data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +43 -19
  11. data/app/assets/javascripts/alchemy/alchemy.gui.js.coffee +3 -1
  12. data/app/assets/javascripts/alchemy/alchemy.js +4 -2
  13. data/app/assets/javascripts/alchemy/alchemy.onload.js.coffee +1 -1
  14. data/app/assets/javascripts/alchemy/alchemy.spinner.js.coffee +14 -0
  15. data/app/assets/javascripts/alchemy/alchemy.tinymce.js.coffee.erb +96 -0
  16. data/app/assets/javascripts/alchemy/alchemy.translations.js.coffee +22 -0
  17. data/app/assets/javascripts/alchemy/alchemy.windows.js.coffee +28 -17
  18. data/app/assets/stylesheets/alchemy/base.scss +6 -0
  19. data/app/assets/stylesheets/alchemy/elements.scss +2 -28
  20. data/app/assets/stylesheets/alchemy/errors.scss +1 -1
  21. data/app/assets/stylesheets/alchemy/menubar.css.scss +2 -0
  22. data/app/assets/stylesheets/alchemy/sitemap.scss +21 -34
  23. data/app/assets/stylesheets/alchemy/tables.scss +13 -3
  24. data/app/controllers/alchemy/admin/attachments_controller.rb +10 -5
  25. data/app/controllers/alchemy/admin/base_controller.rb +19 -0
  26. data/app/controllers/alchemy/admin/contents_controller.rb +1 -4
  27. data/app/controllers/alchemy/admin/dashboard_controller.rb +2 -1
  28. data/app/controllers/alchemy/admin/elements_controller.rb +1 -1
  29. data/app/controllers/alchemy/admin/essence_files_controller.rb +1 -1
  30. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +70 -56
  31. data/app/controllers/alchemy/admin/pages_controller.rb +37 -114
  32. data/app/controllers/alchemy/admin/pictures_controller.rb +5 -12
  33. data/app/controllers/alchemy/admin/resources_controller.rb +3 -1
  34. data/app/controllers/alchemy/admin/trash_controller.rb +1 -1
  35. data/app/controllers/alchemy/attachments_controller.rb +1 -1
  36. data/app/controllers/alchemy/base_controller.rb +3 -15
  37. data/app/controllers/alchemy/messages_controller.rb +4 -10
  38. data/app/controllers/alchemy/pages_controller.rb +6 -6
  39. data/app/controllers/alchemy/passwords_controller.rb +1 -1
  40. data/app/controllers/alchemy/user_sessions_controller.rb +1 -1
  41. data/app/helpers/alchemy/admin/base_helper.rb +49 -230
  42. data/app/helpers/alchemy/admin/contents_helper.rb +5 -1
  43. data/app/helpers/alchemy/admin/elements_helper.rb +19 -47
  44. data/app/helpers/alchemy/admin/essences_helper.rb +59 -17
  45. data/app/helpers/alchemy/admin/navigation_helper.rb +204 -0
  46. data/app/helpers/alchemy/admin/pages_helper.rb +22 -79
  47. data/app/helpers/alchemy/admin/pictures_helper.rb +1 -1
  48. data/app/helpers/alchemy/admin/tags_helper.rb +42 -0
  49. data/app/helpers/alchemy/base_helper.rb +0 -11
  50. data/app/helpers/alchemy/elements_helper.rb +48 -25
  51. data/app/helpers/alchemy/essences_helper.rb +0 -20
  52. data/app/helpers/alchemy/pages_helper.rb +18 -14
  53. data/app/helpers/alchemy/url_helper.rb +1 -0
  54. data/app/mailers/alchemy/messages.rb +4 -6
  55. data/app/models/alchemy/attachment.rb +3 -0
  56. data/app/models/alchemy/cell.rb +33 -35
  57. data/app/models/alchemy/content.rb +20 -111
  58. data/app/models/alchemy/content/factory.rb +188 -0
  59. data/app/models/alchemy/element.rb +51 -200
  60. data/app/models/alchemy/element/definitions.rb +52 -0
  61. data/app/models/alchemy/element/presenters.rb +87 -0
  62. data/app/models/alchemy/essence_date.rb +1 -1
  63. data/app/models/alchemy/essence_file.rb +6 -7
  64. data/app/models/alchemy/essence_picture.rb +19 -4
  65. data/app/models/alchemy/message.rb +18 -14
  66. data/app/models/alchemy/page.rb +120 -214
  67. data/app/models/alchemy/page/elements.rb +145 -36
  68. data/app/models/alchemy/page/natures.rb +90 -0
  69. data/app/models/alchemy/page/scopes.rb +93 -0
  70. data/app/models/alchemy/page/users.rb +25 -0
  71. data/app/models/alchemy/picture.rb +15 -0
  72. data/app/models/alchemy/site.rb +15 -1
  73. data/app/models/alchemy/site/layout.rb +38 -0
  74. data/app/models/alchemy/user.rb +13 -3
  75. data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +7 -7
  76. data/app/views/alchemy/admin/attachments/_file_to_assign.html.erb +8 -8
  77. data/app/views/alchemy/admin/attachments/_tag_list.html.erb +1 -16
  78. data/app/views/alchemy/admin/attachments/destroy.js.erb +1 -4
  79. data/app/views/alchemy/admin/contents/create.js.erb +1 -1
  80. data/app/views/alchemy/admin/dashboard/index.html.erb +14 -13
  81. data/app/views/alchemy/admin/elements/_element_head.html.erb +7 -7
  82. data/app/views/alchemy/admin/elements/_refresh_editor.js.erb +10 -0
  83. data/app/views/alchemy/admin/elements/create.js.erb +44 -44
  84. data/app/views/alchemy/admin/elements/fold.js.erb +22 -26
  85. data/app/views/alchemy/admin/elements/trash.js.erb +1 -1
  86. data/app/views/alchemy/admin/elements/update.js.erb +22 -25
  87. data/app/views/alchemy/admin/essence_files/assign.js.erb +8 -3
  88. data/app/views/alchemy/admin/essence_pictures/crop.html.erb +14 -12
  89. data/app/views/alchemy/admin/essence_pictures/edit.html.erb +22 -39
  90. data/app/views/alchemy/admin/pages/_page.html.erb +73 -80
  91. data/app/views/alchemy/admin/pages/destroy.js.erb +2 -2
  92. data/app/views/alchemy/admin/pages/edit.html.erb +21 -18
  93. data/app/views/alchemy/admin/pages/fold.js.erb +1 -0
  94. data/app/views/alchemy/admin/pages/info.html.erb +32 -0
  95. data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +11 -13
  96. data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +20 -20
  97. data/app/views/alchemy/admin/partials/_sub_navigation.html.erb +8 -0
  98. data/app/views/alchemy/admin/partials/_toolbar_button.html.erb +25 -0
  99. data/app/views/alchemy/admin/partials/_upload_form.html.erb +15 -15
  100. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +39 -39
  101. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +10 -10
  102. data/app/views/alchemy/admin/pictures/_tag_list.html.erb +1 -16
  103. data/app/views/alchemy/admin/resources/destroy.js.erb +1 -1
  104. data/app/views/alchemy/base/500.html.erb +1 -1
  105. data/app/views/alchemy/base/permission_denied.js.erb +1 -1
  106. data/app/views/alchemy/base/redirect.js.erb +1 -1
  107. data/app/views/alchemy/essences/_essence_link_editor.html.erb +1 -1
  108. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +1 -1
  109. data/app/views/alchemy/essences/_essence_richtext_editor.html.erb +1 -1
  110. data/app/views/alchemy/essences/_essence_text_editor.html.erb +1 -1
  111. data/app/views/alchemy/essences/{_essence_picture_tools.html.erb → shared/_essence_picture_tools.html.erb} +5 -5
  112. data/app/views/alchemy/essences/{_linkable_essence_tools.html.erb → shared/_linkable_essence_tools.html.erb} +0 -0
  113. data/app/views/alchemy/messages/contact_form_mail.de.text.erb +12 -0
  114. data/app/views/alchemy/messages/contact_form_mail.en.text.erb +12 -0
  115. data/app/views/alchemy/notifications/reset_password_instructions.de.text.erb +1 -1
  116. data/app/views/alchemy/notifications/reset_password_instructions.en.text.erb +2 -2
  117. data/app/views/alchemy/pages/sitemap.xml.erb +3 -5
  118. data/app/views/alchemy/user_sessions/leave.html.erb +1 -1
  119. data/app/views/layouts/alchemy/admin.html.erb +4 -2
  120. data/app/views/layouts/alchemy/sitemap.xml.erb +1 -1
  121. data/bin/alchemy +7 -13
  122. data/config/alchemy/config.yml +1 -0
  123. data/config/authorization_rules.rb +2 -3
  124. data/config/initializers/dragonfly.rb +2 -0
  125. data/config/locales/alchemy.de.yml +8 -9
  126. data/config/locales/alchemy.en.yml +7 -4
  127. data/config/routes.rb +3 -0
  128. data/db/migrate/{20130214233001_alchemy_two_point_five.rb → 20130827094554_alchemy_two_point_six.rb} +29 -6
  129. data/lib/alchemy/auth/engine.rb +9 -0
  130. data/lib/alchemy/capistrano.rb +37 -12
  131. data/lib/alchemy/config.rb +48 -35
  132. data/lib/alchemy/engine.rb +35 -6
  133. data/lib/alchemy/essence.rb +25 -29
  134. data/lib/alchemy/ferret/search.rb +86 -0
  135. data/lib/alchemy/{scoped_pagination_url_helper.rb → kaminari/scoped_pagination_url_helper.rb} +0 -0
  136. data/lib/alchemy/logger.rb +3 -4
  137. data/lib/alchemy/page_layout.rb +124 -55
  138. data/lib/alchemy/resource.rb +0 -10
  139. data/lib/alchemy/resources_helper.rb +0 -5
  140. data/lib/alchemy/seeder.rb +1 -32
  141. data/lib/alchemy/shell.rb +6 -1
  142. data/lib/alchemy/tinymce.rb +41 -32
  143. data/lib/alchemy/upgrader.rb +3 -1
  144. data/lib/alchemy/upgrader/two_point_five.rb +15 -8
  145. data/lib/alchemy/upgrader/two_point_one.rb +10 -10
  146. data/lib/alchemy/upgrader/two_point_two.rb +96 -51
  147. data/lib/alchemy/version.rb +1 -1
  148. data/lib/alchemy_cms.rb +5 -46
  149. data/lib/rails/generators/alchemy/deploy_script/templates/deploy.rb.tt +1 -1
  150. data/lib/rails/generators/alchemy/devise/devise_generator.rb +9 -4
  151. data/lib/rails/generators/alchemy/essence/essence_generator.rb +7 -6
  152. data/lib/rails/generators/alchemy/essence/templates/editor.html.erb +1 -1
  153. data/lib/rails/generators/alchemy/scaffold/files/_standard.html.erb +1 -0
  154. data/lib/rails/generators/alchemy/scaffold/scaffold_generator.rb +1 -0
  155. data/lib/rails/generators/alchemy/site_layouts/site_layouts_generator.rb +23 -0
  156. data/lib/rails/generators/alchemy/site_layouts/templates/layout.html.erb +1 -0
  157. data/lib/rails/generators/alchemy/site_layouts/templates/layout.html.haml +1 -0
  158. data/lib/rails/generators/alchemy/site_layouts/templates/layout.html.slim +1 -0
  159. data/lib/rails/templates/alchemy.rb +2 -2
  160. data/lib/tasks/alchemy/db.rake +3 -1
  161. data/lib/tasks/alchemy/tidy.rake +82 -0
  162. data/lib/tasks/alchemy/upgrade.rake +2 -1
  163. data/spec/controllers/admin/attachments_controller_spec.rb +124 -0
  164. data/spec/controllers/admin/base_controller_spec.rb +35 -0
  165. data/spec/controllers/admin/clipboard_controller_spec.rb +1 -1
  166. data/spec/controllers/admin/contents_controller_spec.rb +17 -26
  167. data/spec/controllers/admin/dashboard_controller_spec.rb +121 -0
  168. data/spec/controllers/admin/elements_controller_spec.rb +1 -1
  169. data/spec/controllers/admin/essence_files_controller_spec.rb +67 -0
  170. data/spec/controllers/admin/essence_pictures_controller_spec.rb +161 -0
  171. data/spec/controllers/admin/languages_controller_spec.rb +1 -1
  172. data/spec/controllers/admin/layoutpages_controller_spec.rb +28 -0
  173. data/spec/controllers/admin/pages_controller_spec.rb +164 -118
  174. data/spec/controllers/admin/pictures_controller_spec.rb +89 -0
  175. data/spec/controllers/admin/trash_controller_spec.rb +21 -31
  176. data/spec/controllers/admin/users_controller_spec.rb +114 -85
  177. data/spec/controllers/attachments_controller_spec.rb +6 -2
  178. data/spec/controllers/base_controller_spec.rb +22 -0
  179. data/spec/controllers/elements_controller_spec.rb +1 -1
  180. data/spec/controllers/messages_controller_spec.rb +200 -0
  181. data/spec/controllers/pictures_controller_spec.rb +1 -1
  182. data/spec/controllers/user_sessions_controller_spec.rb +7 -6
  183. data/spec/controllers/users_controller_spec.rb +2 -2
  184. data/spec/dummy/config/alchemy/cells.yml +2 -0
  185. data/spec/dummy/config/application.rb +19 -8
  186. data/spec/dummy/db/migrate/{20130214233001_alchemy_two_point_five.rb → 20130827094554_alchemy_two_point_six.rb} +29 -6
  187. data/spec/dummy/db/schema.rb +1 -1
  188. data/spec/fast_specs.rb +15 -0
  189. data/spec/helpers/admin/base_helper_spec.rb +53 -34
  190. data/spec/helpers/admin/contents_helper_spec.rb +15 -7
  191. data/spec/helpers/admin/elements_helper_spec.rb +79 -34
  192. data/spec/helpers/admin/essences_helper_spec.rb +45 -31
  193. data/spec/helpers/admin/navigation_helper_spec.rb +204 -0
  194. data/spec/helpers/admin/pages_helper_spec.rb +25 -15
  195. data/spec/helpers/admin/tags_helper_spec.rb +62 -2
  196. data/spec/helpers/elements_helper_spec.rb +202 -138
  197. data/spec/helpers/pages_helper_spec.rb +48 -0
  198. data/spec/helpers/url_helper_spec.rb +7 -0
  199. data/spec/libraries/config_spec.rb +110 -3
  200. data/spec/libraries/essence_spec.rb +29 -9
  201. data/spec/libraries/page_layout_spec.rb +134 -0
  202. data/spec/libraries/resource_spec.rb +3 -16
  203. data/spec/libraries/resources_helper_spec.rb +4 -8
  204. data/spec/libraries/shell_spec.rb +1 -0
  205. data/spec/libraries/tinymce_spec.rb +61 -0
  206. data/spec/mailers/messages_spec.rb +23 -0
  207. data/spec/models/attachment_spec.rb +45 -0
  208. data/spec/models/cell_spec.rb +62 -9
  209. data/spec/models/content_spec.rb +110 -28
  210. data/spec/models/element_spec.rb +275 -253
  211. data/spec/models/essence_date_spec.rb +25 -0
  212. data/spec/models/essence_file_spec.rb +23 -0
  213. data/spec/models/essence_html_spec.rb +13 -0
  214. data/spec/models/essence_picture_spec.rb +16 -0
  215. data/spec/models/essence_text_spec.rb +29 -0
  216. data/spec/models/language_spec.rb +34 -0
  217. data/spec/models/message_spec.rb +43 -0
  218. data/spec/models/page_spec.rb +726 -567
  219. data/spec/models/picture_spec.rb +98 -0
  220. data/spec/models/site_spec.rb +60 -2
  221. data/spec/models/tag_spec.rb +31 -0
  222. data/spec/models/user_spec.rb +4 -4
  223. data/spec/spec_helper.rb +49 -58
  224. data/spec/support/alchemy/controller_helpers.rb +35 -0
  225. data/spec/support/alchemy/{specs_helpers.rb → integration_helpers.rb} +4 -8
  226. data/spec/{factories.rb → support/factories.rb} +11 -1
  227. data/vendor/assets/javascripts/jquery_plugins/jquery.ui.nestedSortable.js +2 -8
  228. metadata +166 -106
  229. data/Guardfile +0 -16
  230. data/app/assets/javascripts/alchemy/alchemy.dirty.js +0 -93
  231. data/app/assets/javascripts/alchemy/alchemy.dragndrop.js +0 -122
  232. data/app/models/alchemy/tree_node.rb +0 -4
  233. data/app/views/alchemy/admin/pages/_page_infos.html.erb +0 -3
  234. data/app/views/alchemy/admin/partials/_sub_navigation_tab.html.erb +0 -8
  235. data/app/views/alchemy/messages/contact_form_mail.text.erb +0 -12
  236. data/config/initializers/kaminari_config.rb +0 -9
  237. data/db/migrate/20130221200514_migrate_attachments_to_dragonfly.rb +0 -21
  238. data/db/migrate/20130312205327_change_alchemy_users_role_to_roles.rb +0 -11
  239. data/lib/alchemy/auth_engine.rb +0 -7
  240. data/lib/alchemy/authentication_helpers.rb +0 -9
  241. data/lib/alchemy/ferret_search.rb +0 -84
  242. data/lib/extensions/array.rb +0 -25
  243. data/lib/extensions/hash.rb +0 -34
  244. data/spec/dummy/db/migrate/20130221200514_migrate_attachments_to_dragonfly.rb +0 -21
  245. data/spec/dummy/db/migrate/20130312205327_change_alchemy_users_role_to_roles.rb +0 -11
  246. data/spec/models/page_layout_spec.rb +0 -60
@@ -94,11 +94,6 @@ module Alchemy
94
94
  @_resource_name ||= resources_name.singularize
95
95
  end
96
96
 
97
- def model_name
98
- ActiveSupport::Deprecation.warn("model_name is deprecated. Please use resource_name instead!")
99
- resource_name
100
- end
101
-
102
97
  def namespaced_resource_name
103
98
  return @_namespaced_resource_name unless @_namespaced_resource_name.nil?
104
99
  resource_name_array = resource_array
@@ -106,11 +101,6 @@ module Alchemy
106
101
  @_namespaced_resource_name = resource_name_array.join('_').singularize
107
102
  end
108
103
 
109
- def namespaced_model_name
110
- ActiveSupport::Deprecation.warn("namespaced_model_name is deprecated. Please use namespaced_resource_name instead!")
111
- namespaced_resource_name
112
- end
113
-
114
104
  def permission_scope
115
105
  #(resource_namespaced? ? "#{resource_namespace.underscore}_admin_#{resources_name}" : "admin_#{resources_name}").to_sym
116
106
  @_permission = @controller_path.gsub('/', '_').to_sym
@@ -52,11 +52,6 @@ module Alchemy
52
52
  resource_handler.permission_scope
53
53
  end
54
54
 
55
- def resource_model_name
56
- ActiveSupport::Deprecation.warn("resource_model_name is deprecated. Please use resource_name instead!")
57
- resource_handler.resource_name
58
- end
59
-
60
55
  def resource_name
61
56
  resource_handler.resource_name
62
57
  end
@@ -1,8 +1,7 @@
1
- require "#{File.dirname(__FILE__)}/shell"
1
+ require "alchemy/shell"
2
2
 
3
3
  module Alchemy
4
4
  class Seeder
5
-
6
5
  extend Shell
7
6
 
8
7
  class << self
@@ -14,36 +13,6 @@ module Alchemy
14
13
  create_root_page
15
14
  end
16
15
 
17
- private
18
-
19
- def desc(message)
20
- puts "\n#{message}"
21
- puts "#{'-' * message.length}\n"
22
- end
23
-
24
- def todo(todo)
25
- add_todo todo
26
- end
27
-
28
- def add_todo(todo)
29
- todos << todo
30
- end
31
-
32
- def todos
33
- @@todos ||= []
34
- end
35
-
36
- def display_todos
37
- if todos.length > 0
38
- log "\nTODOS:", :message
39
- log "------\n", :message
40
- todos.each_with_index do |todo, i|
41
- log "\n#{i+1}. ", :message
42
- log todo, :message
43
- end
44
- end
45
- end
46
-
47
16
  protected
48
17
 
49
18
  def create_default_site
@@ -4,10 +4,15 @@ require 'thor/shell/color'
4
4
  module Alchemy
5
5
 
6
6
  # Provides methods for collecting sentences and displaying them
7
- # in a list on the shell / log
7
+ # in a list on the shell / log
8
8
  #
9
9
  module Shell
10
10
 
11
+ def desc(message)
12
+ puts "\n#{message}"
13
+ puts "#{'-' * message.length}\n"
14
+ end
15
+
11
16
  def todo(todo)
12
17
  add_todo todo
13
18
  end
@@ -1,46 +1,41 @@
1
1
  module Alchemy
2
2
  module Tinymce
3
-
4
3
  mattr_accessor :languages, :themes, :plugins, :setup
5
4
 
6
5
  @@setup = nil
7
-
8
6
  @@plugins = %w(alchemy_link autoresize fullscreen inlinepopups paste table)
9
-
10
7
  @@languages = ['en', 'de']
11
-
12
8
  @@themes = ['advanced']
13
-
14
9
  @@init = {
15
- :paste_convert_headers_to_strong => true,
16
- :paste_convert_middot_lists => true,
17
- :paste_remove_spans => true,
18
- :paste_remove_styles => true,
19
- :paste_strip_class_attributes => true,
20
- :theme => 'advanced',
21
- :skin => 'o2k7',
22
- :skin_variant => 'silver',
23
- :inlinepopups_skin => 'alchemy-tinymce-dialog',
24
- :popup_css => "/assets/alchemy/tinymce_dialog.css",
25
- :content_css => "/assets/alchemy/tinymce_content.css",
26
- :dialog_type => "modal",
27
- :width => "100%",
28
- :theme_advanced_resizing => true,
29
- :theme_advanced_resize_horizontal => false,
30
- :theme_advanced_resizing_min_height => '135',
31
- :theme_advanced_toolbar_align => 'left',
32
- :theme_advanced_toolbar_location => 'top',
33
- :theme_advanced_statusbar_location => 'bottom',
34
- :theme_advanced_buttons1 => 'bold,italic,underline,strikethrough,sub,sup,|,numlist,bullist,indent,outdent,|,alchemy_link,unlink,|,removeformat,cleanup,|,fullscreen',
35
- :theme_advanced_buttons2 => 'pastetext,pasteword,charmap,code,help',
36
- :theme_advanced_buttons3 => '',
37
- :fix_list_elements => true,
38
- :convert_urls => false,
39
- :entity_encoding => "raw"
10
+ paste_convert_headers_to_strong: true,
11
+ paste_convert_middot_lists: true,
12
+ paste_remove_spans: true,
13
+ paste_remove_styles: true,
14
+ paste_strip_class_attributes: true,
15
+ theme: 'advanced',
16
+ skin: 'o2k7',
17
+ skin_variant: 'silver',
18
+ inlinepopups_skin: 'alchemy-tinymce-dialog',
19
+ popup_css: "/assets/alchemy/tinymce_dialog.css",
20
+ content_css: "/assets/alchemy/tinymce_content.css",
21
+ dialog_type: "modal",
22
+ width: "100%",
23
+ theme_advanced_resizing: true,
24
+ theme_advanced_resize_horizontal: false,
25
+ theme_advanced_resizing_min_height: '135',
26
+ theme_advanced_toolbar_align: 'left',
27
+ theme_advanced_toolbar_location: 'top',
28
+ theme_advanced_statusbar_location: 'bottom',
29
+ theme_advanced_buttons1: 'bold,italic,underline,strikethrough,sub,sup,|,numlist,bullist,indent,outdent,|,alchemy_link,unlink,|,removeformat,cleanup,|,fullscreen',
30
+ theme_advanced_buttons2: 'pastetext,pasteword,charmap,code,help',
31
+ theme_advanced_buttons3: '',
32
+ fix_list_elements: true,
33
+ convert_urls: false,
34
+ entity_encoding: "raw"
40
35
  }
41
36
 
42
37
  def self.init=(settings)
43
- @@init = @@init.merge(settings)
38
+ @@init.merge!(settings)
44
39
  end
45
40
 
46
41
  def self.init
@@ -48,7 +43,21 @@ module Alchemy
48
43
  end
49
44
 
50
45
  def self.custom_config_contents
51
- @@custom_config_contents ||= Content.descriptions.select { |c| c['settings'] && !c['settings']['tinymce'].nil? }
46
+ @@custom_config_contents ||= content_definitions_from_elements(Element.definitions)
47
+ end
48
+
49
+ def self.page_custom_config_contents(page)
50
+ content_definitions_from_elements(page.element_definitions)
51
+ end
52
+
53
+ private
54
+
55
+ def self.content_definitions_from_elements(definitions)
56
+ definitions.collect do |el|
57
+ contents = el.fetch('contents', []).select { |c| c['settings'] && c['settings']['tinymce'].present? }
58
+ next if contents.blank?
59
+ contents.map { |c| c.merge('element' => el['name']) }
60
+ end.flatten.compact
52
61
  end
53
62
 
54
63
  end
@@ -1,3 +1,5 @@
1
+ require 'alchemy/seeder'
2
+
1
3
  module Alchemy
2
4
  class Upgrader < Alchemy::Seeder
3
5
 
@@ -37,7 +39,7 @@ module Alchemy
37
39
  end
38
40
 
39
41
  # All available upgrade tasks
40
- #
42
+ #
41
43
  def all_upgrade_tasks
42
44
  private_methods - Object.private_methods - superclass.private_methods
43
45
  end
@@ -2,7 +2,7 @@ module Alchemy
2
2
  module Upgrader::TwoPointFive
3
3
 
4
4
  private
5
-
5
+
6
6
  def convert_picture_storage
7
7
  desc "Convert the picture storage"
8
8
  converted_images = []
@@ -49,18 +49,25 @@ We changed the authentication provider from Authlogic to Devise.
49
49
 
50
50
  If you are upgrading from an old Alchemy version < 2.5.0, then you have to make changes to your Devise configuration.
51
51
 
52
- 1. Run:
52
+ 1. Add devise-encryptable to your Gemfile
53
+
54
+ # Gemfile
55
+ gem 'devise-encryptable'
56
+
57
+ $ bundle install
58
+
59
+ 2. Generate devise config:
53
60
 
54
61
  $ rails g alchemy:devise
55
62
 
56
- And alter the encryptor to authlogic_sha512
57
- and the stretches value from 10 to 20
63
+ And alter the encryptor and stretches values
58
64
 
59
65
  # config/initializers/devise.rb
60
- config.stretches = Rails.env.test? ? 1 : 20
61
- config.encryptor = :authlogic_sha512
66
+ ...
67
+ config.stretches = Rails.env.test? ? 1 : 20
68
+ config.encryptor = :authlogic_sha512
62
69
 
63
- 2. Add the encryptable module to your Alchemy config.yml:
70
+ 3. Add the encryptable module to your Alchemy config.yml:
64
71
 
65
72
  # config/alchemy/config.yml
66
73
  devise_modules:
@@ -74,6 +81,6 @@ devise_modules:
74
81
  WARN
75
82
  todo warn
76
83
  end
77
-
84
+
78
85
  end
79
86
  end
@@ -7,18 +7,18 @@ module Alchemy
7
7
  # Also creates missing associations between pages and languages
8
8
  def upgrade_to_language
9
9
  desc "Creating languages for pages"
10
- Alchemy::Page.all.each do |page|
11
- if !page.language_code.blank? && page.language.nil?
10
+ Alchemy::Page.contentpages.each do |page|
11
+ if page.language_id.nil? && page.language_code.present?
12
12
  root = page.get_language_root
13
13
  lang = Alchemy::Language.find_or_create_by_language_code(
14
- :name => page.language_code.capitalize,
15
- :language_code => page.language_code,
16
- :frontpage_name => root.name,
17
- :page_layout => root.page_layout,
18
- :public => true
14
+ name: page.language_code.capitalize,
15
+ language_code: page.language_code,
16
+ frontpage_name: root.name,
17
+ page_layout: root.page_layout,
18
+ public: true
19
19
  )
20
20
  page.language = lang
21
- if page.save(:validate => false)
21
+ if page.save(validate: false)
22
22
  log "Set language for page #{page.name} to #{lang.name}."
23
23
  end
24
24
  else
@@ -34,9 +34,9 @@ module Alchemy
34
34
  layoutpages = Alchemy::Page.layoutpages
35
35
  if layoutpages.any?
36
36
  layoutpages.each do |page|
37
- if page.language.class == String || page.language.nil?
37
+ if page.language_id.nil?
38
38
  page.language = default_language
39
- if page.save(:validate => false)
39
+ if page.save(validate: false)
40
40
  log "Set language for page #{page.name} to #{default_language.name}."
41
41
  end
42
42
  else
@@ -1,69 +1,114 @@
1
1
  module Alchemy
2
2
  module Upgrader::TwoPointTwo
3
3
 
4
- private
5
-
6
- def convert_essence_texts_displayed_as_select_into_essence_selects
7
- desc "Converting EssenceTexts displayed as select into EssenceSelects"
8
- contents_found = 0
9
- elements = Alchemy::Element.descriptions.select { |e| e['contents'].present? && !e['contents'].detect { |c| c['settings'].present? && c['settings']['display_as'] == 'select' }.nil? }
10
- contents = elements.collect { |el| el['contents'] }.flatten.select { |c| c['settings'] && c['settings']['display_as'] == 'select' }.flatten
11
- content_names = contents.collect { |c| c['name'] }
12
- Alchemy::Content.essence_texts.where(
13
- :name => content_names,
14
- :alchemy_elements => {:name => elements.collect { |e| e['name'] }}
15
- ).joins(:element).each do |content|
16
- new_content = Alchemy::Content.new(:name => content.name, :element_id => content.element.id)
17
- if new_content.create_essence!('name' => content.name, 'type' => 'EssenceSelect')
18
- new_content.essence.value = content.ingredient
19
- if new_content.essence.save
20
- contents_found += 1
21
- log "Converted #{content.name}'s essence_type into EssenceSelect"
22
- content.destroy
23
- else
24
- log "Could not save essence: #{new_content.essence.errors.full_messages.join(', ')}", :error
4
+ class ContentsConverter
5
+ include Alchemy::Shell
6
+
7
+ def initialize(display_as, essence_type)
8
+ @contents_found = 0
9
+ @display_as = display_as
10
+ @essence_type = essence_type
11
+ end
12
+
13
+ def convert!
14
+ if essence_texts.any?
15
+ essence_texts.each do |content|
16
+ convert_content(content)
25
17
  end
26
18
  else
27
- log "Could not create content: #{new_content.errors.full_messages.join(', ')}", :error
19
+ log "No EssenceTexts displayed as #{@display_as} found.", :skip
28
20
  end
29
21
  end
30
- if contents_found > 0
31
- todo "Please open your elements.yml file and change all type values from these contents:\n\n#{content_names.join(', ')}\n\ninto EssenceSelect."
32
- else
33
- log "No EssenceTexts with display_as select setting found.", :skip
22
+
23
+ private
24
+
25
+ def essence_texts
26
+ Alchemy::Content.essence_texts.where(
27
+ :name => content_names,
28
+ :alchemy_elements => {:name => elements.collect { |e| e['name'] }}
29
+ ).joins(:element)
34
30
  end
35
- end
36
31
 
37
- def convert_essence_texts_displayed_as_checkbox_into_essence_booleans
38
- desc "Converting EssenceTexts displayed as checkbox into EssenceBooleans"
39
- contents_found = 0
40
- elements = Alchemy::Element.descriptions.select { |e| e['contents'].present? && !e['contents'].detect { |c| c['settings'].present? && c['settings']['display_as'] == 'checkbox' }.nil? }
41
- contents = elements.collect { |el| el['contents'] }.flatten.select { |c| c['settings'] && c['settings']['display_as'] == 'checkbox' }.flatten
42
- content_names = contents.collect { |c| c['name'] }
43
- Alchemy::Content.essence_texts.where(
44
- :name => content_names,
45
- :alchemy_elements => {:name => elements.collect { |e| e['name'] }}
46
- ).joins(:element).each do |content|
47
- new_content = Alchemy::Content.new(:name => content.name, :element_id => content.element.id)
48
- if new_content.create_essence!('name' => content.name, 'type' => 'EssenceBoolean')
49
- new_content.essence.value = content.ingredient
50
- if new_content.essence.save
51
- contents_found += 1
52
- log "Converted #{content.name}'s essence_type into EssenceBoolean"
53
- content.destroy
54
- else
55
- log "Could not save essence: #{new_content.essence.errors.full_messages.join(', ')}", :error
56
- end
32
+ def content_names
33
+ @content_names ||= contents.collect { |c| c['name'] }
34
+ end
35
+
36
+ def contents
37
+ @contents ||= elements.collect { |el|
38
+ el['contents']
39
+ }.flatten.select { |c|
40
+ c['settings'] && c['settings']['display_as'] == @display_as
41
+ }.flatten
42
+ end
43
+
44
+ def elements
45
+ @elements ||= Alchemy::Element.descriptions.select { |e|
46
+ e['contents'].present? && !e['contents'].detect { |c|
47
+ c['settings'].present? && c['settings']['display_as'] == @display_as
48
+ }.nil?
49
+ }
50
+ end
51
+
52
+ def convert_content(content)
53
+ if @new_content = new_content_from(content)
54
+ update_content(content)
57
55
  else
58
56
  log "Could not create content: #{new_content.errors.full_messages.join(', ')}", :error
59
57
  end
60
58
  end
61
- if contents_found > 0
62
- todo "Please open your elements.yml file and change all type values from these contents:\n\n#{content_names.join(', ')}\n\ninto EssenceBoolean."
63
- else
64
- log "No EssenceTexts with display_as checkbox setting found.", :skip
59
+
60
+ def new_content_from(content)
61
+ content = Alchemy::Content.create(
62
+ element_id: content.element.id,
63
+ name: content.name,
64
+ essence_type: essence_class
65
+ )
66
+ content.essence = essence_class.constantize.create
67
+ content
68
+ end
69
+
70
+ def essence_class
71
+ "Alchemy::#{@essence_type.classify}"
72
+ end
73
+
74
+ def update_content(content)
75
+ if update_essence_from(content)
76
+ @contents_found += 1
77
+ content.destroy
78
+ log "Converted #{content.name}'s essence_type into #{@essence_type}"
79
+ else
80
+ log "Could not save essence: #{new_content.essence.errors.full_messages.join(', ')}", :error
81
+ end
82
+ end
83
+
84
+ def update_essence_from(content)
85
+ @new_content.essence.ingredient = content.ingredient
86
+ @new_content.essence.save!
87
+ end
88
+
89
+ def display_result
90
+ if @contents_found > 0
91
+ todo "Please open your elements.yml file and change all type values from these contents:\n\n#{@content_names.join(', ')}\n\ninto #{@essence_type}."
92
+ else
93
+ log "No EssenceTexts with display_as #{@display_as} setting found.", :skip
94
+ end
65
95
  end
66
96
  end
67
97
 
98
+ private
99
+
100
+ def convert_essence_texts_displayed_as_select_into_essence_selects
101
+ desc "Converting all EssenceTexts displayed as select into EssenceSelects"
102
+ converter = ContentsConverter.new('select', 'EssenceSelect')
103
+ converter.convert!
104
+ end
105
+
106
+ def convert_essence_texts_displayed_as_checkbox_into_essence_booleans
107
+ desc "Converting all EssenceTexts displayed as checkbox into EssenceBooleans"
108
+ converter = ContentsConverter.new('checkbox', 'EssenceBoolean')
109
+ converter.convert!
110
+ end
111
+
68
112
  end
113
+
69
114
  end