locomotive_cms 0.0.4 → 1.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (229) hide show
  1. data/Gemfile +15 -13
  2. data/README.textile +5 -4
  3. data/app/controllers/admin/api_contents_controller.rb +10 -1
  4. data/app/controllers/admin/base_controller.rb +2 -2
  5. data/app/controllers/admin/cross_domain_sessions_controller.rb +7 -4
  6. data/app/controllers/admin/current_sites_controller.rb +2 -0
  7. data/app/controllers/admin/imports_controller.rb +13 -19
  8. data/app/controllers/admin/installation_controller.rb +79 -0
  9. data/app/controllers/admin/pages_controller.rb +1 -1
  10. data/app/controllers/admin/passwords_controller.rb +2 -2
  11. data/app/controllers/admin/sessions_controller.rb +2 -2
  12. data/app/controllers/admin/sites_controller.rb +2 -0
  13. data/app/controllers/admin/theme_assets_controller.rb +1 -1
  14. data/app/controllers/application_controller.rb +1 -1
  15. data/app/helpers/admin/assets_helper.rb +0 -6
  16. data/app/helpers/admin/{login_helper.rb → box_helper.rb} +7 -3
  17. data/app/helpers/admin/custom_fields_helper.rb +2 -2
  18. data/app/models/asset_collection.rb +15 -3
  19. data/app/models/content_instance.rb +19 -0
  20. data/app/models/content_type.rb +21 -3
  21. data/app/models/extensions/page/tree.rb +63 -7
  22. data/app/models/page.rb +2 -0
  23. data/app/models/site.rb +15 -3
  24. data/app/uploaders/asset_uploader.rb +1 -1
  25. data/app/uploaders/theme_asset_uploader.rb +12 -1
  26. data/app/uploaders/theme_uploader.rb +19 -0
  27. data/app/views/admin/asset_collections/edit.html.haml +2 -2
  28. data/app/views/admin/asset_collections/new.html.haml +1 -1
  29. data/app/views/admin/assets/_form.html.haml +2 -2
  30. data/app/views/admin/content_types/_form.html.haml +2 -2
  31. data/app/views/admin/content_types/new.html.haml +1 -1
  32. data/app/views/admin/contents/_form.html.haml +2 -2
  33. data/app/views/admin/contents/index.html.haml +1 -1
  34. data/app/views/admin/cross_domain_sessions/new.html.haml +1 -1
  35. data/app/views/admin/current_sites/_form.html.haml +3 -3
  36. data/app/views/admin/current_sites/edit.html.haml +1 -1
  37. data/app/views/admin/errors/no_page.html.haml +1 -0
  38. data/app/views/admin/errors/no_site.html.haml +1 -0
  39. data/app/views/admin/imports/new.html.haml +11 -0
  40. data/app/views/admin/imports/show.html.haml +1 -1
  41. data/app/views/admin/installation/step_1.html.haml +24 -0
  42. data/app/views/admin/installation/step_2.html.haml +26 -0
  43. data/app/views/admin/installation/step_3.html.haml +23 -0
  44. data/app/views/{layouts/admin → admin/layouts}/application.html.haml +0 -0
  45. data/app/views/admin/layouts/box.html.haml +21 -0
  46. data/app/views/admin/layouts/error.html.haml +1 -0
  47. data/app/views/admin/my_accounts/edit.html.haml +1 -1
  48. data/app/views/admin/pages/_form.html.haml +2 -3
  49. data/app/views/admin/pages/_page.html.haml +4 -2
  50. data/app/views/admin/pages/index.html.haml +1 -1
  51. data/app/views/admin/passwords/edit.html.haml +2 -2
  52. data/app/views/admin/passwords/new.html.haml +2 -2
  53. data/app/views/admin/sessions/new.html.haml +2 -2
  54. data/app/views/admin/shared/_head.html.haml +4 -5
  55. data/app/views/admin/shared/menu/_contents.html.haml +1 -1
  56. data/app/views/admin/sites/_form.html.haml +3 -3
  57. data/app/views/admin/snippets/_form.html.haml +2 -2
  58. data/app/views/admin/theme_assets/_form.html.haml +2 -2
  59. data/app/views/admin/theme_assets/index.html.haml +1 -1
  60. data/config/application.rb +1 -3
  61. data/config/assets.yml +96 -0
  62. data/config/environments/development.rb +1 -6
  63. data/config/environments/production.rb +1 -1
  64. data/config/environments/test.rb +1 -5
  65. data/config/initializers/carrierwave.rb +17 -0
  66. data/config/initializers/locomotive.rb +14 -0
  67. data/config/locales/admin_ui_en.yml +33 -1
  68. data/config/locales/admin_ui_fr.yml +34 -1
  69. data/config/locales/default_en.yml +1 -0
  70. data/config/locales/default_fr.yml +1 -0
  71. data/config/locales/flash.en.yml +1 -0
  72. data/config/locales/flash.fr.yml +1 -0
  73. data/config/mongoid.yml +13 -5
  74. data/config/routes.rb +6 -1
  75. data/lib/generators/locomotive/install/install_generator.rb +18 -10
  76. data/lib/generators/locomotive/install/templates/README +23 -13
  77. data/lib/generators/locomotive/install/templates/locomotive.rb +15 -1
  78. data/lib/locomotive/carrierwave.rb +1 -0
  79. data/lib/locomotive/configuration.rb +3 -1
  80. data/lib/locomotive/custom_fields.rb +0 -1
  81. data/lib/locomotive/delayed_job.rb +1 -2
  82. data/lib/locomotive/engine.rb +24 -7
  83. data/lib/locomotive/heroku.rb +1 -0
  84. data/lib/locomotive/httparty/webservice.rb +12 -1
  85. data/lib/locomotive/import.rb +2 -0
  86. data/lib/locomotive/import/asset_collections.rb +40 -8
  87. data/lib/locomotive/import/assets.rb +20 -12
  88. data/lib/locomotive/import/base.rb +46 -0
  89. data/lib/locomotive/import/content_types.rb +51 -15
  90. data/lib/locomotive/import/job.rb +106 -11
  91. data/lib/locomotive/import/logger.rb +13 -0
  92. data/lib/locomotive/import/pages.rb +79 -26
  93. data/lib/locomotive/import/site.rb +3 -5
  94. data/lib/locomotive/import/snippets.rb +6 -8
  95. data/lib/locomotive/inherited_resources.rb +1 -0
  96. data/lib/locomotive/liquid/drops/asset_collections.rb +4 -4
  97. data/lib/locomotive/liquid/drops/contents.rb +21 -16
  98. data/lib/locomotive/liquid/drops/page.rb +4 -0
  99. data/lib/locomotive/liquid/filters/html.rb +15 -29
  100. data/lib/locomotive/liquid/tags/consume.rb +1 -1
  101. data/lib/locomotive/liquid/tags/nav.rb +48 -17
  102. data/lib/locomotive/liquid/tags/paginate.rb +3 -3
  103. data/lib/locomotive/middlewares/fonts.rb +3 -11
  104. data/lib/locomotive/misc_form_builder.rb +2 -7
  105. data/lib/locomotive/railties/tasks.rake +16 -0
  106. data/lib/locomotive/regexps.rb +1 -1
  107. data/lib/locomotive/render.rb +9 -3
  108. data/lib/locomotive/routing/site_dispatcher.rb +10 -6
  109. data/lib/locomotive/version.rb +1 -1
  110. data/public/images/admin/box/buttons/right_bg.png +0 -0
  111. data/public/javascripts/admin/aloha/VERSION.txt +1 -1
  112. data/public/javascripts/admin/aloha/aloha-nodeps.js +140 -101
  113. data/public/javascripts/admin/aloha/aloha.js +193 -105
  114. data/public/javascripts/admin/aloha/css/aloha.css +65 -4
  115. data/public/javascripts/admin/aloha/deps/prettyPhoto/resources/css/prettyPhoto.css +2 -2
  116. data/public/javascripts/admin/aloha/i18n/de.dict +2 -0
  117. data/public/javascripts/admin/aloha/i18n/en.dict +2 -0
  118. data/public/javascripts/admin/aloha/i18n/pl.dict +5 -0
  119. data/public/javascripts/admin/aloha/images/base.png +0 -0
  120. data/public/javascripts/admin/aloha/images/base_big.png +0 -0
  121. data/public/javascripts/admin/aloha/images/base_multi.png +0 -0
  122. data/public/javascripts/admin/aloha/images/fade_in.png +0 -0
  123. data/public/javascripts/admin/aloha/images/fade_out.png +0 -0
  124. data/public/javascripts/admin/aloha/images/gentics_logo.png +0 -0
  125. data/public/javascripts/admin/aloha/images/grabhandle.png +0 -0
  126. data/public/javascripts/admin/aloha/images/maximize.png +0 -0
  127. data/public/javascripts/admin/aloha/images/pin.png +0 -0
  128. data/public/javascripts/admin/aloha/images/removeformat.png +0 -0
  129. data/public/javascripts/admin/aloha/plugins/com.example.aloha.plugins.Product/examples/triSports.css +86 -0
  130. data/public/javascripts/admin/aloha/plugins/com.example.aloha.plugins.Product/examples/triSports.html +44 -0
  131. data/public/javascripts/admin/aloha/plugins/com.example.aloha.plugins.Product/i18n/de.dict +4 -0
  132. data/public/javascripts/admin/aloha/plugins/com.example.aloha.plugins.Product/i18n/en.dict +4 -0
  133. data/public/javascripts/admin/aloha/plugins/com.example.aloha.plugins.Product/i18n/fr.dict +4 -0
  134. data/public/javascripts/admin/aloha/plugins/com.example.aloha.plugins.Product/plugin.js +1 -0
  135. data/public/javascripts/admin/aloha/plugins/com.example.aloha.plugins.Product/product.js +1 -0
  136. data/public/javascripts/admin/aloha/plugins/com.example.aloha.plugins.Product/resources/2xu-wetsuit.jpg +0 -0
  137. data/public/javascripts/admin/aloha/plugins/com.example.aloha.plugins.Product/resources/asics-noosa.jpg +0 -0
  138. data/public/javascripts/admin/aloha/plugins/com.example.aloha.plugins.Product/resources/fivefingers-kso.jpg +0 -0
  139. data/public/javascripts/admin/aloha/plugins/com.example.aloha.plugins.Product/resources/kuota-kueen-k.jpg +0 -0
  140. data/public/javascripts/admin/aloha/plugins/com.example.aloha.plugins.Product/resources/mizuno-wave-musha2.jpg +0 -0
  141. data/public/javascripts/admin/aloha/plugins/com.example.aloha.plugins.Product/resources/product.css +69 -0
  142. data/public/javascripts/admin/aloha/plugins/com.example.aloha.plugins.Product/resources/product_button.gif +0 -0
  143. data/public/javascripts/admin/aloha/plugins/com.example.aloha.plugins.Product/resources/simplon-mrt.jpg +0 -0
  144. data/public/javascripts/admin/aloha/plugins/com.example.aloha.plugins.Product/resources/trek-fuel-ex.jpg +0 -0
  145. data/public/javascripts/admin/aloha/plugins/com.example.aloha.plugins.Product/resources/trisports.jpg +0 -0
  146. data/public/javascripts/admin/aloha/plugins/com.example.aloha.plugins.Product/resources/zoggs-predator.jpg +0 -0
  147. data/public/javascripts/admin/aloha/plugins/{com.example.aloha.DummySave → com.example.aloha.plugins.Save}/i18n/de.dict +0 -0
  148. data/public/javascripts/admin/aloha/plugins/{com.example.aloha.DummySave → com.example.aloha.plugins.Save}/i18n/en.dict +0 -0
  149. data/public/javascripts/admin/aloha/plugins/{com.example.aloha.DummySave → com.example.aloha.plugins.Save}/i18n/fi.dict +0 -0
  150. data/public/javascripts/admin/aloha/plugins/{com.example.aloha.DummySave → com.example.aloha.plugins.Save}/i18n/fr.dict +0 -0
  151. data/public/javascripts/admin/aloha/plugins/{com.example.aloha.DummySave → com.example.aloha.plugins.Save}/i18n/it.dict +0 -0
  152. data/public/javascripts/admin/aloha/plugins/{com.example.aloha.DummySave → com.example.aloha.plugins.Save}/plugin.js +0 -0
  153. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Abbr/examples/AlohaAbbr.css +48 -0
  154. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Abbr/examples/AlohaAbbr.html +69 -0
  155. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Abbr/i18n/de.dict +4 -0
  156. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Abbr/i18n/en.dict +4 -0
  157. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Abbr/plugin.js +7 -0
  158. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Format/i18n/pl.dict +30 -0
  159. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Format/plugin.js +1 -1
  160. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.HighlightEditables/plugin.js +1 -1
  161. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Link/LinkList.js +7 -0
  162. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Link/delicious.js +7 -0
  163. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Link/i18n/pl.dict +4 -0
  164. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Link/plugin.js +1 -1
  165. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.LinkChecker/css/LinkChecker.css +14 -0
  166. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.LinkChecker/examples/AlohaLinkChecker.css +49 -0
  167. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.LinkChecker/examples/AlohaLinkChecker.html +82 -0
  168. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.LinkChecker/i18n/en.dict +27 -0
  169. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.LinkChecker/plugin.js +7 -0
  170. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.LinkChecker/proxy.php +235 -0
  171. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.List/plugin.js +1 -1
  172. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Paste/plugin.js +7 -0
  173. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Paste/wordpastehandler.js +7 -0
  174. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.TOC/i18n/de.dict +1 -0
  175. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.TOC/i18n/en.dict +1 -0
  176. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.TOC/plugin.js +1 -1
  177. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Table/i18n/de.dict +2 -0
  178. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Table/i18n/en.dict +2 -0
  179. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Table/i18n/pl.dict +12 -0
  180. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Table/plugin.js +1 -1
  181. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Table/resources/table.css +28 -110
  182. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Table/resources/wai_green.png +0 -0
  183. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Table/resources/wai_red.png +0 -0
  184. data/public/javascripts/admin/asset_collections.js +11 -7
  185. data/public/javascripts/admin/contents.js +3 -1
  186. data/public/javascripts/admin/site.js +9 -3
  187. data/public/javascripts/admin/snippets.js +1 -1
  188. data/public/javascripts/admin/utils.js +5 -3
  189. data/public/stylesheets/admin/application.css +1 -1
  190. data/public/stylesheets/admin/box.css +5 -5
  191. data/public/stylesheets/admin/buttons.css +0 -5
  192. data/public/stylesheets/admin/formtastic_changes.css +5 -12
  193. data/public/stylesheets/admin/inline_editor.css +22 -5
  194. data/public/stylesheets/admin/installation.css +50 -0
  195. data/public/stylesheets/admin/layout.css +9 -4
  196. data/public/stylesheets/admin/safari.css +15 -0
  197. metadata +188 -131
  198. data/app/controllers/home_controller.rb +0 -7
  199. data/app/views/admin/snippets/index.html.haml +0 -15
  200. data/app/views/home/show.html.haml +0 -4
  201. data/app/views/layouts/admin/box.html.haml +0 -19
  202. data/app/views/layouts/application.html.haml +0 -7
  203. data/lib/generators/locomotive/copy_assets/copy_assets_generator.rb +0 -14
  204. data/public/javascripts/admin/aloha/plugins/com.example.aloha.DummyDC/i18n/de.dict +0 -2
  205. data/public/javascripts/admin/aloha/plugins/com.example.aloha.DummyDC/i18n/en.dict +0 -2
  206. data/public/javascripts/admin/aloha/plugins/com.example.aloha.DummyDC/i18n/eo.dict +0 -2
  207. data/public/javascripts/admin/aloha/plugins/com.example.aloha.DummyDC/i18n/fi.dict +0 -2
  208. data/public/javascripts/admin/aloha/plugins/com.example.aloha.DummyDC/i18n/fr.dict +0 -2
  209. data/public/javascripts/admin/aloha/plugins/com.example.aloha.DummyDC/i18n/it.dict +0 -2
  210. data/public/javascripts/admin/aloha/plugins/com.example.aloha.DummyDC/plugin.js +0 -7
  211. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.GCN/i18n/de.dict +0 -20
  212. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.GCN/i18n/en.dict +0 -20
  213. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.GCN/i18n/eo.dict +0 -16
  214. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.GCN/i18n/fi.dict +0 -20
  215. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.GCN/i18n/fr.dict +0 -16
  216. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.GCN/i18n/it.dict +0 -20
  217. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.GCN/plugin.js +0 -7
  218. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Link/css/jquery.autocomplete.css +0 -48
  219. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Link/deps/jquery.autocomplete.js +0 -1
  220. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Link/ressource.js +0 -7
  221. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Link/ressourcedummy.js +0 -7
  222. data/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Link/ressourceregistry.js +0 -7
  223. data/public/javascripts/admin/aloha/plugins/eu.iksproject.plugins.Loader/plugin.js +0 -1
  224. data/public/javascripts/admin/aloha/plugins/eu.iksproject.plugins.Person/i18n/en.dict +0 -2
  225. data/public/javascripts/admin/aloha/plugins/eu.iksproject.plugins.Person/i18n/fi.dict +0 -2
  226. data/public/javascripts/admin/aloha/plugins/eu.iksproject.plugins.Person/i18n/fr.dict +0 -2
  227. data/public/javascripts/admin/aloha/plugins/eu.iksproject.plugins.Person/person.css +0 -3
  228. data/public/javascripts/admin/aloha/plugins/eu.iksproject.plugins.Person/plugin.js +0 -1
  229. data/public/javascripts/admin/aloha/plugins/simpletable/plugin.js.deactivated +0 -2330
data/Gemfile CHANGED
@@ -8,8 +8,9 @@ gem 'warden'
8
8
  gem 'devise', '= 1.1.3'
9
9
 
10
10
  gem 'mongoid', '2.0.0.beta.19'
11
- gem 'bson_ext', '1.1.1'
11
+ gem 'bson_ext', '1.1.5'
12
12
  gem 'locomotive_mongoid_acts_as_tree', '0.1.5.1', :require => 'mongoid_acts_as_tree'
13
+ gem 'will_paginate'
13
14
 
14
15
  gem 'haml', '= 3.0.18'
15
16
  gem 'locomotive_liquid', '2.2.2', :require => 'liquid'
@@ -17,38 +18,39 @@ gem 'formtastic', '>= 1.1.0'
17
18
  gem 'inherited_resources', '>= 1.1.2'
18
19
 
19
20
  gem 'rmagick', '= 2.12.2'
20
- gem 'locomotive_carrierwave', :require => 'carrierwave'
21
+ gem 'locomotive_carrierwave', '0.5.0.1.beta2', :require => 'carrierwave'
21
22
 
22
- gem 'custom_fields', '1.0.0.beta'
23
- gem 'fog'
23
+ gem 'custom_fields', '1.0.0.beta2'
24
+ gem 'fog', '0.3.7'
24
25
  gem 'mimetype-fu'
25
26
  gem 'actionmailer-with-request'
26
27
  gem 'heroku'
27
28
  gem 'httparty', '>= 0.6.1'
28
29
  gem 'RedCloth'
29
- gem 'delayed_job', '2.1.0.pre2'
30
- gem 'delayed_job_mongoid', '1.0.0.rc'
30
+ gem 'delayed_job', '2.1.2'
31
+ gem 'delayed_job_mongoid', '1.0.1'
31
32
  gem 'rubyzip'
33
+ gem 'locomotive_jammit-s3', :require => 'jammit-s3'
32
34
 
33
35
  # The rest of the dependencies are for use when in the locomotive dev environment
34
36
 
35
37
  group :development do
36
- # Using mongrel instead of webrick (default server)
37
- gem 'mongrel'
38
- gem 'cgi_multipart_eof_fix'
39
- gem 'fastthread'
38
+ # Using unicorn_rails instead of webrick (default server)
39
+ gem 'unicorn'
40
40
  end
41
41
 
42
42
  group :test, :development do
43
- gem 'ruby-debug'
43
+ gem "ruby-debug", :platforms => :mri_18
44
+ gem "ruby-debug19", :platforms => :mri_19
44
45
  end
45
46
 
46
47
  group :test do
47
48
  gem 'autotest'
49
+ gem 'ZenTest'
48
50
  gem 'growl-glue'
49
- gem 'rspec-rails', '>= 2.0.0.beta.18'
51
+ gem 'rspec-rails', '2.3.1'
50
52
  gem 'factory_girl_rails'
51
- gem 'pickle', :git => 'http://github.com/ianwhite/pickle.git'
53
+ gem 'pickle'
52
54
  gem 'capybara'
53
55
 
54
56
  gem 'database_cleaner'
@@ -5,7 +5,7 @@ Locomotive is a simple but powerful CMS based on liquid templates and mongodb da
5
5
  If we have to give only 5 main features to describe our application, there will be:
6
6
 
7
7
  * managing as many websites as you want with one application instance
8
- * nice looking UI (see http://www.locomotiveapp.org for some screenshots)
8
+ * nice looking UI (see http://www.locomotivecms.com for some screenshots)
9
9
  * flexible content types
10
10
  * playing smoothly with Heroku and MongoHQ
11
11
  * inline editing (beta)
@@ -19,17 +19,18 @@ h2. Gems
19
19
 
20
20
  Here is a short list of main gems used in the application.
21
21
 
22
- * Rails 3.0
23
- * Mongoid 2.0.0.beta 17 (with MongoDB 1.6)
22
+ * Rails 3.0.3
23
+ * Mongoid 2.0.0.beta 19 (with MongoDB 1.6)
24
24
  * Liquid
25
25
  * Devise
26
26
  * Carrierwave
27
27
  * Haml
28
28
  * Delayed job
29
+ * Jammit-s3
29
30
 
30
31
  h2. Installation
31
32
 
32
- See the "official website":http://www.locomotiveapp.org
33
+ See the "official website":http://www.locomotivecms.com
33
34
 
34
35
  h2. Team
35
36
 
@@ -13,8 +13,17 @@ module Admin
13
13
  respond_to do |format|
14
14
  if @content.save
15
15
  format.json { render :json => { :content => @content } }
16
+ format.html do
17
+ flash[@content_type.slug.singularize] = @content.aliased_attributes
18
+ redirect_to params[:success_callback]
19
+ end
16
20
  else
17
21
  format.json { render :json => { :content => @content, :errors => @content.errors } }
22
+ format.html do
23
+ flash[@content_type.slug.singularize] = @content.aliased_attributes
24
+ flash['errors'] = @content.errors_to_hash
25
+ redirect_to params[:error_callback]
26
+ end
18
27
  end
19
28
  end
20
29
  end
@@ -23,7 +32,7 @@ module Admin
23
32
 
24
33
  def set_content_type
25
34
  @content_type = current_site.content_types.where(:slug => params[:slug]).first
26
- render :json => { :error => 'Api not enabled'} and return false unless @content_type.api_enabled
35
+ render :json => { :error => 'Api not enabled' } and return false unless @content_type.api_enabled
27
36
  end
28
37
 
29
38
  end
@@ -3,7 +3,7 @@ module Admin
3
3
 
4
4
  include Locomotive::Routing::SiteDispatcher
5
5
 
6
- layout 'admin/application'
6
+ layout '/admin/layouts/application'
7
7
 
8
8
  before_filter :authenticate_admin!
9
9
 
@@ -49,7 +49,7 @@ module Admin
49
49
  end
50
50
 
51
51
  def set_locale
52
- I18n.locale = current_admin.locale
52
+ I18n.locale = current_admin.locale rescue Locomotive.config.default_locale
53
53
  end
54
54
 
55
55
  end
@@ -1,19 +1,22 @@
1
1
  module Admin
2
2
  class CrossDomainSessionsController < BaseController
3
3
 
4
- layout 'admin/box'
4
+ layout '/admin/layouts/box'
5
5
 
6
6
  skip_before_filter :verify_authenticity_token
7
7
 
8
8
  skip_before_filter :validate_site_membership
9
9
 
10
- skip_before_filter :set_locale, :only => :create
11
-
12
10
  before_filter :authenticate_admin!, :only => :new
13
11
 
14
12
  def new
15
13
  if site = current_admin.sites.detect { |s| s._id.to_s == params[:target_id] }
16
- @target = site.domains_without_subdomain.first || site.domains_with_subdomain.first
14
+ if Rails.env == 'development'
15
+ @target = site.full_subdomain
16
+ else
17
+ @target = site.domains_without_subdomain.first || site.full_subdomain
18
+ end
19
+
17
20
  current_admin.reset_switch_site_token!
18
21
  else
19
22
  redirect_to admin_pages_path
@@ -1,6 +1,8 @@
1
1
  module Admin
2
2
  class CurrentSitesController < BaseController
3
3
 
4
+ defaults :instance_name => 'site'
5
+
4
6
  sections 'settings', 'site'
5
7
 
6
8
  actions :edit, :update
@@ -17,34 +17,28 @@ module Admin
17
17
  :failed => @job && @job.last_error.present?
18
18
  } }
19
19
  end
20
-
21
20
  end
22
21
 
23
22
  def new; end
24
23
 
25
24
  def create
26
- if params[:zipfile].blank?
27
- @error = t('errors.messages.blank')
28
- flash[:alert] = t('flash.admin.imports.create.alert')
29
- render 'new'
30
- else
31
- path = self.store_zipfile!
25
+ begin
26
+ Locomotive::Import::Job.run!(params[:zipfile], current_site, {
27
+ :samples => Boolean.set(params[:samples]),
28
+ :reset => Boolean.set(params[:reset])
29
+ })
32
30
 
33
- job = Locomotive::Import::Job.new(path, current_site)
34
- Delayed::Job.enqueue job, { :site => current_site, :job_type => 'import' }
31
+ flash[:notice] = t("flash.admin.imports.create.#{Locomotive.config.delayed_job ? 'notice' : 'done'}")
35
32
 
36
- flash[:notice] = t('flash.admin.imports.create.notice')
33
+ redirect_to Locomotive.config.delayed_job ? admin_import_url : new_admin_import_url
34
+ rescue Exception => e
35
+ logger.error "[Locomotive import] #{e.message}"
37
36
 
38
- redirect_to admin_import_url
39
- end
40
- end
41
-
42
- protected
37
+ @error = t('errors.messages.invalid_theme_file')
38
+ flash[:alert] = t('flash.admin.imports.create.alert')
43
39
 
44
- def store_zipfile!
45
- file = CarrierWave::SanitizedFile.new(params[:zipfile])
46
- file.move_to(File.join(Rails.root, 'tmp', 'files', current_site.id.to_s))
47
- file.path
40
+ render 'new'
41
+ end
48
42
  end
49
43
 
50
44
  end
@@ -0,0 +1,79 @@
1
+ module Admin
2
+ class InstallationController < BaseController
3
+
4
+ layout '/admin/layouts/box'
5
+
6
+ skip_before_filter :require_site
7
+
8
+ skip_before_filter :authenticate_admin!
9
+
10
+ skip_before_filter :verify_authenticity_token
11
+
12
+ skip_before_filter :validate_site_membership
13
+
14
+ before_filter :is_step_already_done?
15
+
16
+ before_filter :allow_installation?
17
+
18
+ def show
19
+ request.get? ? self.handle_get : self.handle_post
20
+ end
21
+
22
+ protected
23
+
24
+ def handle_get
25
+ case params[:step].to_i
26
+ when 2 then @account = Account.new
27
+ when 3 then @site = Site.new
28
+ end
29
+ render "step_#{params[:step]}"
30
+ end
31
+
32
+ def handle_post
33
+ case params[:step].to_i
34
+ when 2 # create account
35
+ @account = Account.create(params[:account])
36
+ if @account.valid?
37
+ redirect_to admin_installation_step_url(3)
38
+ else
39
+ render 'step_2'
40
+ end
41
+ when 3 # create site
42
+ @site = Site.new(params[:site])
43
+ @site.memberships.build :account => Account.first, :admin => true
44
+ @site.save
45
+
46
+ if @site.valid?
47
+ begin
48
+ unless params[:zipfile].blank?
49
+ Locomotive::Import::Job.run!(params[:zipfile], @site, { :samples => true })
50
+ end
51
+ rescue Exception => e
52
+ logger.error "Import failed because of #{e.message}"
53
+ end
54
+
55
+ redirect_to admin_session_url(:host => Site.first.domains.first, :port => request.port)
56
+ else
57
+ render 'step_3'
58
+ end
59
+ end
60
+ end
61
+
62
+ def is_step_already_done?
63
+ case params[:step].to_i
64
+ when 2 # already an account in db
65
+ if Account.count > 0
66
+ @step_done = t('admin.installation.step_2.done', Account.first.attributes)
67
+ render 'step_2' and return false
68
+ end
69
+ else
70
+ true
71
+ end
72
+ end
73
+
74
+ def allow_installation?
75
+ redirect_to admin_pages_url if Site.count > 0 && Account.count > 0
76
+ end
77
+
78
+ end
79
+ end
@@ -6,7 +6,7 @@ module Admin
6
6
  respond_to :json, :only => [:update, :sort, :get_path]
7
7
 
8
8
  def index
9
- @pages = current_site.pages.roots
9
+ @pages = current_site.all_pages_in_once
10
10
  end
11
11
 
12
12
  def new
@@ -3,11 +3,11 @@ module Admin
3
3
 
4
4
  include Locomotive::Routing::SiteDispatcher
5
5
 
6
- layout 'admin/box'
6
+ layout '/admin/layouts/box'
7
7
 
8
8
  before_filter :require_site
9
9
 
10
- helper 'admin/base', 'admin/login'
10
+ helper 'admin/base', 'admin/box'
11
11
 
12
12
  end
13
13
  end
@@ -3,11 +3,11 @@ module Admin
3
3
 
4
4
  include Locomotive::Routing::SiteDispatcher
5
5
 
6
- layout 'admin/box'
6
+ layout '/admin/layouts/box'
7
7
 
8
8
  before_filter :require_site
9
9
 
10
- helper 'admin/base', 'admin/login'
10
+ helper 'admin/base', 'admin/box'
11
11
 
12
12
  protected
13
13
 
@@ -1,6 +1,8 @@
1
1
  module Admin
2
2
  class SitesController < BaseController
3
3
 
4
+ defaults :instance_name => 'site'
5
+
4
6
  sections 'settings'
5
7
 
6
8
  def create
@@ -16,7 +16,7 @@ module Admin
16
16
  @js_and_css_assets = (@assets[:javascripts] || []) + (@assets[:stylesheets] || [])
17
17
 
18
18
  if request.xhr?
19
- @images = @assets[:images]
19
+ @images = @assets[:images] || []
20
20
  render :action => 'images', :layout => false and return
21
21
  else
22
22
  @snippets = current_site.snippets.order_by([[:name, :asc]]).all.to_a
@@ -6,6 +6,6 @@ class ApplicationController < ActionController::Base
6
6
  # rescue_from Exception, :with => :render_error
7
7
  #
8
8
  # def render_error
9
- # render :template => "/admin/errors/500", :layout => 'admin/box', :status => 500
9
+ # render :template => "/admin/errors/500", :layout => '/admin/layouts/box', :status => 500
10
10
  # end
11
11
  end
@@ -12,10 +12,4 @@ module Admin::AssetsHelper
12
12
  asset.new_record? || asset.stylesheet? || asset.javascript?
13
13
  end
14
14
 
15
- def image_picker_include_tags
16
- html = javascript_include_tag 'admin/plugins/json2', 'admin/plugins/scrollTo', 'admin/plugins/codemirror/codemirror', 'admin/plugins/fancybox', 'admin/plugins/plupload/plupload.full', 'admin/plugins/imagepicker'
17
- html += stylesheet_link_tag 'admin/plugins/fancybox', 'admin/fancybox_changes'
18
- html
19
- end
20
-
21
15
  end
@@ -1,6 +1,6 @@
1
- module Admin::LoginHelper
1
+ module Admin::BoxHelper
2
2
 
3
- def login_flash_message
3
+ def box_flash_message
4
4
  if not flash.empty?
5
5
  content_tag :div, flash.values.first,
6
6
  :id => "flash-#{flash.keys.first}",
@@ -10,8 +10,12 @@ module Admin::LoginHelper
10
10
  end
11
11
  end
12
12
 
13
- def login_button_tag(label)
13
+ def box_button_tag(label)
14
14
  content_tag(:button, content_tag(:span, label), :type => 'submit', :class => 'button')
15
15
  end
16
16
 
17
+ def next_installation_step_link(step = 1, label = nil)
18
+ link_to(content_tag(:span, label || t('admin.installation.common.next')), admin_installation_step_url(step), :class => 'button')
19
+ end
20
+
17
21
  end
@@ -7,7 +7,7 @@ module Admin::CustomFieldsHelper
7
7
  end
8
8
 
9
9
  def options_for_order_by(content_type, collection_name)
10
- options = %w{updated_at _position_in_list}.map do |type|
10
+ options = %w{created_at updated_at _position_in_list}.map do |type|
11
11
  [t("admin.content_types.form.order_by.#{type.gsub(/^_/, '')}"), type]
12
12
  end
13
13
  options + options_for_highlighted_field(content_type, collection_name)
@@ -16,7 +16,7 @@ module Admin::CustomFieldsHelper
16
16
  def options_for_highlighted_field(content_type, collection_name)
17
17
  custom_fields_collection_name = "ordered_#{collection_name.singularize}_custom_fields".to_sym
18
18
  collection = content_type.send(custom_fields_collection_name)
19
- collection.delete_if { |f| f.label == 'field name' }
19
+ collection.delete_if { |f| f.label == 'field name' || f.kind == 'file' }
20
20
  collection.map { |field| [field.label, field._name] }
21
21
  end
22
22
 
@@ -18,6 +18,7 @@ class AssetCollection
18
18
  ## callbacks ##
19
19
  before_validation :normalize_slug
20
20
  before_save :store_asset_positions!
21
+ after_destroy :remove_uploaded_files
21
22
 
22
23
  ## validations ##
23
24
  validates_presence_of :site, :name, :slug
@@ -53,17 +54,28 @@ class AssetCollection
53
54
  end
54
55
 
55
56
  def store_asset_positions!
56
- return if @assets_order.nil?
57
+ return if @assets_order.blank?
57
58
 
58
- @assets_order.split(',').each_with_index do |asset_id, index|
59
+ ids = @assets_order.split(',').collect { |id| BSON::ObjectId(id) }
60
+
61
+ ids.each_with_index do |asset_id, index|
59
62
  self.assets.find(asset_id).position = index
60
63
  end
61
64
 
62
65
  self.assets.clone.each do |asset|
63
- if !@assets_order.split(',').include?(asset._id)
66
+ if !ids.include?(asset._id)
64
67
  self.assets.delete(asset)
65
68
  asset.send(:delete)
66
69
  end
67
70
  end
68
71
  end
72
+
73
+ def remove_uploaded_files # callbacks are not called on each asset so we do it manually
74
+ self.assets.each do |asset|
75
+ self.asset_custom_fields.each do |field|
76
+ asset.send(:"remove_#{field._name}!") if field.kind == 'file'
77
+ end
78
+ end
79
+ end
80
+
69
81
  end