dm_cms 4.2.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +22 -0
  3. data/README.md +31 -0
  4. data/Rakefile +34 -0
  5. data/app/assets/javascripts/dm_cms/admin.js +58 -0
  6. data/app/assets/javascripts/dm_cms/application.js +16 -0
  7. data/app/assets/stylesheets/dm_cms/admin.css +3 -0
  8. data/app/assets/stylesheets/dm_cms/application.css +13 -0
  9. data/app/controllers/dm_cms/admin/admin_controller.rb +14 -0
  10. data/app/controllers/dm_cms/admin/cms_blogs_controller.rb +89 -0
  11. data/app/controllers/dm_cms/admin/cms_contentitems_controller.rb +96 -0
  12. data/app/controllers/dm_cms/admin/cms_pages_controller.rb +100 -0
  13. data/app/controllers/dm_cms/admin/cms_posts_controller.rb +67 -0
  14. data/app/controllers/dm_cms/admin/cms_snippets_controller.rb +73 -0
  15. data/app/controllers/dm_cms/admin/dashboard_controller.rb +12 -0
  16. data/app/controllers/dm_cms/admin/media_files_controller.rb +80 -0
  17. data/app/controllers/dm_cms/application_controller.rb +9 -0
  18. data/app/controllers/dm_cms/blogs_controller.rb +50 -0
  19. data/app/controllers/dm_cms/comments_controller.rb +3 -0
  20. data/app/controllers/dm_cms/contact_form_controller.rb +27 -0
  21. data/app/controllers/dm_cms/pages_controller.rb +67 -0
  22. data/app/controllers/dm_cms/posts_controller.rb +69 -0
  23. data/app/datatables/blog_user_datatable.rb +79 -0
  24. data/app/helpers/dm_cms/analytics_helper.rb +27 -0
  25. data/app/helpers/dm_cms/application_helper.rb +4 -0
  26. data/app/helpers/dm_cms/cms_contentitems_helper.rb +8 -0
  27. data/app/helpers/dm_cms/cms_pages_helper.rb +30 -0
  28. data/app/helpers/dm_cms/pages_helper.rb +204 -0
  29. data/app/helpers/dm_cms/posts_helper.rb +26 -0
  30. data/app/helpers/dm_cms/render_helper.rb +50 -0
  31. data/app/inputs/media_input.rb +17 -0
  32. data/app/liquid/tags/markdown.rb +30 -0
  33. data/app/mailers/post_notify_mailer.rb +36 -0
  34. data/app/models/cms_blog.rb +89 -0
  35. data/app/models/cms_contentitem.rb +76 -0
  36. data/app/models/cms_page.rb +227 -0
  37. data/app/models/cms_post.rb +76 -0
  38. data/app/models/cms_snippet.rb +42 -0
  39. data/app/models/contact_form.rb +28 -0
  40. data/app/models/dm_cms/concerns/ability.rb +54 -0
  41. data/app/models/dm_cms/permitted_params.rb +34 -0
  42. data/app/models/media_file.rb +102 -0
  43. data/app/presenters/cms_blog_presenter.rb +15 -0
  44. data/app/presenters/cms_page_presenter.rb +23 -0
  45. data/app/presenters/cms_post_presenter.rb +11 -0
  46. data/app/presenters/cms_snippet_presenter.rb +10 -0
  47. data/app/uploaders/media_uploader.rb +169 -0
  48. data/app/views/customized/analytics/_google_analytics.html.erb +11 -0
  49. data/app/views/dm_cms/admin/cms_blogs/_form.html.erb +34 -0
  50. data/app/views/dm_cms/admin/cms_blogs/edit.html.erb +2 -0
  51. data/app/views/dm_cms/admin/cms_blogs/index.html.erb +44 -0
  52. data/app/views/dm_cms/admin/cms_blogs/new.html.erb +2 -0
  53. data/app/views/dm_cms/admin/cms_blogs/show.html.erb +167 -0
  54. data/app/views/dm_cms/admin/cms_contentitems/_form.html.erb +43 -0
  55. data/app/views/dm_cms/admin/cms_contentitems/_form_dialog.html.erb +17 -0
  56. data/app/views/dm_cms/admin/cms_contentitems/edit.html.erb +1 -0
  57. data/app/views/dm_cms/admin/cms_contentitems/markdown.html.erb +21 -0
  58. data/app/views/dm_cms/admin/cms_contentitems/new_content.html.erb +1 -0
  59. data/app/views/dm_cms/admin/cms_pages/_content_toolbar.html.erb +11 -0
  60. data/app/views/dm_cms/admin/cms_pages/_form.html.erb +50 -0
  61. data/app/views/dm_cms/admin/cms_pages/_tree.html.erb +20 -0
  62. data/app/views/dm_cms/admin/cms_pages/_tree_sidebar.html.erb +8 -0
  63. data/app/views/dm_cms/admin/cms_pages/edit.html.erb +2 -0
  64. data/app/views/dm_cms/admin/cms_pages/index.html.erb +32 -0
  65. data/app/views/dm_cms/admin/cms_pages/new_page.html.erb +2 -0
  66. data/app/views/dm_cms/admin/cms_pages/show.html.erb +54 -0
  67. data/app/views/dm_cms/admin/cms_posts/_form.html.erb +59 -0
  68. data/app/views/dm_cms/admin/cms_posts/edit.html.erb +2 -0
  69. data/app/views/dm_cms/admin/cms_posts/new.html.erb +1 -0
  70. data/app/views/dm_cms/admin/cms_snippets/_form.html.erb +28 -0
  71. data/app/views/dm_cms/admin/cms_snippets/edit.html.erb +1 -0
  72. data/app/views/dm_cms/admin/cms_snippets/index.html.erb +29 -0
  73. data/app/views/dm_cms/admin/cms_snippets/new.html.erb +1 -0
  74. data/app/views/dm_cms/admin/dashboard/_widget_blog_comments.html.erb +37 -0
  75. data/app/views/dm_cms/admin/dashboard/widget_blog_comments.js.erb +1 -0
  76. data/app/views/dm_cms/admin/media_files/_form.html.erb +102 -0
  77. data/app/views/dm_cms/admin/media_files/edit.html.erb +3 -0
  78. data/app/views/dm_cms/admin/media_files/index.html.erb +98 -0
  79. data/app/views/dm_cms/admin/media_files/new.html.erb +3 -0
  80. data/app/views/dm_cms/admin/shared/_liquid_tags_ref.html.erb +35 -0
  81. data/app/views/dm_cms/blogs/show.html.erb +0 -0
  82. data/app/views/dm_cms/blogs/toggle_follow.js.coffee +5 -0
  83. data/app/views/dm_cms/contact_form/create.html.erb +2 -0
  84. data/app/views/dm_cms/contact_form/create.js.erb +2 -0
  85. data/app/views/dm_cms/pages/_content_fragment.html.erb +13 -0
  86. data/app/views/dm_cms/pages/_snippet_fragment.html.erb +12 -0
  87. data/app/views/dm_cms/pages/coming_soon.html.erb +2 -0
  88. data/app/views/dm_cms/pages/show.html.erb +0 -0
  89. data/app/views/dm_cms/posts/show.html.erb +0 -0
  90. data/app/views/dm_cms/shared/_comment.html.erb +22 -0
  91. data/app/views/dm_cms/shared/_comment_form.html.erb +16 -0
  92. data/app/views/dm_cms/shared/_comment_list.html.erb +11 -0
  93. data/app/views/dm_cms/shared/_social_buttons.html.erb +6 -0
  94. data/app/views/layouts/email_templates/dm_cms_email_layout.html.erb +320 -0
  95. data/app/views/layouts/email_templates/dm_cms_email_layout.text.erb +1 -0
  96. data/app/views/layouts/email_templates/dm_cms_post_notify.html.erb +13 -0
  97. data/app/views/layouts/email_templates/dm_cms_post_notify.text.erb +9 -0
  98. data/app/views/liquid_tags/_contact_form.html.erb +17 -0
  99. data/config/initializers/liquid_init.rb +2 -0
  100. data/config/locales/cms.cs.yml +42 -0
  101. data/config/locales/cms.de.yml +42 -0
  102. data/config/locales/cms.en.yml +42 -0
  103. data/config/locales/cms.fi.yml +42 -0
  104. data/config/locales/cms.ja.yml +42 -0
  105. data/config/routes.rb +70 -0
  106. data/db/migrate/20121103181909_create_cms.rb +91 -0
  107. data/db/migrate/20130206213720_add_account_to_cms.rb +10 -0
  108. data/db/migrate/20130507123255_create_blog.rb +61 -0
  109. data/db/migrate/20130531212537_add_notification_sent.rb +5 -0
  110. data/db/migrate/20130605184116_add_blog_comment.rb +7 -0
  111. data/db/migrate/20131128201053_add_blog_image.rb +5 -0
  112. data/db/migrate/20140217135228_rename_snippet_slug.rb +13 -0
  113. data/db/migrate/20140303121217_add_requires_subscription_blog.rb +7 -0
  114. data/db/migrate/20140328205246_add_pages_ranked_model.rb +22 -0
  115. data/db/migrate/20140423113417_add_blog_owner.rb +6 -0
  116. data/db/migrate/20140428122156_create_media_files.rb +29 -0
  117. data/db/migrate/20140523134543_add_cmspage_summary.rb +6 -0
  118. data/db/migrate/20140601151631_add_blog_image_email_header.rb +5 -0
  119. data/db/migrate/20141004154725_add_header_image.rb +9 -0
  120. data/db/migrate/20160821150108_index_foreign_keys_in_cms_blogs.rb +6 -0
  121. data/db/migrate/20160821150109_index_foreign_keys_in_cms_media_files.rb +6 -0
  122. data/db/migrate/20160821150110_index_foreign_keys_in_cms_posts.rb +6 -0
  123. data/lib/dm_cms.rb +4 -0
  124. data/lib/dm_cms/engine.rb +16 -0
  125. data/lib/dm_cms/liquid/filters/liquid_filters.rb +11 -0
  126. data/lib/dm_cms/liquid/tags/contact_form.rb +35 -0
  127. data/lib/dm_cms/liquid/tags/div.rb +42 -0
  128. data/lib/dm_cms/liquid/tags/image.rb +76 -0
  129. data/lib/dm_cms/liquid/tags/quote.rb +38 -0
  130. data/lib/dm_cms/liquid/tags/snippet.rb +37 -0
  131. data/lib/dm_cms/liquid/tags/url_asset.rb +41 -0
  132. data/lib/dm_cms/liquid/tags/url_media.rb +42 -0
  133. data/lib/dm_cms/liquid/tags/url_protected.rb +31 -0
  134. data/lib/tasks/dm_cms_tasks.rake +4 -0
  135. data/spec/controllers/admin/cms_blogs_controller_spec.rb +173 -0
  136. data/spec/controllers/admin/cms_pages_controller_spec.rb +182 -0
  137. data/spec/controllers/admin/cms_posts_controller_spec.rb +166 -0
  138. data/spec/dummy/README.rdoc +28 -0
  139. data/spec/dummy/Rakefile +6 -0
  140. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  141. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  142. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  143. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  144. data/spec/dummy/app/models/ability.rb +12 -0
  145. data/spec/dummy/app/models/user.rb +6 -0
  146. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  147. data/spec/dummy/bin/bundle +3 -0
  148. data/spec/dummy/bin/rails +4 -0
  149. data/spec/dummy/bin/rake +4 -0
  150. data/spec/dummy/config.ru +4 -0
  151. data/spec/dummy/config/application.rb +26 -0
  152. data/spec/dummy/config/boot.rb +5 -0
  153. data/spec/dummy/config/database.yml +25 -0
  154. data/spec/dummy/config/environment.rb +5 -0
  155. data/spec/dummy/config/environments/development.rb +37 -0
  156. data/spec/dummy/config/environments/production.rb +82 -0
  157. data/spec/dummy/config/environments/test.rb +39 -0
  158. data/spec/dummy/config/initializers/_themes_for_rails.rb +39 -0
  159. data/spec/dummy/config/initializers/account_initialization.rb +28 -0
  160. data/spec/dummy/config/initializers/assets.rb +8 -0
  161. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  162. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  163. data/spec/dummy/config/initializers/dm_core.rb +6 -0
  164. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  165. data/spec/dummy/config/initializers/inflections.rb +16 -0
  166. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  167. data/spec/dummy/config/initializers/session_store.rb +3 -0
  168. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  169. data/spec/dummy/config/locales/en.yml +23 -0
  170. data/spec/dummy/config/routes.rb +19 -0
  171. data/spec/dummy/config/secrets.yml +22 -0
  172. data/spec/dummy/db/development.sqlite3 +0 -0
  173. data/spec/dummy/db/migrate/20141114170927_add_globalize_countries.dm_core.rb +50 -0
  174. data/spec/dummy/db/migrate/20141114170928_devise_create_users.dm_core.rb +46 -0
  175. data/spec/dummy/db/migrate/20141114170929_add_user_fields.dm_core.rb +14 -0
  176. data/spec/dummy/db/migrate/20141114170930_rolify_create_roles.dm_core.rb +20 -0
  177. data/spec/dummy/db/migrate/20141114170931_add_last_access.dm_core.rb +10 -0
  178. data/spec/dummy/db/migrate/20141114170932_create_versions.dm_core.rb +19 -0
  179. data/spec/dummy/db/migrate/20141114170933_add_object_changes_column_to_versions.dm_core.rb +12 -0
  180. data/spec/dummy/db/migrate/20141114170934_create_dm_core_accounts.dm_core.rb +13 -0
  181. data/spec/dummy/db/migrate/20141114170935_add_account_to_users.dm_core.rb +9 -0
  182. data/spec/dummy/db/migrate/20141114170936_create_preferences.dm_core.rb +13 -0
  183. data/spec/dummy/db/migrate/20141114170937_create_comments.dm_core.rb +22 -0
  184. data/spec/dummy/db/migrate/20141114170938_add_activity.dm_core.rb +21 -0
  185. data/spec/dummy/db/migrate/20141114170939_add_type_to_comments.dm_core.rb +9 -0
  186. data/spec/dummy/db/migrate/20141114170940_add_category.dm_core.rb +28 -0
  187. data/spec/dummy/db/migrate/20141114170941_create_email_table.dm_core.rb +26 -0
  188. data/spec/dummy/db/migrate/20141114170942_add_user_profile.dm_core.rb +46 -0
  189. data/spec/dummy/db/migrate/20141114170943_add_profile_email.dm_core.rb +14 -0
  190. data/spec/dummy/db/migrate/20141114170944_create_payment_history.dm_core.rb +37 -0
  191. data/spec/dummy/db/migrate/20141114170945_change_anchor_field.dm_core.rb +10 -0
  192. data/spec/dummy/db/migrate/20141114170946_create_user_site_profile.dm_core.rb +27 -0
  193. data/spec/dummy/db/migrate/20141114170947_add_avatar.dm_core.rb +12 -0
  194. data/spec/dummy/db/migrate/20141114170948_add_notify_to_payment_history.dm_core.rb +8 -0
  195. data/spec/dummy/db/migrate/20141114170949_acts_as_votable_migration.dm_core.rb +28 -0
  196. data/spec/dummy/db/migrate/20141114170950_add_user_site_profile_uuid.dm_core.rb +19 -0
  197. data/spec/dummy/db/migrate/20141114170951_add_invoice_id.dm_core.rb +7 -0
  198. data/spec/dummy/db/migrate/20141114170952_acts_as_follower_migration.dm_core.rb +18 -0
  199. data/spec/dummy/db/migrate/20141114170953_rename_invoice_id.dm_core.rb +12 -0
  200. data/spec/dummy/db/migrate/20141114170954_add_core_addresses.dm_core.rb +18 -0
  201. data/spec/dummy/db/migrate/20141114170955_papertrail_increase_column.dm_core.rb +9 -0
  202. data/spec/dummy/db/migrate/20141114170956_acts_as_taggable_on_migration.dm_core.rb +32 -0
  203. data/spec/dummy/db/migrate/20141114170957_add_missing_unique_indices.dm_core.rb +23 -0
  204. data/spec/dummy/db/migrate/20141114170958_add_taggings_counter_cache_to_tags.dm_core.rb +16 -0
  205. data/spec/dummy/db/migrate/20141114170959_create_custom_fields.dm_core.rb +40 -0
  206. data/spec/dummy/db/migrate/20141114170960_add_missing_taggable_index.dm_core.rb +11 -0
  207. data/spec/dummy/db/migrate/20141114170961_create_documents.dm_knowledge.rb +19 -0
  208. data/spec/dummy/db/migrate/20141114170962_add_document_notes.dm_knowledge.rb +7 -0
  209. data/spec/dummy/db/migrate/20160128134522_add_favored_locale.dm_core.rb +17 -0
  210. data/spec/dummy/db/migrate/20160128134523_update_papertrail_v4.dm_core.rb +41 -0
  211. data/spec/dummy/db/schema.rb +590 -0
  212. data/spec/dummy/db/seeds.rb +18 -0
  213. data/spec/dummy/public/404.html +67 -0
  214. data/spec/dummy/public/422.html +67 -0
  215. data/spec/dummy/public/500.html +66 -0
  216. data/spec/dummy/public/favicon.ico +0 -0
  217. data/spec/dummy/themes/_mbus/_readme.md +6 -0
  218. data/spec/dummy/themes/_mbus/_theme.yml +21 -0
  219. data/spec/dummy/themes/_mbus/theme_assets/_mbus/javascripts/application.js +9 -0
  220. data/spec/dummy/themes/_mbus/theme_assets/_mbus/javascripts/bootstrap.js +2114 -0
  221. data/spec/dummy/themes/_mbus/theme_assets/_mbus/javascripts/bootstrap.min.js +6 -0
  222. data/spec/dummy/themes/_mbus/theme_assets/_mbus/javascripts/contact_me.js +75 -0
  223. data/spec/dummy/themes/_mbus/theme_assets/_mbus/javascripts/jqBootstrapValidation.js +912 -0
  224. data/spec/dummy/themes/_mbus/theme_assets/_mbus/javascripts/jquery-1.11.0.js +4 -0
  225. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/application.css +14 -0
  226. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/bootstrap.css +6203 -0
  227. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/bootstrap.min.css +5 -0
  228. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/css/font-awesome.css +1566 -0
  229. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/css/font-awesome.min.css +4 -0
  230. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/fonts/FontAwesome.otf +0 -0
  231. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/fonts/fontawesome-webfont.eot +0 -0
  232. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/fonts/fontawesome-webfont.svg +504 -0
  233. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/fonts/fontawesome-webfont.ttf +0 -0
  234. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/fonts/fontawesome-webfont.woff +0 -0
  235. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/less/bordered-pulled.less +16 -0
  236. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/less/core.less +12 -0
  237. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/less/fixed-width.less +6 -0
  238. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/less/font-awesome.less +17 -0
  239. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/less/icons.less +506 -0
  240. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/less/larger.less +13 -0
  241. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/less/list.less +19 -0
  242. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/less/mixins.less +20 -0
  243. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/less/path.less +14 -0
  244. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/less/rotated-flipped.less +9 -0
  245. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/less/spinning.less +32 -0
  246. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/less/stacked.less +20 -0
  247. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/less/variables.less +515 -0
  248. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/scss/_bordered-pulled.scss +16 -0
  249. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/scss/_core.scss +12 -0
  250. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/scss/_fixed-width.scss +6 -0
  251. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/scss/_icons.scss +506 -0
  252. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/scss/_larger.scss +13 -0
  253. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/scss/_list.scss +19 -0
  254. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/scss/_mixins.scss +20 -0
  255. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/scss/_path.scss +14 -0
  256. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/scss/_rotated-flipped.scss +9 -0
  257. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/scss/_spinning.scss +32 -0
  258. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/scss/_stacked.scss +20 -0
  259. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/scss/_variables.scss +515 -0
  260. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/font-awesome-4.1.0/scss/font-awesome.scss +17 -0
  261. data/spec/dummy/themes/_mbus/theme_assets/_mbus/stylesheets/modern-business.css +93 -0
  262. data/spec/dummy/themes/_mbus/theme_support/config/load_theme.rb +0 -0
  263. data/spec/dummy/themes/_mbus/theme_support/locales/site.cs.yml +57 -0
  264. data/spec/dummy/themes/_mbus/theme_support/locales/site.de.yml +57 -0
  265. data/spec/dummy/themes/_mbus/theme_support/locales/site.en.yml +57 -0
  266. data/spec/dummy/themes/_mbus/theme_support/locales/site.fi.yml +58 -0
  267. data/spec/dummy/themes/_mbus/theme_support/locales/site.ja.yml +57 -0
  268. data/spec/dummy/themes/_mbus/theme_support/views/layouts/cms_templates/_blog_right_sidebar.html.erb +91 -0
  269. data/spec/dummy/themes/_mbus/theme_support/views/layouts/cms_templates/_comment.html.erb +21 -0
  270. data/spec/dummy/themes/_mbus/theme_support/views/layouts/cms_templates/_comment_form.html.erb +16 -0
  271. data/spec/dummy/themes/_mbus/theme_support/views/layouts/cms_templates/_comment_list.html.erb +7 -0
  272. data/spec/dummy/themes/_mbus/theme_support/views/layouts/cms_templates/_comment_section.html.erb +17 -0
  273. data/spec/dummy/themes/_mbus/theme_support/views/layouts/cms_templates/_page_footer.html.erb +11 -0
  274. data/spec/dummy/themes/_mbus/theme_support/views/layouts/cms_templates/_page_header.html.erb +39 -0
  275. data/spec/dummy/themes/_mbus/theme_support/views/layouts/cms_templates/_page_top.html.erb +24 -0
  276. data/spec/dummy/themes/_mbus/theme_support/views/layouts/cms_templates/_post_summary_item.html.erb +11 -0
  277. data/spec/dummy/themes/_mbus/theme_support/views/layouts/cms_templates/_social_buttons_initialization.html.erb +10 -0
  278. data/spec/dummy/themes/_mbus/theme_support/views/layouts/cms_templates/blog.html.erb +47 -0
  279. data/spec/dummy/themes/_mbus/theme_support/views/layouts/cms_templates/blog_post.html.erb +55 -0
  280. data/spec/dummy/themes/_mbus/theme_support/views/layouts/cms_templates/content_full_width.html.erb +28 -0
  281. data/spec/dummy/themes/_mbus/theme_support/views/layouts/cms_templates/content_with_left_nav.html.erb +44 -0
  282. data/spec/dummy/themes/_mbus/theme_support/views/layouts/cms_templates/index.html.erb +19 -0
  283. data/spec/dummy/themes/local/_theme.yml +8 -0
  284. data/spec/factories/accounts.rb +17 -0
  285. data/spec/factories/blogs.rb +19 -0
  286. data/spec/factories/posts.rb +23 -0
  287. data/spec/factories/user_profiles.rb +10 -0
  288. data/spec/factories/users.rb +19 -0
  289. data/spec/features/admin/blog_admin_spec.rb +16 -0
  290. data/spec/models/cms_blog_spec.rb +37 -0
  291. data/spec/models/cms_page_spec.rb +9 -0
  292. data/spec/models/cms_post_spec.rb +44 -0
  293. data/spec/rails_helper.rb +70 -0
  294. data/spec/spec_helper.rb +85 -0
  295. data/spec/support/accounts.rb +17 -0
  296. data/spec/support/devise.rb +44 -0
  297. data/spec/support/fix_locale.rb +57 -0
  298. metadata +545 -0
@@ -0,0 +1,67 @@
1
+ class DmCms::Admin::CmsPostsController < DmCms::Admin::AdminController
2
+ include DmCms::PermittedParams
3
+
4
+ before_filter :blog_lookup
5
+ before_filter :post_lookup, :except => [:new, :create]
6
+
7
+ #------------------------------------------------------------------------------
8
+ def new
9
+ @post = @blog.posts.build(comments_allowed: @blog.comments_allowed)
10
+ end
11
+
12
+ #------------------------------------------------------------------------------
13
+ def edit
14
+ end
15
+
16
+ #------------------------------------------------------------------------------
17
+ def create
18
+ @post = @blog.posts.new(cms_post_params)
19
+
20
+ if @post.save
21
+ redirect_to admin_cms_blog_url(@blog), notice: 'Post was successfully created.'
22
+ else
23
+ render action: :new
24
+ end
25
+ end
26
+
27
+ #------------------------------------------------------------------------------
28
+ def update
29
+ if @post.update_attributes(cms_post_params)
30
+ redirect_to admin_cms_blog_url(@blog), notice: 'Post was successfully updated.'
31
+ else
32
+ render action: :edit
33
+ end
34
+ end
35
+
36
+ #------------------------------------------------------------------------------
37
+ def destroy
38
+ @post.destroy
39
+ redirect_to admin_cms_blog_url(@blog), notice: 'Post was successfully deleted.'
40
+ end
41
+
42
+ #------------------------------------------------------------------------------
43
+ def send_notifications_emails
44
+ status = @post.send_notification_emails(params[:test] ? current_user : nil)
45
+ if params[:test] && status == 0
46
+ redirect_to admin_cms_blog_url(@blog), error: "Unable to send test email"
47
+ else
48
+ msg = params[:test] ? "Test notification sent to #{current_user.email}" : "#{status} emails are being sent"
49
+ redirect_to admin_cms_blog_url(@blog), notice: msg
50
+ end
51
+ end
52
+
53
+ private
54
+
55
+ # the blog needs to be specified in the url for each post. post slugs are
56
+ # unique per blog
57
+ #------------------------------------------------------------------------------
58
+ def blog_lookup
59
+ @blog = CmsBlog.friendly.find(params[:cms_blog_id])
60
+ end
61
+
62
+ #------------------------------------------------------------------------------
63
+ def post_lookup
64
+ @post = @blog.posts.friendly.find(params[:id])
65
+ end
66
+
67
+ end
@@ -0,0 +1,73 @@
1
+ class DmCms::Admin::CmsSnippetsController < DmCms::Admin::AdminController
2
+ include DmCms::PermittedParams
3
+
4
+ before_filter :find_snippet, except: [:index, :new, :create]
5
+ before_filter :set_title
6
+
7
+ include DmCore::LiquidHelper
8
+
9
+ #------------------------------------------------------------------------------
10
+ def index
11
+ @cms_snippets = CmsSnippet.order('slug ASC')
12
+ end
13
+
14
+ #------------------------------------------------------------------------------
15
+ def new
16
+ @cms_snippet = CmsSnippet.new
17
+ end
18
+
19
+ #------------------------------------------------------------------------------
20
+ def create
21
+ @cms_snippet = CmsSnippet.new(cms_snippet_params)
22
+ if @cms_snippet.save
23
+ redirect_to admin_cms_snippets_url, notice: 'Snippet successfully created.'
24
+ else
25
+ render action: :new
26
+ end
27
+ end
28
+
29
+ #------------------------------------------------------------------------------
30
+ def edit
31
+ end
32
+
33
+ #------------------------------------------------------------------------------
34
+ def update
35
+ if @cms_snippet.update_attributes(cms_snippet_params)
36
+ redirect_to admin_cms_snippets_url, notice: 'Content updated'
37
+ else
38
+ render :action => :edit, alert: 'An error of some kind occurred'
39
+ end
40
+ end
41
+
42
+ #------------------------------------------------------------------------------
43
+ def destroy
44
+ @cms_snippet.destroy
45
+ redirect_to admin_cms_snippets_url
46
+ end
47
+
48
+ # [todo]
49
+ #------------------------------------------------------------------------------
50
+ def update_fragment
51
+ if @cms_snippet.update_attributes(cms_snippet_params)
52
+ #@cms_page.merge!(@item.cms_page.get_page_render_values)
53
+ #respond_to do |format|
54
+ # format.js { render :action => :update_fragment }
55
+ #end
56
+ end
57
+ end
58
+
59
+ private
60
+
61
+ #------------------------------------------------------------------------------
62
+ def find_snippet
63
+ @cms_snippet = CmsSnippet.friendly.find(params[:id])
64
+ end
65
+
66
+ # Set some values for the template based on the controller
67
+ #------------------------------------------------------------------------------
68
+ def set_title
69
+ text = 'Snippets'
70
+ content_for :content_title, text
71
+ end
72
+
73
+ end
@@ -0,0 +1,12 @@
1
+ class DmCms::Admin::DashboardController < DmCms::Admin::AdminController
2
+
3
+ #------------------------------------------------------------------------------
4
+ def widget_blog_comments
5
+ @comment_day = params[:comment_day].to_i
6
+ respond_to do |format|
7
+ format.html
8
+ format.js
9
+ end
10
+ end
11
+
12
+ end
@@ -0,0 +1,80 @@
1
+ class DmCms::Admin::MediaFilesController < DmCms::Admin::AdminController
2
+ include DmCms::PermittedParams
3
+
4
+ #------------------------------------------------------------------------------
5
+ def index
6
+ @tag_filter = params[:filter] || 'all'
7
+ @media_files = MediaFile.order('folder, media ASC')
8
+
9
+ @media_files = case @tag_filter
10
+ when 'all'
11
+ @media_files
12
+ when 'top'
13
+ @media_files.where(folder: '')
14
+ else
15
+ @media_files.tagged_with(@tag_filter)
16
+ end
17
+ @media_files = @media_files.paginate :page => params[:page], :per_page => 40
18
+ end
19
+
20
+ #------------------------------------------------------------------------------
21
+ def new
22
+ @media_file = MediaFile.new
23
+ end
24
+
25
+ #------------------------------------------------------------------------------
26
+ def edit
27
+ @media_file = MediaFile.find(params[:id])
28
+ end
29
+
30
+ #------------------------------------------------------------------------------
31
+ def create
32
+ @media_file = MediaFile.new(media_file_params) # for collecting all error msgs
33
+ if params[:media_list]
34
+ params[:media_list].each do |file|
35
+ media_file = MediaFile.new(media_file_params)
36
+ media_file.media = file
37
+ media_file.user = current_user
38
+ if !media_file.save
39
+ media_file.errors.each { |attribute, error| @media_file.errors.add(attribute, error) }
40
+ end
41
+ end
42
+ else
43
+ @media_file.errors[:base] << 'Please select files to upload'
44
+ end
45
+ if @media_file.errors.empty?
46
+ redirect_to admin_media_files_url, notice: 'Media successfully uploaded'
47
+ else
48
+ render action: :new
49
+ end
50
+ end
51
+
52
+ #------------------------------------------------------------------------------
53
+ def update
54
+ @media_file = MediaFile.find(params[:id])
55
+ @media_file.user = current_user
56
+
57
+ #--- must be set before attributes saved, otherwise retina versions not generated
58
+ @media_file.generate_retina = params[:media_file][:generate_retina] unless params[:media_file][:generate_retina].nil?
59
+ if @media_file.update_attributes(media_file_params)
60
+ redirect_to admin_media_files_url, notice: 'Media successfully updated'
61
+ else
62
+ render action: :edit
63
+ end
64
+ end
65
+
66
+ #------------------------------------------------------------------------------
67
+ def destroy
68
+ @media_file = MediaFile.find(params[:id])
69
+ @media_file.destroy
70
+ redirect_to admin_media_files_url
71
+ end
72
+
73
+ private
74
+
75
+ # Set some values for the template based on the controller
76
+ #------------------------------------------------------------------------------
77
+ def template_setup
78
+ end
79
+
80
+ end
@@ -0,0 +1,9 @@
1
+ # Subclass from main ApplicationController, which will subclass from DmCore
2
+ #------------------------------------------------------------------------------
3
+ class DmCms::ApplicationController < ::ApplicationController
4
+ include ApplicationHelper
5
+ helper DmCms::RenderHelper
6
+ helper DmCore::LiquidHelper
7
+ helper DmCore::AccountHelper
8
+ include DmCore::AccountHelper
9
+ end
@@ -0,0 +1,50 @@
1
+ class DmCms::BlogsController < DmCms::ApplicationController
2
+ include ApplicationHelper
3
+
4
+ helper DmCms::RenderHelper
5
+ helper DmCore::LiquidHelper
6
+ helper DmCms::PagesHelper
7
+ helper DmCms::PostsHelper
8
+ include DmCore::RenderHelper
9
+
10
+ before_filter :blog_lookup, :except => [:index, :toggle_follow]
11
+
12
+ layout 'cms_templates/blog', :only => [:index, :show]
13
+
14
+ #------------------------------------------------------------------------------
15
+ def index
16
+ redirect_to(index_url) and return if CmsBlog.count == 0
17
+ @blogs = CmsBlog.available_to_user(current_user)
18
+ @posts = CmsPost.where(cms_blog_id: @blogs.map(&:id)).includes(:cms_blog, :translations).published.order('published_on DESC').paginate page: page_number
19
+ @recent_posts = CmsPost.where(cms_blog_id: @blogs.map(&:id)).includes(:cms_blog, :translations).published.order('published_on DESC').limit(5)
20
+ content_for :page_title, I18n.t('cms.blog_header')
21
+
22
+ render action: :show
23
+ end
24
+
25
+ #------------------------------------------------------------------------------
26
+ def show
27
+ @blogs = CmsBlog.available_to_user(current_user)
28
+ @posts = @blog.posts.includes(:cms_blog, :translations).published.order('published_on DESC').paginate :page => page_number
29
+ @recent_posts = @blog.posts.includes(:cms_blog, :translations).published.order('published_on DESC').limit(5)
30
+ content_for :page_title, (@blog ? @blog.title : I18n.t('cms.blog_header'))
31
+ end
32
+
33
+ #------------------------------------------------------------------------------
34
+ def toggle_follow
35
+ @blog = CmsBlog.friendly.find(params[:cms_blog_id])
36
+ authorize! :read, @blog
37
+ @following = current_user.following.following?(@blog)
38
+ @following ? current_user.following.stop_following(@blog) : current_user.following.follow(@blog)
39
+ end
40
+
41
+ protected
42
+
43
+ #------------------------------------------------------------------------------
44
+ def blog_lookup
45
+ @blog = CmsBlog.friendly.find(params[:id])
46
+ redirect_to blog_root_path and return if @blog.nil?
47
+ authorize! :read, @blog
48
+ end
49
+
50
+ end
@@ -0,0 +1,3 @@
1
+ class DmCms::PostsController < DmCms::ApplicationController
2
+
3
+ end
@@ -0,0 +1,27 @@
1
+ class DmCms::ContactFormController < DmCms::ApplicationController
2
+ # Type of contact form object is specified by any param name that
3
+ # ends with '_contact_form'. Also takes into account themes.
4
+ # 'tech_contact_form' => TechContactForm
5
+ # 'theme_bogus_tech_contact_form' => ThemeBogus::TechContactForm
6
+ #------------------------------------------------------------------------------
7
+ def create
8
+ form_key = params.select {|key, v| key.end_with?('contact_form') }.first[0]
9
+ if form_key.present?
10
+ if form_key.start_with?('theme_')
11
+ parts = form_key.split('_')
12
+ part_module = parts[0...2].join('_')
13
+ part_class = parts[2..-1].join('_')
14
+ object = "#{part_module}/#{part_class}".camelize.constantize
15
+ else
16
+ part_class = form_key
17
+ object = "#{part_class}".camelize.constantize
18
+ end
19
+ @contact = object.new(params[form_key])
20
+ if @contact.deliver
21
+ flash.now[:notice] = I18n.t('cms.contact_form.sent')
22
+ @contact = nil
23
+ end
24
+ end
25
+ @partial_name = "liquid_tags/#{part_class || 'contact_form'}"
26
+ end
27
+ end
@@ -0,0 +1,67 @@
1
+ class DmCms::PagesController < DmCms::ApplicationController
2
+ include ApplicationHelper
3
+ include DmCore::UrlHelper
4
+ include DmCore::LiquidHelper
5
+ helper DmCms::RenderHelper
6
+ helper DmCore::LiquidHelper
7
+
8
+ #------------------------------------------------------------------------------
9
+ def index
10
+ redirect_to "/#{DmCore::Language.locale}/index"
11
+ end
12
+
13
+ #------------------------------------------------------------------------------
14
+ def show
15
+ render(file: 'public/404.html', status: :not_found, layout: false) && return if invalid_slug?
16
+
17
+ #--- make sure we have a valid locale for this site set
18
+ DmCore::Language.locale = current_account.verify_locale(params[:locale])
19
+
20
+ #--- find the requested page, and if not found try to find the 'missing' page
21
+ @current_page = CmsPage.friendly.find_by_slug(params[:slug])
22
+ if @current_page.nil? || !can?(:read, @current_page)
23
+ @current_page = CmsPage.friendly.find_by_slug('missing')
24
+ render(file: 'public/404.html', status: :not_found, layout: false) && return if @current_page.nil? || !@current_page.is_published?
25
+ end
26
+
27
+ if @current_page.requires_login && !signed_in?
28
+ redirect_to(main_app.new_user_session_url, alert: 'You must be signed into your account before you can access this page') and return
29
+ end
30
+
31
+ case @current_page.pagetype
32
+ when 'content'
33
+ status = (@current_page.slug == 'missing' ? 404 : 200)
34
+ content_for :page_title, @current_page.title
35
+ set_meta description: @current_page.summary, "og:description" => sanitize_text(markdown(@current_page.summary, safe: false))
36
+ set_meta "og:image" => site_asset_media_url(@current_page.featured_image) if @current_page.featured_image.present?
37
+ #--- if body=true, then use a minimal template to render, suitable for a minimal iFrame
38
+ if params['body'] == 'true'
39
+ render action: :show, layout: "cms_templates/minimal_page", status: status
40
+ else
41
+ render action: :show, layout: "cms_templates/#{@current_page.page_template}", status: status, formats: [:html]
42
+ end
43
+ when 'pagelink'
44
+ redirect_to showpage_url(slug: @current_page.link)
45
+ when 'controller/action'
46
+ redirect_to "/#{DmCore::Language.locale}/#{@current_page.link}"
47
+ when 'link'
48
+ redirect_to @current_page.link
49
+ when 'divider'
50
+ render text: 'Not a real page'
51
+ end
52
+ end
53
+
54
+ # Basically empty, as well as the view. But gets rendered by dm_core when the
55
+ # site is disabled
56
+ #------------------------------------------------------------------------------
57
+ def coming_soon
58
+ end
59
+
60
+ private
61
+
62
+ # might get missing image requests, try to weed them out
63
+ #------------------------------------------------------------------------------
64
+ def invalid_slug?
65
+ params[:slug].end_with?('.png', '.gif', '.jpg', '.mp4', '.mp3', '.ogg', '.avi', '.php', '.cgi')
66
+ end
67
+ end
@@ -0,0 +1,69 @@
1
+ class DmCms::PostsController < DmCms::ApplicationController
2
+ include ApplicationHelper
3
+
4
+ helper DmCms::RenderHelper
5
+ helper DmCore::LiquidHelper
6
+ helper DmCms::PagesHelper
7
+ helper DmCms::PostsHelper
8
+ include DmCore::RenderHelper
9
+ include DmCore::UrlHelper
10
+ include DmCore::LiquidHelper
11
+
12
+ before_filter :post_lookup, except: [:ajax_delete_comment]
13
+
14
+ layout 'cms_templates/blog_post'
15
+
16
+ #------------------------------------------------------------------------------
17
+ def show
18
+ @blogs = CmsBlog.available_to_user(current_user)
19
+ @recent_posts = CmsPost.where(cms_blog_id: @blogs.map(&:id)).includes(:cms_blog, :translations).published.order('published_on DESC').limit(5)
20
+ @comments = @post.comments.paginate page: page_number
21
+
22
+ #--- set title / meta data
23
+ content_for :page_title, @post.title
24
+ set_meta description: @post.summary, "og:description" => sanitize_text(markdown(@post.summary, safe: false))
25
+ set_meta "og:image" => site_asset_media_url(@post.featured_image) if @post.featured_image.present?
26
+ end
27
+
28
+ #------------------------------------------------------------------------------
29
+ def ajax_add_comment
30
+ @post.comments.create(:body => params[:comment][:body], :user_id => current_user.id) if current_user && !params[:comment][:body].blank?
31
+ redirect_to :back
32
+ end
33
+
34
+ # #------------------------------------------------------------------------------
35
+ # def ajax_edit_comment
36
+ # @comment = Comment.find(params[:id])
37
+ # @post = comment.commentable
38
+ # authorize! :read, @post.cms_blog
39
+ #
40
+ # if put_or_post?
41
+ # end
42
+ #
43
+ # @post.comments.create(:body => params[:comment][:body], :user_id => current_user.id)
44
+ # redirect_to :back
45
+ # end
46
+
47
+ #------------------------------------------------------------------------------
48
+ def ajax_delete_comment
49
+ if is_admin?
50
+ Comment.find(params[:id]).destroy
51
+ end
52
+ redirect_to :back and return
53
+ end
54
+
55
+ protected
56
+
57
+ #------------------------------------------------------------------------------
58
+ def post_lookup
59
+ @blog = CmsBlog.friendly.find(params[:cms_blog_id])
60
+ redirect_to blog_root_path and return if @blog.nil?
61
+ raise Account::LoginRequired.new(I18n.t('cms.blog_login_required')) if !current_user && !@blog.is_public?
62
+ authorize! :read, @blog
63
+
64
+ @post = @blog.posts.friendly.find(params[:id])
65
+ redirect_to blog_show_path(@blog) and return if @post.nil?
66
+ authorize! :read, @post
67
+ end
68
+
69
+ end