dm_cms 4.2.1.5

Sign up to get free protection for your applications and to get access to all the features.
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
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9892f8ad417c5b68f0d601e802996ceb07c6168a
4
+ data.tar.gz: 7c887c1ce18405fd978f21020877f85fcd18ba03
5
+ SHA512:
6
+ metadata.gz: 3e75b9d547e803ee117ece5c52fc5c3bbb41c763d474883bf8fd89f5b9af5206c9a1f7a3dbbacdda494bed3357b723efb7ddd75c7cb0198aec5e277a12819277
7
+ data.tar.gz: f4d2397cbff0e0c1ab19859a59daf824c96b4870bf721335976c0fd2b6bec952b24f245973ff02b29a963859f90206986a21f05ec182e2068dd02ba8017eea82
data/MIT-LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright 2013 digitalMoksha LLC
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,31 @@
1
+ # dm_cms
2
+
3
+ **dm_cms** provides the content management system (CMS) for the MokshaCMS collection of gems. A particular site can have multiple, configurable languages, and are integrated into the content editor. Content can be either Markdown, Textile, or raw HTML. Multi-lingual snippets of content can be defined and placed in other content when needed.
4
+
5
+ _The MokshaCMS collection of gems provides an integrated system of services for content, event, forum, learning, and newsletter management. It supports sites with multiple languages and mutliple distinct sites per installation. Administration is built in. Additional services/engines can be written to provide additional functionality._
6
+
7
+ - core foundation ([dm_core](https://github.com/digitalmoksha/dm_core))
8
+ - content management ([dm_cms](https://github.com/digitalmoksha/dm_cms))
9
+ - event management ([dm_event](https://github.com/digitalmoksha/dm_event))
10
+ - forum management ([dm_forum](https://github.com/digitalmoksha/dm_forum))
11
+ - learning management ([dm_lms](https://github.com/digitalmoksha/dm_lms))
12
+ - newsletter management ([dm_newsletter](https://github.com/digitalmoksha/dm_newsletter))
13
+
14
+ ## Installation
15
+
16
+ Add the following to your Gem file:
17
+
18
+ ```
19
+ gem 'dm_preferences', '~> 1.0'
20
+ gem 'dm_core', git: 'https://github.com/digitalmoksha/dm_core.git', branch: '4-2-stable'
21
+ gem 'dm_cms', git: 'https://github.com/digitalmoksha/dm_cms.git', branch: '4-2-stable'
22
+ gem 'themes_for_rails', git: 'git://github.com/digitalmoksha/themes_for_rails.git'
23
+ gem 'aced_rails', git: 'git://github.com/digitalmoksha/aced_rails.git'
24
+ ```
25
+
26
+ After running `bundle install`, run
27
+
28
+ ```
29
+ rake dm_core:install:migrations
30
+ rake dm_cms:install:migrations
31
+ ```
data/Rakefile ADDED
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'DmCms'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
24
+ load 'rails/tasks/engine.rake'
25
+
26
+ Bundler::GemHelper.install_tasks
27
+
28
+ require 'rspec/core'
29
+ require 'rspec/core/rake_task'
30
+
31
+ desc "Run all specs in spec directory (excluding plugin specs)"
32
+ RSpec::Core::RakeTask.new(:spec => 'app:db:test:prepare')
33
+
34
+ task :default => :spec
@@ -0,0 +1,58 @@
1
+ $(document).ready(function() {
2
+
3
+ $("#cms_page_pagetype").change(function() {
4
+ item = $('#cms_page_pagetype :selected').text();
5
+ switch (item) {
6
+ case 'content':
7
+ case 'divider':
8
+ $("#pagetype_link").hide();
9
+ break;
10
+ case 'pagelink':
11
+ case 'link':
12
+ case 'controller/action':
13
+ $("#pagetype_link").show();
14
+ break;
15
+ default:
16
+ break;
17
+ }
18
+ });
19
+ $("#cms_page_pagetype").change(); // initially run on page load
20
+
21
+ // When a link is selected in a bootstrap dropdown menu, set the
22
+ // associated text field with the text
23
+ //
24
+ // <button class="btn dropdown-toggle" data-toggle="dropdown" >Folder</button>
25
+ // <ul class="dropdown-menu dropdown-field" data-field="test">
26
+ // <li><a href="#"><i class="font-heart"></i>Favorite it</a></li>
27
+ // </ul>
28
+ // <input id="test" type="text">
29
+ //----------------------------------------------------------------
30
+ $(".dropdown-field li a").click(function(){
31
+ $("#" + $(this).parent().parent().data("field")).val( $(this).text() )
32
+ });
33
+
34
+ //----------------------------------------------------------------
35
+ $('#blog_user_table').dataTable( {
36
+ bJQueryUI: false,
37
+ bAutoWidth: false,
38
+ sPaginationType: 'full_numbers',
39
+ iDisplayLength: 10,
40
+ bProcessing: false,
41
+ bServerSide: true,
42
+ bStateSave: false,
43
+ aaSorting: [[0, 'asc']],
44
+ sDom: '<"datatable-header"f>t<"datatable-footer">',
45
+ oLanguage: {
46
+ sLengthMenu: "<span>Show entries:</span> _MENU_"
47
+ },
48
+ sAjaxSource: $('#blog_user_table').data('source')
49
+ });
50
+
51
+ // Set the height of the tag reference modal panes, so they scroll like we want
52
+ //----------------------------------------------------------------------
53
+ $('#tag_reference').on('show.bs.modal', function () {
54
+ $('.modal .modal-body .tag_details').css('max-height', $(window).height() * 0.7);
55
+ $('.modal .modal-body .tag_nav').css('max-height', $(window).height() * 0.7);
56
+ });
57
+
58
+ });
@@ -0,0 +1,16 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // the compiled file.
9
+ //
10
+ // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11
+ // GO AFTER THE REQUIRES BELOW.
12
+ //
13
+ //= require jquery
14
+ //= require jquery_ujs
15
+ //= require_tree .
16
+
@@ -0,0 +1,3 @@
1
+ /* @override
2
+ http://dev.telugubasha.net:3000/assets/dm_cms/admin.css?body=1 */
3
+
@@ -0,0 +1,13 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the top of the
9
+ * compiled file, but it's generally better to create a new file per style scope.
10
+ *
11
+ *= require_self
12
+ *= require_tree .
13
+ */
@@ -0,0 +1,14 @@
1
+ class DmCms::Admin::AdminController < DmCore::Admin::AdminController
2
+ before_filter :authorize_access
3
+
4
+ protected
5
+
6
+ #------------------------------------------------------------------------------
7
+ def authorize_access
8
+ unless can?(:manage_content, :all)
9
+ flash[:alert] = "Unauthorized Access!"
10
+ redirect_to current_account.index_path
11
+ end
12
+ end
13
+
14
+ end
@@ -0,0 +1,89 @@
1
+ class DmCms::Admin::CmsBlogsController < DmCms::Admin::AdminController
2
+ include DmCms::PermittedParams
3
+
4
+ before_filter :blog_lookup, :except => [:index, :new, :create]
5
+ #before_filter :set_title
6
+
7
+ #------------------------------------------------------------------------------
8
+ def index
9
+ @blogs = CmsBlog.all
10
+ end
11
+
12
+ #------------------------------------------------------------------------------
13
+ def new
14
+ @blog = CmsBlog.new
15
+ end
16
+
17
+ #------------------------------------------------------------------------------
18
+ def edit
19
+ end
20
+
21
+ #------------------------------------------------------------------------------
22
+ def create
23
+ @blog = CmsBlog.new(cms_blog_params)
24
+
25
+ if @blog.save
26
+ redirect_to admin_cms_blog_url(@blog), notice: 'Blog was successfully created.'
27
+ else
28
+ render action: :new
29
+ end
30
+ end
31
+
32
+ #------------------------------------------------------------------------------
33
+ def update
34
+ if @blog.update_attributes(cms_blog_params)
35
+ redirect_to admin_cms_blog_url(@blog), notice: 'Blog was successfully updated.'
36
+ else
37
+ render action: :edit
38
+ end
39
+ end
40
+
41
+ #------------------------------------------------------------------------------
42
+ def destroy
43
+ @blog.destroy
44
+ redirect_to admin_cms_blogs_url
45
+ end
46
+
47
+ #------------------------------------------------------------------------------
48
+ def sort
49
+ @blog.update_attribute(:row_order_position, params[:item][:row_order_position])
50
+
51
+ #--- this action will be called via ajax
52
+ render nothing: true
53
+ end
54
+
55
+ #------------------------------------------------------------------------------
56
+ def blog_users
57
+ respond_to do |format|
58
+ format.json { render json: BlogUserDatatable.new(view_context, @blog) }
59
+ end
60
+ end
61
+
62
+ # Add user(s) to blog
63
+ # => user_id: add a single user
64
+ #------------------------------------------------------------------------------
65
+ def blog_add_member
66
+ if !params[:user_id].blank?
67
+ user = User.find(params[:user_id])
68
+ @blog.add_member(user)
69
+ redirect_to admin_cms_blog_url(@blog), notice: "Blog access granted for #{user.full_name}"
70
+ else
71
+ redirect_to admin_cms_blog_url(@blog), alert: "Incorrect parameters supplied"
72
+ end
73
+ end
74
+
75
+ #------------------------------------------------------------------------------
76
+ def blog_delete_member
77
+ user = User.find(params[:user_id])
78
+ @blog.remove_member(user)
79
+ redirect_to admin_cms_blog_url(@blog), notice: "Blog access removed for #{user.full_name}"
80
+ end
81
+
82
+ private
83
+
84
+ #------------------------------------------------------------------------------
85
+ def blog_lookup
86
+ @blog = CmsBlog.friendly.find(params[:id])
87
+ end
88
+
89
+ end
@@ -0,0 +1,96 @@
1
+ class DmCms::Admin::CmsContentitemsController < DmCms::Admin::AdminController
2
+ include DmCms::PermittedParams
3
+ include DmCore::LiquidHelper
4
+
5
+ before_filter :current_page, :only => [:new_content, :create_content]
6
+ before_filter :current_content, :except => [:new_content, :create_content]
7
+ before_filter :set_title
8
+
9
+ #------------------------------------------------------------------------------
10
+ def new_content
11
+ @cms_contentitem = CmsContentitem.new
12
+ @cms_contentitem.container = 'body'
13
+ end
14
+
15
+ #------------------------------------------------------------------------------
16
+ def create_content
17
+ @cms_contentitem = @current_page.cms_contentitems.new(cms_contentitem_params)
18
+ if @cms_contentitem.save
19
+ redirect_to admin_cms_page_url(@current_page), notice: 'Content successfully created.'
20
+ else
21
+ render action: "new_content", notice: 'Content successfully created.'
22
+ end
23
+ end
24
+
25
+ #------------------------------------------------------------------------------
26
+ def edit
27
+ end
28
+
29
+ #------------------------------------------------------------------------------
30
+ def update
31
+ if @cms_contentitem.update_attributes(cms_contentitem_params)
32
+ redirect_to edit_admin_cms_contentitem_url(@cms_contentitem), notice: 'Content updated'
33
+ else
34
+ render :action => :edit, alert: 'An error of some kind occurred'
35
+ end
36
+ end
37
+
38
+ #------------------------------------------------------------------------------
39
+ def destroy
40
+ @cms_contentitem.destroy
41
+ redirect_to(:controller => 'dm_cms/admin/cms_pages', :action => :show, :id => @cms_contentitem.cms_page_id)
42
+ end
43
+
44
+ #------------------------------------------------------------------------------
45
+ def update_fragment
46
+ if @cms_contentitem.update_attributes(cms_contentitem_params)
47
+ #@cms_page.merge!(@item.cms_page.get_page_render_values)
48
+ #respond_to do |format|
49
+ # format.js { render :action => :update_fragment }
50
+ #end
51
+ end
52
+ end
53
+
54
+ #------------------------------------------------------------------------------
55
+ def move_up
56
+ @cms_contentitem.update_attributes(row_order_position: :up)
57
+ redirect_to(:controller => 'dm_cms/admin/cms_pages', :action => :show, :id => @cms_contentitem.cms_page_id)
58
+ end
59
+
60
+ #------------------------------------------------------------------------------
61
+ def move_down
62
+ @cms_contentitem.update_attributes(row_order_position: :down)
63
+ redirect_to(:controller => 'dm_cms/admin/cms_pages', :action => :show, :id => @cms_contentitem.cms_page_id)
64
+ end
65
+
66
+ #------------------------------------------------------------------------------
67
+ def markdown
68
+ @text = ''
69
+ if put_or_post?
70
+ @text = params[:sample_text][:markdown]
71
+ end
72
+ end
73
+
74
+ protected
75
+
76
+ #------------------------------------------------------------------------------
77
+ def current_page
78
+ @current_page = CmsPage.friendly.find(params[:id])
79
+ end
80
+
81
+ #------------------------------------------------------------------------------
82
+ def current_content
83
+ @cms_contentitem = CmsContentitem.find(params[:id]) unless params[:id].to_i == 0
84
+ @current_page = @cms_contentitem.cms_page
85
+ end
86
+
87
+ private
88
+
89
+ # Set some values for the template based on the controller
90
+ #------------------------------------------------------------------------------
91
+ def set_title
92
+ text = @current_page.nil? ? 'Pages' : present(@current_page).admin_edit_title
93
+ content_for :content_title, text
94
+ end
95
+
96
+ end
@@ -0,0 +1,100 @@
1
+ class DmCms::Admin::CmsPagesController < DmCms::Admin::AdminController
2
+ include DmCms::PermittedParams
3
+ helper "dm_cms/cms_pages"
4
+
5
+ before_filter :current_page, :except => [:index, :file_tree, :expire_cache_total]
6
+
7
+ #------------------------------------------------------------------------------
8
+ def index
9
+ CmsPage.create_default_site if CmsPage.roots.empty?
10
+ # @tree = CmsPage.arrange(order: :position)
11
+ @tree = CmsPage.arrange(order: :row_order)
12
+ end
13
+
14
+ #------------------------------------------------------------------------------
15
+ def new_page
16
+ @cms_page = CmsPage.new
17
+ end
18
+
19
+ #------------------------------------------------------------------------------
20
+ def create_page
21
+ @cms_page = @current_page.children.new(cms_page_params)
22
+ respond_to do |format|
23
+ if @cms_page.save
24
+ format.html { redirect_to admin_cms_page_url(@cms_page), notice: 'Page was successfully created.' }
25
+ format.json { render json: @cms_page, status: :created, location: @cms_page }
26
+ else
27
+ format.html { render action: "new_page" }
28
+ format.json { render json: @cms_page.errors, status: :unprocessable_entity }
29
+ end
30
+ end
31
+ end
32
+
33
+ #------------------------------------------------------------------------------
34
+ def edit
35
+ @cms_page = @current_page
36
+ end
37
+
38
+ #------------------------------------------------------------------------------
39
+ def update
40
+ if @current_page.update_attributes(cms_page_params)
41
+ redirect_to :action => :show, :id => @current_page
42
+ else
43
+ @cms_page = @current_page
44
+ render :action => :edit
45
+ end
46
+ end
47
+
48
+ #------------------------------------------------------------------------------
49
+ def show
50
+ end
51
+
52
+ #------------------------------------------------------------------------------
53
+ def duplicate_page
54
+ new_page = @current_page.duplicate_with_associations
55
+ if new_page.nil?
56
+ redirect_to admin_cms_page_url(@current_page), :flash => { :error => 'A duplicate page already exists' }
57
+ else
58
+ redirect_to edit_admin_cms_page_url(new_page), :flash => { :notice => 'Duplicate page created. Please customize it.' }
59
+ end
60
+ end
61
+
62
+ # Given a new parent_id and position, place item in proper place
63
+ # Note that position comes in as 0-based, increment to make 1-based
64
+ #------------------------------------------------------------------------------
65
+ def ajax_sort
66
+ @current_page.update_attributes(row_order_position: params[:item][:position], parent_id: params[:item][:parent_id])
67
+
68
+ #--- this action will be called via ajax
69
+ render nothing: true
70
+ end
71
+
72
+ #------------------------------------------------------------------------------
73
+ def destroy
74
+ @current_page.destroy
75
+ redirect_to :action => :index
76
+ end
77
+
78
+ # Removes all cache files. This can be used when we're not sure if the
79
+ # cache file for a changed page has been deleted or not
80
+ #------------------------------------------------------------------------------
81
+ def expire_cache_total
82
+ #--- expire only items for this account
83
+ key_start = fragment_cache_key(Account.current.id)
84
+ expire_fragment(%r{\A#{key_start}})
85
+ # expire_fragment(%r{\S}) #--- this would expire *all* cache files
86
+
87
+ respond_to do |format|
88
+ format.html { redirect_to({:action => :index}, :notice => 'Page Cache was cleared') }
89
+ format.js { render :nothing => true }
90
+ end
91
+ end
92
+
93
+ protected
94
+
95
+ #------------------------------------------------------------------------------
96
+ def current_page
97
+ @current_page = CmsPage.friendly.find(params[:id])
98
+ end
99
+
100
+ end