trusty-cms 2.0.2 → 2.0.3.pre.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (207) hide show
  1. checksums.yaml +13 -5
  2. data/.gitignore +0 -2
  3. data/CONTRIBUTORS.md +1 -3
  4. data/Gemfile +1 -6
  5. data/Gemfile.lock +80 -100
  6. data/INSTALL.md +6 -7
  7. data/README.md +1 -3
  8. data/Rakefile +4 -24
  9. data/app/assets/javascripts/admin/jquery-ui.js +2339 -3787
  10. data/app/assets/javascripts/admin/page-edit.js +3 -3
  11. data/app/assets/javascripts/admin/tabcontrol.js.erb +16 -16
  12. data/app/assets/javascripts/admin/treetable.js +2 -4
  13. data/app/assets/stylesheets/admin/_base.scss +4 -4
  14. data/app/assets/stylesheets/admin/modules/_links.scss +1 -1
  15. data/app/assets/stylesheets/admin/partials/_content.scss +2 -9
  16. data/app/assets/stylesheets/admin/partials/_forms.scss +29 -97
  17. data/app/assets/stylesheets/admin/partials/_header.scss +3 -2
  18. data/app/assets/stylesheets/admin/partials/_index.scss +6 -9
  19. data/app/assets/stylesheets/admin/partials/_layout.scss +2 -1
  20. data/app/assets/stylesheets/admin/partials/_popup.scss +11 -0
  21. data/app/assets/stylesheets/admin/partials/_tabcontrol.scss +4 -4
  22. data/app/assets/stylesheets/admin/partials/_typography.scss +0 -4
  23. data/app/controllers/admin/pages_controller.rb +1 -9
  24. data/app/controllers/admin/references_controller.rb +1 -8
  25. data/app/controllers/admin/users_controller.rb +1 -1
  26. data/app/controllers/admin/welcome_controller.rb +3 -3
  27. data/app/controllers/application_controller.rb.rails2 +113 -0
  28. data/app/controllers/site_controller.rb +1 -1
  29. data/app/helpers/admin/node_helper.rb +4 -4
  30. data/app/helpers/application_helper.rb.rails2 +242 -0
  31. data/app/models/trusty_cms/config.rb +1 -2
  32. data/app/views/admin/configuration/edit.html.haml +2 -2
  33. data/app/views/admin/configuration/show.html.haml +1 -1
  34. data/app/views/admin/layouts/_form.html.haml +1 -1
  35. data/app/views/admin/layouts/remove.html.haml +1 -1
  36. data/app/views/admin/pages/_fields.html.haml +1 -1
  37. data/app/views/admin/pages/_node.html.haml +2 -2
  38. data/app/views/admin/pages/edit.html.haml +1 -1
  39. data/app/views/admin/pages/remove.html.haml +2 -2
  40. data/app/views/admin/preferences/edit.html.haml +36 -36
  41. data/app/views/admin/users/_form.html.haml +1 -1
  42. data/app/views/admin/users/_password_fields.html.haml +1 -1
  43. data/app/views/admin/users/remove.html.haml +1 -1
  44. data/app/views/admin/welcome/login.html.haml +1 -1
  45. data/app/views/layouts/application.html.haml +16 -18
  46. data/config/application.rb +1 -2
  47. data/config/boot.rb +1 -0
  48. data/config/database.mysql.yml +3 -3
  49. data/{spec/dummy/config/database.yml → config/database.yml.rails2} +4 -4
  50. data/config/environment.rb.rails2 +89 -0
  51. data/config/environments/development.rb +0 -1
  52. data/config/environments/development.rb.rails2 +17 -0
  53. data/config/environments/production.rb.rails2 +24 -0
  54. data/config/environments/test.rb +4 -2
  55. data/config/initializers/trusty_cms_config.rb +0 -1
  56. data/config/routes.rb +0 -1
  57. data/config/routes.rb.rails2 +41 -0
  58. data/db/migrate/001_create_radiant_tables.rb +0 -1
  59. data/db/migrate/003_rename_behavior_column.rb +9 -0
  60. data/db/migrate/019_add_salt_to_users.rb +11 -0
  61. data/db/migrate/20100805155020_convert_page_metas.rb +13 -0
  62. data/db/migrate/20110902203823_add_allowed_children_cache_to_pages.rb +4 -0
  63. data/db/migrate/20120209231801_change_pages_allowed_children_cache_to_text.rb +1 -0
  64. data/lib/generators/instance/templates/databases/mysql.yml +3 -3
  65. data/lib/generators/instance/templates/instance_gemfile +2 -2
  66. data/lib/generators/trusty_cms/templates/database.yml.erb +4 -4
  67. data/lib/generators/trusty_cms/templates/routes.rb.erb +1 -0
  68. data/lib/login_system.rb +1 -1
  69. data/lib/tasks/database.rake +3 -1
  70. data/lib/tasks/framework.rake +1 -1
  71. data/lib/trusty_cms/admin_ui.rb +0 -2
  72. data/lib/trusty_cms/extension_migrator.rb +2 -1
  73. data/lib/trusty_cms/initializer.rb +1 -1
  74. data/lib/trusty_cms/setup.rb +1 -1
  75. data/lib/trusty_cms.rb +1 -1
  76. data/public/stylesheets/admin/main.css +1 -0
  77. data/{spec/dummy/config/routes.rb → public/stylesheets/admin/overrides.css} +0 -0
  78. data/spec/ci/database.mysql.yml +1 -1
  79. data/spec/features/pages_spec.rb +2 -2
  80. data/spec/helpers/regions_helper_spec.rb +16 -0
  81. data/spec/rails_helper.rb +4 -3
  82. data/spec/spec_helper.rb +77 -13
  83. data/spec/support/custom_actions.rb +0 -1
  84. data/test/test_helper.rb.rails2 +64 -0
  85. data/tmp/cache/747/A70/TrustyCms%3A%3AConfig +0 -0
  86. data/tmp/cache/85C/FA0/TrustyCms.cache_mtime +0 -0
  87. data/tmp/cache_files_test/a.txt +1 -0
  88. data/tmp/cache_files_test/all.txt +3 -0
  89. data/tmp/cache_files_test/b.txt +1 -0
  90. data/tmp/config/radiant_config.yml +27 -0
  91. data/tmp/sass-cache/1a137f46a4706893cc07b2aa949a92cf851d936f/_boxes.sassc +0 -0
  92. data/tmp/sass-cache/1a137f46a4706893cc07b2aa949a92cf851d936f/_gradients.sassc +0 -0
  93. data/tmp/sass-cache/1a137f46a4706893cc07b2aa949a92cf851d936f/_links.sassc +0 -0
  94. data/tmp/sass-cache/28de5f95620abb7d2385166aed681f8b13104764/_appearance.scssc +0 -0
  95. data/tmp/sass-cache/28de5f95620abb7d2385166aed681f8b13104764/_background-clip.scssc +0 -0
  96. data/tmp/sass-cache/28de5f95620abb7d2385166aed681f8b13104764/_background-origin.scssc +0 -0
  97. data/tmp/sass-cache/28de5f95620abb7d2385166aed681f8b13104764/_background-size.scssc +0 -0
  98. data/tmp/sass-cache/28de5f95620abb7d2385166aed681f8b13104764/_border-radius.scssc +0 -0
  99. data/tmp/sass-cache/28de5f95620abb7d2385166aed681f8b13104764/_box-shadow.scssc +0 -0
  100. data/tmp/sass-cache/28de5f95620abb7d2385166aed681f8b13104764/_box-sizing.scssc +0 -0
  101. data/tmp/sass-cache/28de5f95620abb7d2385166aed681f8b13104764/_box.scssc +0 -0
  102. data/tmp/sass-cache/28de5f95620abb7d2385166aed681f8b13104764/_columns.scssc +0 -0
  103. data/tmp/sass-cache/28de5f95620abb7d2385166aed681f8b13104764/_filter.scssc +0 -0
  104. data/tmp/sass-cache/28de5f95620abb7d2385166aed681f8b13104764/_font-face.scssc +0 -0
  105. data/tmp/sass-cache/28de5f95620abb7d2385166aed681f8b13104764/_hyphenation.scssc +0 -0
  106. data/tmp/sass-cache/28de5f95620abb7d2385166aed681f8b13104764/_images.scssc +0 -0
  107. data/tmp/sass-cache/28de5f95620abb7d2385166aed681f8b13104764/_inline-block.scssc +0 -0
  108. data/tmp/sass-cache/28de5f95620abb7d2385166aed681f8b13104764/_opacity.scssc +0 -0
  109. data/tmp/sass-cache/28de5f95620abb7d2385166aed681f8b13104764/_regions.scssc +0 -0
  110. data/tmp/sass-cache/28de5f95620abb7d2385166aed681f8b13104764/_shared.scssc +0 -0
  111. data/tmp/sass-cache/28de5f95620abb7d2385166aed681f8b13104764/_text-shadow.scssc +0 -0
  112. data/tmp/sass-cache/28de5f95620abb7d2385166aed681f8b13104764/_transform.scssc +0 -0
  113. data/tmp/sass-cache/28de5f95620abb7d2385166aed681f8b13104764/_transition.scssc +0 -0
  114. data/tmp/sass-cache/28de5f95620abb7d2385166aed681f8b13104764/_user-interface.scssc +0 -0
  115. data/tmp/sass-cache/2f4278d4f2cc4f21f31aa67430e462fbca6b47a0/_actions.sassc +0 -0
  116. data/tmp/sass-cache/2f4278d4f2cc4f21f31aa67430e462fbca6b47a0/_avatars.sassc +0 -0
  117. data/tmp/sass-cache/2f4278d4f2cc4f21f31aa67430e462fbca6b47a0/_content.sassc +0 -0
  118. data/tmp/sass-cache/2f4278d4f2cc4f21f31aa67430e462fbca6b47a0/_dateinput.sassc +0 -0
  119. data/tmp/sass-cache/2f4278d4f2cc4f21f31aa67430e462fbca6b47a0/_deprecated.sassc +0 -0
  120. data/tmp/sass-cache/2f4278d4f2cc4f21f31aa67430e462fbca6b47a0/_dropdown.sassc +0 -0
  121. data/tmp/sass-cache/2f4278d4f2cc4f21f31aa67430e462fbca6b47a0/_footer.sassc +0 -0
  122. data/tmp/sass-cache/2f4278d4f2cc4f21f31aa67430e462fbca6b47a0/_forms.sassc +0 -0
  123. data/tmp/sass-cache/2f4278d4f2cc4f21f31aa67430e462fbca6b47a0/_header.sassc +0 -0
  124. data/tmp/sass-cache/2f4278d4f2cc4f21f31aa67430e462fbca6b47a0/_index.sassc +0 -0
  125. data/tmp/sass-cache/2f4278d4f2cc4f21f31aa67430e462fbca6b47a0/_layout.sassc +0 -0
  126. data/tmp/sass-cache/2f4278d4f2cc4f21f31aa67430e462fbca6b47a0/_messages.sassc +0 -0
  127. data/tmp/sass-cache/2f4278d4f2cc4f21f31aa67430e462fbca6b47a0/_popup.sassc +0 -0
  128. data/tmp/sass-cache/2f4278d4f2cc4f21f31aa67430e462fbca6b47a0/_tabcontrol.sassc +0 -0
  129. data/tmp/sass-cache/2f4278d4f2cc4f21f31aa67430e462fbca6b47a0/_toolbar.sassc +0 -0
  130. data/tmp/sass-cache/2f4278d4f2cc4f21f31aa67430e462fbca6b47a0/_typography.sassc +0 -0
  131. data/tmp/sass-cache/2f4278d4f2cc4f21f31aa67430e462fbca6b47a0/_validations.sassc +0 -0
  132. data/tmp/sass-cache/33c9f77b54ab77293741bf5159eedff124a39fc1/_color.scssc +0 -0
  133. data/tmp/sass-cache/33c9f77b54ab77293741bf5159eedff124a39fc1/_general.scssc +0 -0
  134. data/tmp/sass-cache/33c9f77b54ab77293741bf5159eedff124a39fc1/_sprites.scssc +0 -0
  135. data/tmp/sass-cache/33c9f77b54ab77293741bf5159eedff124a39fc1/_tables.scssc +0 -0
  136. data/tmp/sass-cache/5683573556a6b271b3ffade55f4ff32a60e7c0f0/_base.scssc +0 -0
  137. data/tmp/sass-cache/5683573556a6b271b3ffade55f4ff32a60e7c0f0/_sprite-img.scssc +0 -0
  138. data/tmp/sass-cache/6159fdf943b5ffc54b901a34cdfcfc7e6f736834/_alternating-rows-and-columns.scssc +0 -0
  139. data/tmp/sass-cache/6159fdf943b5ffc54b901a34cdfcfc7e6f736834/_borders.scssc +0 -0
  140. data/tmp/sass-cache/6159fdf943b5ffc54b901a34cdfcfc7e6f736834/_scaffolding.scssc +0 -0
  141. data/tmp/sass-cache/81fb0626d3f9dbbcc1f43df416db1c97b6ad512a/_links.scssc +0 -0
  142. data/tmp/sass-cache/81fb0626d3f9dbbcc1f43df416db1c97b6ad512a/_lists.scssc +0 -0
  143. data/tmp/sass-cache/81fb0626d3f9dbbcc1f43df416db1c97b6ad512a/_text.scssc +0 -0
  144. data/tmp/sass-cache/81fb0626d3f9dbbcc1f43df416db1c97b6ad512a/_vertical_rhythm.scssc +0 -0
  145. data/tmp/sass-cache/87c1de4edf14dc5f527f65e2080e0faa325354aa/_hover-link.scssc +0 -0
  146. data/tmp/sass-cache/87c1de4edf14dc5f527f65e2080e0faa325354aa/_link-colors.scssc +0 -0
  147. data/tmp/sass-cache/87c1de4edf14dc5f527f65e2080e0faa325354aa/_unstyled-link.scssc +0 -0
  148. data/tmp/sass-cache/8b412a89f899813981285eadb5f08e52b94dfb65/_css3.scssc +0 -0
  149. data/tmp/sass-cache/8b412a89f899813981285eadb5f08e52b94dfb65/_support.scssc +0 -0
  150. data/tmp/sass-cache/8b412a89f899813981285eadb5f08e52b94dfb65/_typography.scssc +0 -0
  151. data/tmp/sass-cache/8b412a89f899813981285eadb5f08e52b94dfb65/_utilities.scssc +0 -0
  152. data/tmp/sass-cache/92844cd19a320f87ef960171cea4f33d1a07339c/_contrast.scssc +0 -0
  153. data/tmp/sass-cache/a97de1041408f914478b9e7943c5c6c2d221d4c0/_ellipsis.scssc +0 -0
  154. data/tmp/sass-cache/a97de1041408f914478b9e7943c5c6c2d221d4c0/_force-wrap.scssc +0 -0
  155. data/tmp/sass-cache/a97de1041408f914478b9e7943c5c6c2d221d4c0/_nowrap.scssc +0 -0
  156. data/tmp/sass-cache/a97de1041408f914478b9e7943c5c6c2d221d4c0/_replacement.scssc +0 -0
  157. data/tmp/sass-cache/b3d80baefd48593d8c08815ba2d83e209f5dad6f/_grid-background.scssc +0 -0
  158. data/tmp/sass-cache/b92bfc773efa04d930ffa0b3331244a1f378caa7/_compass.scssc +0 -0
  159. data/tmp/sass-cache/c055a2360b102aff9247707235d9dce9214f6c4f/_clearfix.scssc +0 -0
  160. data/tmp/sass-cache/c055a2360b102aff9247707235d9dce9214f6c4f/_float.scssc +0 -0
  161. data/tmp/sass-cache/c055a2360b102aff9247707235d9dce9214f6c4f/_hacks.scssc +0 -0
  162. data/tmp/sass-cache/c055a2360b102aff9247707235d9dce9214f6c4f/_min.scssc +0 -0
  163. data/tmp/sass-cache/c055a2360b102aff9247707235d9dce9214f6c4f/_reset.scssc +0 -0
  164. data/tmp/sass-cache/c055a2360b102aff9247707235d9dce9214f6c4f/_tag-cloud.scssc +0 -0
  165. data/tmp/sass-cache/c3fa060b99d9ed1d9740af472ecc747182e2ea93/_base.sassc +0 -0
  166. data/tmp/sass-cache/c3fa060b99d9ed1d9740af472ecc747182e2ea93/main.sassc +0 -0
  167. data/tmp/sass-cache/c3fa060b99d9ed1d9740af472ecc747182e2ea93/overrides.sassc +0 -0
  168. data/tmp/sass-cache/d2bf234de18cb20fe8238c9224b9863ed5d268c6/_bullets.scssc +0 -0
  169. data/tmp/sass-cache/d2bf234de18cb20fe8238c9224b9863ed5d268c6/_horizontal-list.scssc +0 -0
  170. data/tmp/sass-cache/d2bf234de18cb20fe8238c9224b9863ed5d268c6/_inline-block-list.scssc +0 -0
  171. data/tmp/sass-cache/d2bf234de18cb20fe8238c9224b9863ed5d268c6/_inline-list.scssc +0 -0
  172. data/tmp/sass-cache/dc9647e96d50c02214aff50e88308a74bf56d1d7/_utilities.scssc +0 -0
  173. data/trusty_cms.gemspec +2 -4
  174. metadata +180 -171
  175. data/spec/dummy/README.rdoc +0 -28
  176. data/spec/dummy/Rakefile +0 -5
  177. data/spec/dummy/bin/bundle +0 -3
  178. data/spec/dummy/bin/rails +0 -4
  179. data/spec/dummy/bin/rake +0 -4
  180. data/spec/dummy/bin/setup +0 -29
  181. data/spec/dummy/config/application.rb +0 -152
  182. data/spec/dummy/config/boot.rb +0 -6
  183. data/spec/dummy/config/environment.rb +0 -5
  184. data/spec/dummy/config/environments/development.rb +0 -49
  185. data/spec/dummy/config/environments/production.rb +0 -79
  186. data/spec/dummy/config/environments/test.rb +0 -42
  187. data/spec/dummy/config/initializers/assets.rb +0 -11
  188. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  189. data/spec/dummy/config/initializers/cookies_serializer.rb +0 -3
  190. data/spec/dummy/config/initializers/filter_parameter_logging.rb +0 -4
  191. data/spec/dummy/config/initializers/inflections.rb +0 -16
  192. data/spec/dummy/config/initializers/mime_types.rb +0 -4
  193. data/spec/dummy/config/initializers/session_store.rb +0 -3
  194. data/spec/dummy/config/initializers/trusty_cms_config.rb +0 -20
  195. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  196. data/spec/dummy/config/locales/en.yml +0 -23
  197. data/spec/dummy/config/secrets.yml +0 -22
  198. data/spec/dummy/config.ru +0 -4
  199. data/spec/dummy/db/schema.rb +0 -122
  200. data/spec/dummy/log/test.log +0 -25081
  201. data/spec/dummy/public/404.html +0 -67
  202. data/spec/dummy/public/422.html +0 -67
  203. data/spec/dummy/public/500.html +0 -66
  204. data/spec/dummy/public/favicon.ico +0 -0
  205. data/spec/dummy/tmp/cache/747/A70/TrustyCms%3A%3AConfig +0 -0
  206. data/spec/dummy/tmp/cache/85C/FA0/TrustyCms.cache_mtime +0 -0
  207. data/spec/dummy/tmp/radiant_config_cache.txt +0 -0
@@ -0,0 +1,113 @@
1
+ require_dependency 'trusty_cms'
2
+
3
+ class ApplicationController < ActionController::Base
4
+ include LoginSystem
5
+
6
+ filter_parameter_logging :password, :password_confirmation
7
+
8
+ protect_from_forgery
9
+
10
+ before_filter :set_current_user
11
+ before_filter :set_timezone
12
+ before_filter :set_user_locale
13
+ before_filter :set_javascripts_and_stylesheets
14
+ before_filter :force_utf8_params if RUBY_VERSION =~ /1\.9/
15
+ before_filter :set_standard_body_style, :only => [:new, :edit, :update, :create]
16
+
17
+ attr_accessor :config, :cache
18
+ attr_reader :pagination_parameters
19
+ helper_method :pagination_parameters
20
+
21
+ def initialize
22
+ super
23
+ @config = TrustyCms::Config
24
+ end
25
+
26
+ # helpers to include additional assets from actions or views
27
+ helper_method :include_stylesheet, :include_javascript
28
+
29
+ def include_stylesheet(sheet)
30
+ @stylesheets << sheet
31
+ end
32
+
33
+ def include_javascript(script)
34
+ @javascripts << script
35
+ end
36
+
37
+ def template_name
38
+ case self.action_name
39
+ when 'index'
40
+ 'index'
41
+ when 'new','create'
42
+ 'new'
43
+ when 'show'
44
+ 'show'
45
+ when 'edit', 'update'
46
+ 'edit'
47
+ when 'remove', 'destroy'
48
+ 'remove'
49
+ else
50
+ self.action_name
51
+ end
52
+ end
53
+
54
+ def rescue_action_in_public(exception)
55
+ case exception
56
+ when ActiveRecord::RecordNotFound, ActionController::UnknownController, ActionController::UnknownAction, ActionController::RoutingError
57
+ render :template => "site/not_found", :status => 404
58
+ else
59
+ super
60
+ end
61
+ end
62
+
63
+ private
64
+
65
+ def set_current_user
66
+ UserActionObserver.instance.current_user = current_user
67
+ end
68
+
69
+ def set_user_locale
70
+ I18n.locale = current_user && !current_user.locale.blank? ? current_user.locale : TrustyCms::Config['default_locale']
71
+ end
72
+
73
+ def set_timezone
74
+ Time.zone = TrustyCms::Config['local.timezone'] || Time.zone_default
75
+ end
76
+
77
+ def set_javascripts_and_stylesheets
78
+ @stylesheets ||= []
79
+ @stylesheets.concat %w(admin/main)
80
+ @javascripts ||= []
81
+ end
82
+
83
+ def set_standard_body_style
84
+ @body_classes ||= []
85
+ @body_classes.concat(%w(reversed))
86
+ end
87
+
88
+ # When using TrustyCms with Ruby 1.9, the strings that come in from forms are ASCII-8BIT encoded.
89
+ # That causes problems, especially when using special chars and with certain DBs, like DB2
90
+ # That's why we force the encoding of the params to UTF-8
91
+ # That's what's happening in Rails 3, too: https://github.com/rails/rails/commit/25215d7285db10e2c04d903f251b791342e4dd6a
92
+ #
93
+ # See http://stackoverflow.com/questions/8268778/rails-2-3-9-encoding-of-query-parameters
94
+ # See https://rails.lighthouseapp.com/projects/8994/tickets/4807
95
+ # See http://jasoncodes.com/posts/ruby19-rails2-encodings (thanks for the following code, Jason!)
96
+ def force_utf8_params
97
+ traverse = lambda do |object, block|
98
+ if object.kind_of?(Hash)
99
+ object.each_value { |o| traverse.call(o, block) }
100
+ elsif object.kind_of?(Array)
101
+ object.each { |o| traverse.call(o, block) }
102
+ else
103
+ block.call(object)
104
+ end
105
+ object
106
+ end
107
+ force_encoding = lambda do |o|
108
+ o.force_encoding(Encoding::UTF_8) if o.respond_to?(:force_encoding)
109
+ end
110
+ traverse.call(params, force_encoding)
111
+ end
112
+
113
+ end
@@ -34,7 +34,7 @@ class SiteController < ApplicationController
34
34
  render :template => 'site/not_found', :status => 404, layout: false
35
35
  end
36
36
  rescue Page::MissingRootPageError
37
- redirect_to welcome_path
37
+ redirect_to welcome_url
38
38
  end
39
39
 
40
40
  def cacheable_request?
@@ -1,18 +1,18 @@
1
1
  module Admin::NodeHelper
2
2
 
3
- def render_nodes(page, starting_index, parent_index = nil, simple = false)
3
+ def render_nodes(page, starting_index, parent_index = nil)
4
4
  @rendered_html = ""
5
- render_node page, starting_index, parent_index, simple
5
+ render_node page, starting_index, parent_index
6
6
  @rendered_html
7
7
  end
8
8
 
9
- def render_node(page, index, parent_index = nil, simple = false)
9
+ def render_node(page, index, parent_index = nil)
10
10
 
11
11
  @current_node = prepare_page(page)
12
12
 
13
13
  @rendered_html += (render :partial => 'admin/pages/node',
14
14
  :locals => {level: index, index: index, parent_index: parent_index,
15
- page: page, simple: simple, branch: (page.children.count > 0) })
15
+ page: page, simple: false, branch: (page.children.count > 0) })
16
16
  index
17
17
  end
18
18
 
@@ -0,0 +1,242 @@
1
+ module ApplicationHelper
2
+ include LocalTime
3
+ include Admin::RegionsHelper
4
+
5
+ def config
6
+ TrustyCms::Config
7
+ end
8
+
9
+ def default_page_title
10
+ title + ' - ' + subtitle
11
+ end
12
+
13
+ def title
14
+ config['admin.title'] || 'TrustyCms CMS'
15
+ end
16
+
17
+ def subtitle
18
+ config['admin.subtitle'] || 'Publishing for Small Teams'
19
+ end
20
+
21
+ def logged_in?
22
+ !current_user.nil?
23
+ end
24
+
25
+ def onsubmit_status(model)
26
+ model.new_record? ? t('creating_status', :model => t(model.class.name.downcase)) : "#{I18n.t('saving_changes')}&#8230;"
27
+ end
28
+
29
+ def save_model_button(model, options = {})
30
+ model_name = model.class.name.underscore
31
+ human_model_name = model_name.humanize.titlecase
32
+ options[:label] ||= model.new_record? ?
33
+ t('buttons.create', :name => t(model_name, :default => human_model_name), :default => 'Create ' + human_model_name) :
34
+ t('buttons.save_changes', :default => 'Save Changes')
35
+ options[:class] ||= "button"
36
+ options[:accesskey] ||= 'S'
37
+ submit_tag options.delete(:label), options
38
+ end
39
+
40
+ def save_model_and_continue_editing_button(model)
41
+ submit_tag t('buttons.save_and_continue'), :name => 'continue', :class => 'button', :accesskey => "s"
42
+ end
43
+
44
+ def current_item?(item)
45
+ if item.tab && item.tab.many? {|i| current_url?(i.relative_url) }
46
+ # Accept only stricter URL matches if more than one matches
47
+ current_page?(item.url)
48
+ else
49
+ current_url?(item.relative_url)
50
+ end
51
+ end
52
+
53
+ def current_tab?(tab)
54
+ @current_tab ||= tab if tab.any? {|item| current_url?(item.relative_url) }
55
+ @current_tab == tab
56
+ end
57
+
58
+ def current_url?(options)
59
+ url = case options
60
+ when Hash
61
+ url_for options
62
+ else
63
+ options.to_s
64
+ end
65
+ request.request_uri =~ Regexp.new('^' + Regexp.quote(clean(url)))
66
+ end
67
+
68
+ def clean(url)
69
+ uri = URI.parse(url)
70
+ uri.path.gsub(%r{/+}, '/').gsub(%r{/$}, '')
71
+ end
72
+
73
+ def nav_link_to(name, options)
74
+ if current_url?(options)
75
+ %{<strong>#{ link_to translate_with_default(name), options }</strong>}
76
+ else
77
+ link_to translate_with_default(name), options
78
+ end
79
+ end
80
+
81
+ def admin?
82
+ current_user and current_user.admin?
83
+ end
84
+
85
+ def designer?
86
+ current_user and (current_user.designer? or current_user.admin?)
87
+ end
88
+
89
+ def focus(field_name)
90
+ javascript_tag "Field.activate('#{field_name}');"
91
+ end
92
+
93
+ def updated_stamp(model)
94
+ unless model.new_record?
95
+ updated_by = (model.updated_by || model.created_by)
96
+ name = updated_by ? updated_by.name : nil
97
+ time = (model.updated_at || model.created_at)
98
+ if name or time
99
+ html = %{<p class="updated_line">#{t('timestamp.last_updated')} }
100
+ html << %{#{t('timestamp.by')} <strong>#{name}</strong> } if name
101
+ html << %{#{t('timestamp.at')} #{timestamp(time)}} if time
102
+ html << %{</p>}
103
+ html
104
+ end
105
+ end
106
+ end
107
+
108
+ def timestamp(time)
109
+ # time.strftime("%I:%M %p on %B %e, %Y").sub("AM", 'am').sub("PM", 'pm')
110
+ I18n.localize(time, :format => :timestamp)
111
+ end
112
+
113
+ def meta_visible(symbol)
114
+ v = case symbol
115
+ when :meta_more
116
+ not meta_errors?
117
+ when :meta, :meta_less
118
+ meta_errors?
119
+ end
120
+ v ? {} : {:style => "display: none"}
121
+ end
122
+
123
+ def meta_errors?
124
+ false
125
+ end
126
+
127
+ def meta_label
128
+ meta_errors? ? 'Less' : 'More'
129
+ end
130
+
131
+ def toggle_javascript_for(id)
132
+ "Element.toggle('#{id}'); Element.toggle('more-#{id}'); Element.toggle('less-#{id}'); return false;"
133
+ end
134
+
135
+ def image(name, options = {})
136
+ image_tag(append_image_extension("admin/#{name}"), options)
137
+ end
138
+
139
+ def image_submit(name, options = {})
140
+ image_submit_tag(append_image_extension("admin/#{name}"), options)
141
+ end
142
+
143
+ def admin
144
+ TrustyCms::AdminUI.instance
145
+ end
146
+
147
+ def filter_options_for_select(selected=nil)
148
+ options_for_select([[t('select.none'), '']] + TextFilter.descendants_names, selected)
149
+ end
150
+
151
+ def body_classes
152
+ @body_classes ||= []
153
+ end
154
+
155
+ def nav_tabs
156
+ admin.nav
157
+ end
158
+
159
+ def translate_with_default(name)
160
+ t(name.underscore.downcase, :default => name)
161
+ end
162
+
163
+ def available_locales_select
164
+ [[t('select.default'),'']] + TrustyCms::AvailableLocales.locales
165
+ end
166
+
167
+ def stylesheet_and_javascript_overrides
168
+ overrides = ''
169
+ if File.exist?("#{Rails.root}/public/stylesheets/admin/overrides.css") || File.exist?("#{Rails.root}/public/stylesheets/sass/admin/overrides.sass")
170
+ overrides << stylesheet_link_tag('admin/overrides')
171
+ end
172
+ if File.exist?("#{Rails.root}/public/javascripts/admin/overrides.js")
173
+ overrides << javascript_include_tag('admin/overrides')
174
+ end
175
+ overrides
176
+ end
177
+
178
+ # Returns a Gravatar URL associated with the email parameter.
179
+ # See: http://douglasfshearer.com/blog/gravatar-for-ruby-and-ruby-on-rails
180
+ def gravatar_url(email, options={})
181
+ # Default to highest rating. Rating can be one of G, PG, R X.
182
+ options[:rating] ||= "G"
183
+
184
+ # Default size of the image.
185
+ options[:size] ||= "32px"
186
+
187
+ # Default image url to be used when no gravatar is found
188
+ # or when an image exceeds the rating parameter.
189
+ local_avatar_url = "/images/admin/avatar_#{([options[:size].to_i] * 2).join('x')}.png"
190
+ default_avatar_url = "#{request.protocol}#{request.host_with_port}#{ActionController::Base.relative_url_root}#{local_avatar_url}"
191
+ options[:default] ||= default_avatar_url
192
+
193
+ unless email.blank?
194
+ # Build the Gravatar url.
195
+ url = '//gravatar.com/avatar/'
196
+ url << "#{Digest::MD5.new.update(email)}?"
197
+ url << "rating=#{options[:rating]}" if options[:rating]
198
+ url << "&size=#{options[:size]}" if options[:size]
199
+ url << "&default=#{options[:default]}" if options[:default]
200
+ # Test the Gravatar url
201
+ require 'open-uri'
202
+ begin; open "http:#{url}", :proxy => true
203
+ rescue; local_avatar_url
204
+ else; url
205
+ end
206
+ else
207
+ local_avatar_url
208
+ end
209
+ end
210
+
211
+ # returns the usual set of pagination links.
212
+ # options are passed through to will_paginate
213
+ # and a 'show all' depagination link is added if relevant.
214
+ def pagination_for(list, options={})
215
+ if list.respond_to? :total_pages
216
+ options = {
217
+ :max_per_page => config['pagination.max_per_page'] || 500,
218
+ :depaginate => true
219
+ }.merge(options.symbolize_keys)
220
+ depaginate = options.delete(:depaginate) # supply :depaginate => false to omit the 'show all' link
221
+ depagination_limit = options.delete(:max_per_page) # supply :max_per_page => false to include the 'show all' link no matter how large the collection
222
+ html = will_paginate(list, will_paginate_options.merge(options))
223
+ if depaginate && list.total_pages > 1 && (!depagination_limit.blank? || list.total_entries <= depagination_limit.to_i)
224
+ html << content_tag(:div, link_to(t('show_all'), :pp => 'all'), :class => 'depaginate')
225
+ elsif depaginate && list.total_entries > depagination_limit.to_i
226
+ html = content_tag(:div, link_to("paginate", :p => 1), :class => 'pagination')
227
+ end
228
+ html
229
+ end
230
+ end
231
+
232
+ private
233
+
234
+ def append_image_extension(name)
235
+ unless name =~ /\.(.*?)$/
236
+ name + '.png'
237
+ else
238
+ name
239
+ end
240
+ end
241
+
242
+ end
@@ -71,7 +71,6 @@ module TrustyCms
71
71
  self.table_name = "config"
72
72
  after_save :update_cache
73
73
  attr_reader :definition
74
- attr_accessible :key
75
74
 
76
75
  class ConfigError < RuntimeError; end
77
76
 
@@ -89,7 +88,7 @@ module TrustyCms
89
88
 
90
89
  def []=(key, value)
91
90
  if table_exists?
92
- setting = where(key: key).first_or_initialize
91
+ setting = find_or_initialize_by(key: key)
93
92
  setting.value = value
94
93
  end
95
94
  end
@@ -6,7 +6,7 @@
6
6
  %h1 Configuration
7
7
 
8
8
  - main.edit_form do
9
- = form_for :trusty_config, :url => admin_configuration_path, :html => {"data-onsubmit_status"=>"Saving changes&#8230;", :method => :put} do |f|
9
+ = form_for :trusty_config, :url => admin_configuration_url, :html => {"data-onsubmit_status"=>"Saving changes&#8230;", :method => :put} do |f|
10
10
  = render_region :form_top
11
11
  - render_region :form do |form|
12
12
  - form.edit_site do
@@ -35,4 +35,4 @@
35
35
  .buttons
36
36
  %input.button{:type=>"submit", :value=>"Save Changes"}/
37
37
  or
38
- = link_to "Cancel", admin_configuration_path, class: 'alt'
38
+ = link_to "Cancel", admin_configuration_url
@@ -39,7 +39,7 @@
39
39
  %h3
40
40
  - if admin?
41
41
  .actions
42
- = button_to t("edit_configuration"), edit_admin_configuration_path, :method => :get
42
+ = button_to t("edit_configuration"), edit_admin_configuration_url, :method => :get
43
43
  Configuration
44
44
  - TrustyCms.config.site_settings.each do |site_setting|
45
45
  %p.ruled
@@ -33,6 +33,6 @@
33
33
  = save_model_button @layout
34
34
  = save_model_and_continue_editing_button @layout
35
35
  = t('or')
36
- = link_to t('cancel'), admin_layouts_path, class: 'alt'
36
+ = link_to t('cancel'), admin_layouts_url
37
37
  - form_bottom.edit_timestamp do
38
38
  = updated_stamp @layout
@@ -13,4 +13,4 @@
13
13
  .buttons
14
14
  %input.button{:type => "submit", :value => t('delete_layout') }/
15
15
  = t('or')
16
- = link_to t('cancel'), admin_layouts_path, class: 'alt'
16
+ = link_to t('cancel'), admin_layouts_url
@@ -57,7 +57,7 @@
57
57
  = save_model_and_continue_editing_button(@page)
58
58
  = submit_tag(t('preview', :default => 'Preview'), :class => 'button', :id => 'show-preview')
59
59
  = t('or')
60
- = link_to t('cancel'), admin_pages_url, class: 'alt'
60
+ = link_to t('cancel'), admin_pages_url
61
61
  #preview_panel.fullcover.grey_out{:style => 'display: none;'}
62
62
  %iframe{:id => 'page-preview', :class => 'fullcover', :name => 'page-preview', :src => ActionController::Base.relative_url_root.to_s + '/loading-iframe.html', :frameborder => 0, :scrolling => "auto"}
63
63
  .preview_tools
@@ -7,7 +7,7 @@
7
7
  = icon
8
8
  = node_title
9
9
  - else
10
- = (link_to("#{icon} #{node_title}".html_safe, edit_admin_page_path(page), :title => page.path)).html_safe
10
+ = (link_to("#{icon} #{node_title}".html_safe, edit_admin_page_url(page), :title => page.path)).html_safe
11
11
  = page_type
12
12
  = spinner
13
13
  - node.status_column do
@@ -18,4 +18,4 @@
18
18
  - unless simple
19
19
  %td.actions
20
20
  = page.add_child_option
21
- = page.remove_option
21
+ = page.remove_option
@@ -2,7 +2,7 @@
2
2
 
3
3
  - render_region :main do |main|
4
4
  - main.edit_header do
5
- %h1= ''
5
+ %h1= t('edit_page')
6
6
  - main.edit_form do
7
7
  = form_for @page, :as => :page, :url => admin_page_path(@page), :html => {:method => :put, :multipart => true, :id => 'edit_page', 'data-onsubmit_status'=>t('saving_changes')} do |fields|
8
8
  = render :partial => "fields", :object => fields
@@ -9,11 +9,11 @@
9
9
  .inset
10
10
  %table.index#site_map
11
11
  %tbody
12
- - render_nodes @page, @page.id, nil, true
12
+ - render_nodes @page, @page.id
13
13
  = @rendered_html.html_safe
14
14
 
15
15
  = form_for [:admin, @page.becomes(Page)], :html => {:method => :delete, 'data-onsubmit_status'=>"Removing pages&#8230;"} do
16
16
  .buttons
17
17
  %input.button{:type=>"submit", :value => t('delete_pages', :pages => pages) }/
18
18
  = t('or')
19
- = link_to t('cancel'), admin_pages_path, class: 'alt'
19
+ = link_to t('cancel'), admin_pages_url
@@ -6,39 +6,39 @@
6
6
  %h1= t('personal_preferences')
7
7
 
8
8
  - main.edit_form do
9
- = form_for @user, :url => admin_preferences_path, :html => { :method => :put, 'data-onsubmit_status' => "#{t('saving_preferences')}&#8230;" } do |f|
10
- %fieldset
11
- = render :partial => 'admin/users/avatar'
12
-
13
- = render_region :form_top, :locals => {:f => f}
14
-
15
- - render_region :form, :locals => {:f => f} do |form|
16
- - form.edit_name do
17
- %p
18
- = f.label :name, t("name")
19
- = f.text_field :name, :class => "textbox", :size => 32, :maxlength => 100
20
-
21
- - form.edit_email do
22
- %p
23
- = f.label :email, t("email_address"), :class => "optional"
24
- = f.text_field "email", :class => 'textbox', :size => 32, :maxlength => 255
25
-
26
- - form.edit_username do
27
- %p
28
- = f.label :login, t("username")
29
- = f.text_field "login", :class => "textbox", :size => 32, :maxlength => 40, :required => true
30
-
31
- - form.edit_password do
32
- = render "admin/users/password_fields", :f => f
33
-
34
- - form.edit_locale do
35
- %p
36
- = f.label :locale, t('language')
37
- = f.select "locale", available_locales_select
38
-
39
- - render_region :form_bottom, :locals => {:f => f} do |form_bottom|
40
- - form_bottom.edit_buttons do
41
- .buttons
42
- = save_model_button @user
43
- = t('or')
44
- = link_to t('cancel'), admin_url, class: 'alt'
9
+ = form_for @user, :url => admin_preferences_url, :html => { :method => :put, 'data-onsubmit_status' => "#{t('saving_preferences')}&#8230;" } do |f|
10
+
11
+ = render :partial => 'admin/users/avatar'
12
+
13
+ = render_region :form_top, :locals => {:f => f}
14
+
15
+ - render_region :form, :locals => {:f => f} do |form|
16
+ - form.edit_name do
17
+ %p
18
+ = f.label :name, t("name")
19
+ = f.text_field :name, :class => "textbox", :size => 32, :maxlength => 100
20
+
21
+ - form.edit_email do
22
+ %p
23
+ = f.label :email, t("email_address"), :class => "optional"
24
+ = f.text_field "email", :class => 'textbox', :size => 32, :maxlength => 255
25
+
26
+ - form.edit_username do
27
+ %p
28
+ = f.label :login, t("username")
29
+ = f.text_field "login", :class => "textbox", :size => 32, :maxlength => 40, :required => true
30
+
31
+ - form.edit_password do
32
+ = render "admin/users/password_fields", :f => f
33
+
34
+ - form.edit_locale do
35
+ %p
36
+ = f.label :locale, t('language')
37
+ = f.select "locale", available_locales_select
38
+
39
+ - render_region :form_bottom, :locals => {:f => f} do |form_bottom|
40
+ - form_bottom.edit_buttons do
41
+ .buttons
42
+ = save_model_button @user
43
+ = t('or')
44
+ = link_to t('cancel'), admin_url
@@ -48,6 +48,6 @@
48
48
  = save_model_button(@user)
49
49
  = save_model_and_continue_editing_button(@user)
50
50
  = t('or')
51
- = link_to t('cancel'), admin_users_path, class: 'alt'
51
+ = link_to t('cancel'), admin_users_path
52
52
  - form_bottom.edit_timestamp do
53
53
  = updated_stamp @user
@@ -13,6 +13,6 @@
13
13
  - unless @user.new_record?
14
14
  %span
15
15
  = t('or')
16
- %a{:href=>"#", :class=>"warning", :onclick=>" $('#display_password').show(); $('#change_password').hide()"}= t('cancel', class: 'alt')
16
+ %a{:href=>"#", :onclick=>" $('#display_password').show(); $('#change_password').hide()"}= t('cancel')
17
17
 
18
18
 
@@ -13,4 +13,4 @@
13
13
  .buttons
14
14
  %input.button{:type=>"submit", :value => t('delete_user')}/
15
15
  = t('or')
16
- = link_to t('cancel'), admin_users_path, class: 'alt'
16
+ = link_to t('cancel'), admin_users_path
@@ -3,7 +3,7 @@
3
3
  #single_form
4
4
  %h1= t('please_login')
5
5
 
6
- = form_tag login_path do
6
+ = form_tag login_url do
7
7
  %p
8
8
  %label{:for=>"username_or_email"}= t('username_or_email')
9
9
  = text_field_tag "username_or_email", @username_or_email, :class => 'textbox', :maxlength => 40, :size => 40
@@ -31,24 +31,22 @@
31
31
  #page
32
32
  #header
33
33
  - if logged_in?
34
- = render_region :before_nav
35
- - render_region :navigation do |navigation|
36
- #site_links
37
- = %{#{t('logged_in_as')} #{link_to h(current_user.name), edit_admin_preferences_path} &nbsp; (#{link_to t('log_out'), logout_path})}.html_safe
38
- &nbsp;
39
- = link_to t('view_site'), root_path, :id=>"view_site"
40
- %ul#navigation
41
- - nav_tabs.each do |tab|
42
- - if tab.visible?(current_user)
43
- %li{:class=>('current ' if current_tab?(tab)).to_s}
44
- = link_to translate_with_default(tab.name), (tab.first.relative_url if tab.first)
45
- #toolbar
46
- - if @current_tab and @current_tab.size > 1
47
- %ul#secondary_navigation
48
- - @current_tab.each do |sub_item|
49
- - if sub_item.visible?(current_user)
50
- %li= link_to translate_with_default(sub_item.name), sub_item.relative_url, :class=>('current' if current_item?(sub_item))
51
- = yield :toolbar
34
+ #site_links
35
+ = %{#{t('logged_in_as')} #{link_to h(current_user.name), edit_admin_preferences_path} &nbsp; (#{link_to t('log_out'), logout_path})}.html_safe
36
+ &nbsp;
37
+ = link_to t('view_site'), root_path, :id=>"view_site"
38
+ %ul#navigation
39
+ - nav_tabs.each do |tab|
40
+ - if tab.visible?(current_user)
41
+ %li{:class=>('current ' if current_tab?(tab)).to_s}
42
+ = link_to translate_with_default(tab.name), (tab.first.relative_url if tab.first)
43
+ #toolbar
44
+ - if @current_tab and @current_tab.size > 1
45
+ %ul#secondary_navigation
46
+ - @current_tab.each do |sub_item|
47
+ - if sub_item.visible?(current_user)
48
+ %li= link_to translate_with_default(sub_item.name), sub_item.relative_url, :class=>('current' if current_item?(sub_item))
49
+ = yield :toolbar
52
50
  #main
53
51
  - if flash[:notice]
54
52
  #notice
@@ -8,8 +8,6 @@ require 'trusty_cms/extension_loader'
8
8
  require 'trusty_cms/initializer'
9
9
  require 'compass'
10
10
  require 'rack/cache'
11
- require 'trustygems'
12
-
13
11
 
14
12
  if defined?(Bundler)
15
13
  # If you precompile assets before deploying to production, use this line
@@ -119,6 +117,7 @@ module TrustyCms
119
117
  html
120
118
  end
121
119
  end
120
+
122
121
  config.after_initialize do
123
122
  extension_loader.load_extensions
124
123
  extension_loader.load_extension_initalizers