virgo 0.1

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 (309) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +37 -0
  4. data/app/assets/javascripts/tinymce/manifest.coffee +1 -0
  5. data/app/assets/javascripts/tinymce/plugins/image_manager/plugin.coffee +234 -0
  6. data/app/assets/javascripts/virgo/admin/page_modules/edit_form.coffee +4 -0
  7. data/app/assets/javascripts/virgo/admin/page_modules/edit_subject_form.coffee +29 -0
  8. data/app/assets/javascripts/virgo/admin/posts/edit_locking.coffee +35 -0
  9. data/app/assets/javascripts/virgo/admin/posts/form.coffee +183 -0
  10. data/app/assets/javascripts/virgo/admin/slides/form.coffee +27 -0
  11. data/app/assets/javascripts/virgo/admin/slideshows/form.coffee +26 -0
  12. data/app/assets/javascripts/virgo/admin_only.coffee +1 -0
  13. data/app/assets/javascripts/virgo/application.coffee +51 -0
  14. data/app/assets/javascripts/virgo/common.coffee +83 -0
  15. data/app/assets/javascripts/virgo/common/character_counter.coffee +27 -0
  16. data/app/assets/javascripts/virgo/components/header.coffee +47 -0
  17. data/app/assets/javascripts/virgo/components/media_modal.coffee +151 -0
  18. data/app/assets/javascripts/virgo/components/share_bar.coffee +53 -0
  19. data/app/assets/javascripts/virgo/components/slideshow.coffee +35 -0
  20. data/app/assets/javascripts/virgo/lib/jquery-ui-multiselect.js +342 -0
  21. data/app/assets/javascripts/virgo/lib/jquery.browser.js +184 -0
  22. data/app/assets/javascripts/virgo/lib/jquery.cookie.js +114 -0
  23. data/app/assets/javascripts/virgo/lib/jquery.pjax.js +932 -0
  24. data/app/assets/javascripts/virgo/lib/jquery_ext.coffee +0 -0
  25. data/app/assets/javascripts/virgo/lib/manifest.coffee +5 -0
  26. data/app/assets/javascripts/virgo/lib/ouibounce.js +194 -0
  27. data/app/assets/javascripts/virgo/page_modules.coffee +175 -0
  28. data/app/assets/javascripts/virgo/posts/show.coffee +32 -0
  29. data/app/assets/stylesheets/tinymce/skin.sass +2 -0
  30. data/app/assets/stylesheets/tinymce/skins/railspress/content.min.sass +82 -0
  31. data/app/assets/stylesheets/tinymce/skins/railspress/fonts/tinymce-small.eot +0 -0
  32. data/app/assets/stylesheets/tinymce/skins/railspress/fonts/tinymce-small.svg +62 -0
  33. data/app/assets/stylesheets/tinymce/skins/railspress/fonts/tinymce-small.ttf +0 -0
  34. data/app/assets/stylesheets/tinymce/skins/railspress/fonts/tinymce-small.woff +0 -0
  35. data/app/assets/stylesheets/tinymce/skins/railspress/fonts/tinymce.eot +0 -0
  36. data/app/assets/stylesheets/tinymce/skins/railspress/fonts/tinymce.svg +63 -0
  37. data/app/assets/stylesheets/tinymce/skins/railspress/fonts/tinymce.ttf +0 -0
  38. data/app/assets/stylesheets/tinymce/skins/railspress/fonts/tinymce.woff +0 -0
  39. data/app/assets/stylesheets/tinymce/skins/railspress/img/anchor.gif +0 -0
  40. data/app/assets/stylesheets/tinymce/skins/railspress/img/loader.gif +0 -0
  41. data/app/assets/stylesheets/tinymce/skins/railspress/img/object.gif +0 -0
  42. data/app/assets/stylesheets/tinymce/skins/railspress/img/trans.gif +0 -0
  43. data/app/assets/stylesheets/tinymce/skins/railspress/skin.min.sass +1703 -0
  44. data/app/assets/stylesheets/virgo/_common.sass +65 -0
  45. data/app/assets/stylesheets/virgo/admin.sass +301 -0
  46. data/app/assets/stylesheets/virgo/admin/columns.sass +3 -0
  47. data/app/assets/stylesheets/virgo/admin/images.sass +14 -0
  48. data/app/assets/stylesheets/virgo/admin/media_modal.sass +72 -0
  49. data/app/assets/stylesheets/virgo/admin/post.sass +102 -0
  50. data/app/assets/stylesheets/virgo/admin/slideshow.sass +35 -0
  51. data/app/assets/stylesheets/virgo/admin/users.sass +2 -0
  52. data/app/assets/stylesheets/virgo/admin_only.sass +1 -0
  53. data/app/assets/stylesheets/virgo/application.sass +605 -0
  54. data/app/assets/stylesheets/virgo/columns.sass +51 -0
  55. data/app/assets/stylesheets/virgo/install.sass +15 -0
  56. data/app/assets/stylesheets/virgo/lib/bootstrap/bootstrap-imports.sass +9 -0
  57. data/app/assets/stylesheets/virgo/lib/bootstrap/bootstrap-overrides.sass +51 -0
  58. data/app/assets/stylesheets/virgo/lib/bootstrap/bootstrap-variables.sass +27 -0
  59. data/app/assets/stylesheets/virgo/lib/jquery-ui-multiselect.css +30 -0
  60. data/app/assets/stylesheets/virgo/lib/manifest.sass +3 -0
  61. data/app/assets/stylesheets/virgo/lib/ouibounce.css +222 -0
  62. data/app/assets/stylesheets/virgo/lib/select2-imports.sass +8 -0
  63. data/app/assets/stylesheets/virgo/page_modules.sass +54 -0
  64. data/app/assets/stylesheets/virgo/pages/authors.sass +30 -0
  65. data/app/assets/stylesheets/virgo/posts.sass +782 -0
  66. data/app/assets/stylesheets/virgo/search.sass +36 -0
  67. data/app/assets/stylesheets/virgo/ui.sass +434 -0
  68. data/app/assets/stylesheets/virgo/users.sass +9 -0
  69. data/app/controllers/virgo/admin/base_controller.rb +22 -0
  70. data/app/controllers/virgo/admin/categories_controller.rb +90 -0
  71. data/app/controllers/virgo/admin/columns_controller.rb +65 -0
  72. data/app/controllers/virgo/admin/images_controller.rb +89 -0
  73. data/app/controllers/virgo/admin/media_modal_controller.rb +101 -0
  74. data/app/controllers/virgo/admin/newsletters_controller.rb +37 -0
  75. data/app/controllers/virgo/admin/page_modules_controller.rb +62 -0
  76. data/app/controllers/virgo/admin/pages_controller.rb +6 -0
  77. data/app/controllers/virgo/admin/posts_controller.rb +173 -0
  78. data/app/controllers/virgo/admin/sites_controller.rb +31 -0
  79. data/app/controllers/virgo/admin/slides_controller.rb +71 -0
  80. data/app/controllers/virgo/admin/slideshows_controller.rb +66 -0
  81. data/app/controllers/virgo/admin/tags_controller.rb +98 -0
  82. data/app/controllers/virgo/admin/users/sessions_controller.rb +21 -0
  83. data/app/controllers/virgo/admin/users_controller.rb +84 -0
  84. data/app/controllers/virgo/application_controller.rb +151 -0
  85. data/app/controllers/virgo/categories_controller.rb +20 -0
  86. data/app/controllers/virgo/columns_controller.rb +24 -0
  87. data/app/controllers/virgo/images_controller.rb +9 -0
  88. data/app/controllers/virgo/install_controller.rb +46 -0
  89. data/app/controllers/virgo/page_modules_controller.rb +23 -0
  90. data/app/controllers/virgo/pages_controller.rb +29 -0
  91. data/app/controllers/virgo/posts_controller.rb +101 -0
  92. data/app/controllers/virgo/search_controller.rb +35 -0
  93. data/app/controllers/virgo/subscribers_controller.rb +54 -0
  94. data/app/controllers/virgo/tags_controller.rb +15 -0
  95. data/app/controllers/virgo/users/confirmations_controller.rb +18 -0
  96. data/app/controllers/virgo/users/passwords_controller.rb +31 -0
  97. data/app/controllers/virgo/users/registrations_controller.rb +41 -0
  98. data/app/controllers/virgo/users/sessions_controller.rb +32 -0
  99. data/app/controllers/virgo/users_controller.rb +15 -0
  100. data/app/helpers/virgo/admin/post_helper.rb +54 -0
  101. data/app/helpers/virgo/admin_helper.rb +15 -0
  102. data/app/helpers/virgo/application_helper.rb +124 -0
  103. data/app/helpers/virgo/hooks_helper.rb +30 -0
  104. data/app/helpers/virgo/page_modules_helper.rb +4 -0
  105. data/app/helpers/virgo/post_helper.rb +159 -0
  106. data/app/helpers/virgo/render_helper.rb +33 -0
  107. data/app/helpers/virgo/search_helper.rb +49 -0
  108. data/app/helpers/virgo/shortcode_helper.rb +7 -0
  109. data/app/helpers/virgo/text_helper.rb +12 -0
  110. data/app/helpers/virgo/video_helper.rb +34 -0
  111. data/app/models/concerns/virgo/common/slug_history.rb +36 -0
  112. data/app/models/concerns/virgo/common/uuid.rb +22 -0
  113. data/app/models/concerns/virgo/post/recommendations.rb +15 -0
  114. data/app/models/concerns/virgo/post/search.rb +100 -0
  115. data/app/models/concerns/virgo/user/search.rb +39 -0
  116. data/app/models/virgo/ability.rb +59 -0
  117. data/app/models/virgo/category.rb +44 -0
  118. data/app/models/virgo/column.rb +25 -0
  119. data/app/models/virgo/form_model.rb +19 -0
  120. data/app/models/virgo/image.rb +63 -0
  121. data/app/models/virgo/page_module.rb +42 -0
  122. data/app/models/virgo/page_module_post.rb +8 -0
  123. data/app/models/virgo/post.rb +391 -0
  124. data/app/models/virgo/post_category.rb +8 -0
  125. data/app/models/virgo/post_search.rb +7 -0
  126. data/app/models/virgo/post_tag.rb +10 -0
  127. data/app/models/virgo/site.rb +36 -0
  128. data/app/models/virgo/slide.rb +23 -0
  129. data/app/models/virgo/slideshow.rb +37 -0
  130. data/app/models/virgo/slug_history.rb +5 -0
  131. data/app/models/virgo/subscriber.rb +5 -0
  132. data/app/models/virgo/tag.rb +34 -0
  133. data/app/models/virgo/user.rb +145 -0
  134. data/app/uploaders/virgo/application_uploader.rb +11 -0
  135. data/app/uploaders/virgo/avatar_uploader.rb +21 -0
  136. data/app/uploaders/virgo/featured_image_uploader.rb +28 -0
  137. data/app/uploaders/virgo/image_uploader.rb +40 -0
  138. data/app/uploaders/virgo/slide_uploader.rb +19 -0
  139. data/app/views/layouts/virgo/admin.haml +16 -0
  140. data/app/views/layouts/virgo/admin/site_settings.haml +14 -0
  141. data/app/views/layouts/virgo/application.haml +63 -0
  142. data/app/views/layouts/virgo/errors.haml +42 -0
  143. data/app/views/layouts/virgo/main.haml +5 -0
  144. data/app/views/layouts/virgo/posts.haml +10 -0
  145. data/app/views/virgo/admin/categories/_form.haml +19 -0
  146. data/app/views/virgo/admin/categories/edit.haml +7 -0
  147. data/app/views/virgo/admin/categories/index.haml +38 -0
  148. data/app/views/virgo/admin/categories/modal_form.haml +11 -0
  149. data/app/views/virgo/admin/categories/new.haml +7 -0
  150. data/app/views/virgo/admin/categories/success_modal.haml +14 -0
  151. data/app/views/virgo/admin/columns/_form.haml +30 -0
  152. data/app/views/virgo/admin/columns/edit.haml +1 -0
  153. data/app/views/virgo/admin/columns/index.haml +30 -0
  154. data/app/views/virgo/admin/columns/new.haml +1 -0
  155. data/app/views/virgo/admin/images/_form.haml +46 -0
  156. data/app/views/virgo/admin/images/edit.haml +1 -0
  157. data/app/views/virgo/admin/images/index.haml +32 -0
  158. data/app/views/virgo/admin/images/new.haml +1 -0
  159. data/app/views/virgo/admin/media_modal/_image_settings.haml +17 -0
  160. data/app/views/virgo/admin/media_modal/_library_panel.haml +26 -0
  161. data/app/views/virgo/admin/media_modal/_upload_panel.haml +21 -0
  162. data/app/views/virgo/admin/media_modal/_upload_success.haml +7 -0
  163. data/app/views/virgo/admin/media_modal/index.haml +19 -0
  164. data/app/views/virgo/admin/newsletters/changelog.haml +25 -0
  165. data/app/views/virgo/admin/newsletters/edit.haml +6 -0
  166. data/app/views/virgo/admin/page_modules/edit.haml +33 -0
  167. data/app/views/virgo/admin/page_modules/edit_subject.haml +43 -0
  168. data/app/views/virgo/admin/pages/help.haml +114 -0
  169. data/app/views/virgo/admin/posts/_author_dropdown.haml +1 -0
  170. data/app/views/virgo/admin/posts/_categories_form.haml +7 -0
  171. data/app/views/virgo/admin/posts/_category.haml +22 -0
  172. data/app/views/virgo/admin/posts/_form.haml +201 -0
  173. data/app/views/virgo/admin/posts/_revisions.haml +40 -0
  174. data/app/views/virgo/admin/posts/edit.haml +9 -0
  175. data/app/views/virgo/admin/posts/index.haml +59 -0
  176. data/app/views/virgo/admin/posts/new.haml +1 -0
  177. data/app/views/virgo/admin/posts/revision_detail.haml +28 -0
  178. data/app/views/virgo/admin/posts/revisions.haml +3 -0
  179. data/app/views/virgo/admin/sites/edit.haml +12 -0
  180. data/app/views/virgo/admin/slides/_form.haml +41 -0
  181. data/app/views/virgo/admin/slides/edit.haml +1 -0
  182. data/app/views/virgo/admin/slides/new.haml +1 -0
  183. data/app/views/virgo/admin/slideshows/_form.haml +49 -0
  184. data/app/views/virgo/admin/slideshows/edit.haml +1 -0
  185. data/app/views/virgo/admin/slideshows/index.haml +43 -0
  186. data/app/views/virgo/admin/slideshows/new.haml +1 -0
  187. data/app/views/virgo/admin/tags/_form.haml +16 -0
  188. data/app/views/virgo/admin/tags/edit.haml +7 -0
  189. data/app/views/virgo/admin/tags/index.haml +33 -0
  190. data/app/views/virgo/admin/tags/modal_form.haml +12 -0
  191. data/app/views/virgo/admin/tags/new.haml +7 -0
  192. data/app/views/virgo/admin/tags/success_modal.haml +14 -0
  193. data/app/views/virgo/admin/users/_form.haml +62 -0
  194. data/app/views/virgo/admin/users/edit.haml +1 -0
  195. data/app/views/virgo/admin/users/index.haml +34 -0
  196. data/app/views/virgo/admin/users/new.haml +1 -0
  197. data/app/views/virgo/application/sitemap.xml.builder +0 -0
  198. data/app/views/virgo/authors/_profile_long.haml +13 -0
  199. data/app/views/virgo/authors/_profile_short.haml +10 -0
  200. data/app/views/virgo/categories/show.haml +24 -0
  201. data/app/views/virgo/columns/index.haml +19 -0
  202. data/app/views/virgo/columns/show.haml +18 -0
  203. data/app/views/virgo/common/_admin_navbar.haml +100 -0
  204. data/app/views/virgo/common/_alerts.haml +40 -0
  205. data/app/views/virgo/common/_analytics.html.erb +1 -0
  206. data/app/views/virgo/common/_base_errors.haml +8 -0
  207. data/app/views/virgo/common/_category_heading.haml +26 -0
  208. data/app/views/virgo/common/_disqus.html.erb +24 -0
  209. data/app/views/virgo/common/_disqus_comment_count.html.erb +12 -0
  210. data/app/views/virgo/common/_fb_api.html.erb +30 -0
  211. data/app/views/virgo/common/_fonts.html.erb +1 -0
  212. data/app/views/virgo/common/_footer.haml +13 -0
  213. data/app/views/virgo/common/_footer_javascript.html.erb +0 -0
  214. data/app/views/virgo/common/_header_analytics.html.erb +9 -0
  215. data/app/views/virgo/common/_list_signup.haml +20 -0
  216. data/app/views/virgo/common/_ouibounce_modal.haml +26 -0
  217. data/app/views/virgo/common/_public_nav.haml +58 -0
  218. data/app/views/virgo/common/_search_form.haml +8 -0
  219. data/app/views/virgo/common/_share_bar.haml +45 -0
  220. data/app/views/virgo/common/_user_vars.haml +2 -0
  221. data/app/views/virgo/errors/404.haml +10 -0
  222. data/app/views/virgo/errors/500.haml +10 -0
  223. data/app/views/virgo/images/_shortcode.haml +4 -0
  224. data/app/views/virgo/install/index.haml +58 -0
  225. data/app/views/virgo/install/success.haml +12 -0
  226. data/app/views/virgo/page_modules/_latest_posts.haml +29 -0
  227. data/app/views/virgo/page_modules/_popular_posts.haml +51 -0
  228. data/app/views/virgo/pages/authors.haml +8 -0
  229. data/app/views/virgo/pages/home.haml +0 -0
  230. data/app/views/virgo/pages/show.haml +6 -0
  231. data/app/views/virgo/posts/_author_info.haml +16 -0
  232. data/app/views/virgo/posts/_post_full.haml +63 -0
  233. data/app/views/virgo/posts/_post_short.haml +30 -0
  234. data/app/views/virgo/posts/_post_thumb_box.haml +13 -0
  235. data/app/views/virgo/posts/_recommendations.haml +12 -0
  236. data/app/views/virgo/posts/_sidebar_thumb.haml +4 -0
  237. data/app/views/virgo/posts/index.haml +22 -0
  238. data/app/views/virgo/posts/latest.haml +16 -0
  239. data/app/views/virgo/posts/more.haml +10 -0
  240. data/app/views/virgo/posts/rss.xml.builder +17 -0
  241. data/app/views/virgo/posts/show.haml +17 -0
  242. data/app/views/virgo/search/_form.haml +5 -0
  243. data/app/views/virgo/search/_item.haml +22 -0
  244. data/app/views/virgo/search/index.haml +11 -0
  245. data/app/views/virgo/search/new.haml +4 -0
  246. data/app/views/virgo/shortcode_templates/blockquote.haml +9 -0
  247. data/app/views/virgo/shortcode_templates/h1.haml +1 -0
  248. data/app/views/virgo/shortcode_templates/h2.haml +1 -0
  249. data/app/views/virgo/shortcode_templates/h3.haml +1 -0
  250. data/app/views/virgo/shortcode_templates/h4.haml +1 -0
  251. data/app/views/virgo/shortcode_templates/image.haml +17 -0
  252. data/app/views/virgo/shortcode_templates/pullquote.haml +3 -0
  253. data/app/views/virgo/shortcode_templates/slideshow.haml +35 -0
  254. data/app/views/virgo/shortcode_templates/tweet.haml +3 -0
  255. data/app/views/virgo/shortcode_templates/video.haml +8 -0
  256. data/app/views/virgo/subscribers/_success_modal.haml +13 -0
  257. data/app/views/virgo/subscribers/modal.haml +15 -0
  258. data/app/views/virgo/tags/show.haml +16 -0
  259. data/app/views/virgo/users/confirmations/new.html.haml +10 -0
  260. data/app/views/virgo/users/devise_mailer/confirmation_instructions.html.erb +7 -0
  261. data/app/views/virgo/users/devise_mailer/reset_password_instructions.html.haml +6 -0
  262. data/app/views/virgo/users/devise_mailer/unlock_instructions.html.haml +5 -0
  263. data/app/views/virgo/users/passwords/edit.html.haml +14 -0
  264. data/app/views/virgo/users/passwords/new.html.haml +14 -0
  265. data/app/views/virgo/users/registrations/edit.html.haml +30 -0
  266. data/app/views/virgo/users/registrations/new.html.haml +13 -0
  267. data/app/views/virgo/users/sessions/new.html.haml +12 -0
  268. data/app/views/virgo/users/shared/_links.haml +26 -0
  269. data/app/views/virgo/users/show.haml +11 -0
  270. data/app/views/virgo/users/unlocks/new.html.haml +9 -0
  271. data/config/initializers/action_mailer.rb +7 -0
  272. data/config/initializers/active_record.rb +72 -0
  273. data/config/initializers/active_record_symbolize.rb +18 -0
  274. data/config/initializers/assets.rb +17 -0
  275. data/config/initializers/backtrace_silencers.rb +7 -0
  276. data/config/initializers/carrierwave.rb +36 -0
  277. data/config/initializers/cookies_serializer.rb +3 -0
  278. data/config/initializers/devise.rb +257 -0
  279. data/config/initializers/filter_parameter_logging.rb +4 -0
  280. data/config/initializers/hash.rb +5 -0
  281. data/config/initializers/inflections.rb +16 -0
  282. data/config/initializers/mime_types.rb +4 -0
  283. data/config/initializers/nil_class.rb +13 -0
  284. data/config/initializers/non_digest_assets.rb +3 -0
  285. data/config/initializers/paper_trail.rb +30 -0
  286. data/config/initializers/schema_plus.rb +5 -0
  287. data/config/initializers/session_store.rb +3 -0
  288. data/config/initializers/shortcode.rb +12 -0
  289. data/config/initializers/simple_form.rb +170 -0
  290. data/config/initializers/simple_form_bootstrap.rb +136 -0
  291. data/config/initializers/string.rb +5 -0
  292. data/config/initializers/time_formatting.rb +23 -0
  293. data/config/initializers/wrap_parameters.rb +14 -0
  294. data/config/locales/devise.en.yml +60 -0
  295. data/config/routes.rb +96 -0
  296. data/config/schedule.rb +3 -0
  297. data/db/migrate/20150729174510_create_virgo_schema.rb +225 -0
  298. data/lib/generators/virgo/install/install_generator.rb +16 -0
  299. data/lib/generators/virgo/views/views_generator.rb +22 -0
  300. data/lib/tasks/virgo_tasks.rake +7 -0
  301. data/lib/virgo.rb +4 -0
  302. data/lib/virgo/development_mail_interceptor.rb +6 -0
  303. data/lib/virgo/email_validator.rb +6 -0
  304. data/lib/virgo/engine.rb +73 -0
  305. data/lib/virgo/reduce_validator.rb +6 -0
  306. data/lib/virgo/upload_helpers.rb +89 -0
  307. data/lib/virgo/version.rb +3 -0
  308. data/lib/virgo/view_help.rb +3 -0
  309. metadata +1051 -0
@@ -0,0 +1,6 @@
1
+ module Virgo
2
+ class Admin::PagesController < Admin::BaseController
3
+ def help
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,173 @@
1
+ module Virgo
2
+ class Admin::PostsController < Admin::BaseController
3
+ before_action :set_post, only: member_actions(:revisions, :editing, :publish_immediately, :delete_featured_image)
4
+
5
+ handles_sortable_columns
6
+
7
+ helper_method :filter_params, :model_name, :post_params
8
+
9
+ def index
10
+ if sort_param.blank?
11
+ flash.keep
12
+ redirect_to admin_posts_path(filters: filter_params, sort: '-publish_at') and return
13
+ end
14
+
15
+ @posts = Post.with_relations
16
+ .search(filter_params)
17
+ .order(sort_order)
18
+ .page(page_param)
19
+ end
20
+
21
+ # auto-complete endpoint
22
+ def find
23
+ @posts = Post.search_by_similarity(term_param)
24
+
25
+ render json: {
26
+ posts: @posts
27
+ }
28
+ end
29
+
30
+ def new
31
+ @post = Post.new(post_params.merge(author: current_user))
32
+ end
33
+
34
+ def revision_detail
35
+ @version = PaperTrail::Version.find(version_id_param)
36
+ @post = @version.item
37
+ end
38
+
39
+ def revisions
40
+ end
41
+
42
+ def create
43
+ @post = Post.new(post_params.merge(created_by: current_user))
44
+
45
+ authorize! :manage, @post
46
+
47
+ if @post.save
48
+ flash[:notice] = "#{model_name} successfully created. You can edit it below."
49
+ redirect_to edit_admin_post_path(@post)
50
+ else
51
+ render 'new'
52
+ end
53
+ end
54
+
55
+ def show
56
+ end
57
+
58
+ def edit
59
+ @post.attempt_edit_lock(current_user)
60
+ end
61
+
62
+ def author_dropdown
63
+ @post = Post.find_by(id: post_id_param)
64
+
65
+ render json: {
66
+ html: render_content(partial: "author_dropdown")
67
+ }
68
+ end
69
+
70
+ def update
71
+ @post.attributes = post_params
72
+
73
+ authorize! :manage, @post
74
+
75
+ if Rails.application.config.post_locking_enabled
76
+ if @post.is_mid_edit? && @post.editing_user && @post.editing_user != current_user
77
+ flash.now[:warning] = "Could not save changes because post is currently being edited by #{@post.editing_user.pretty_name}"
78
+ render and return
79
+ end
80
+ end
81
+
82
+ if @post.save
83
+ flash[:notice] = "Post saved"
84
+ redirect_to edit_admin_post_path(@post)
85
+ else
86
+ render 'new'
87
+ end
88
+ end
89
+
90
+ def destroy
91
+ authorize! :destroy, @post
92
+
93
+ @post.destroy
94
+
95
+ flash[:notice] = "Post successfully deleted"
96
+
97
+ redirect_to admin_posts_path
98
+ end
99
+
100
+ def editing
101
+ if request.post?
102
+ result = @post.attempt_edit_lock(current_user)
103
+
104
+ render json: {
105
+ edit_lock_succeeded: result,
106
+ post_is_mid_edit: @post.is_mid_edit?,
107
+ editor_is_self: (@post.editing_user == current_user),
108
+ editor_byline: @post.editing_user.pretty_name
109
+ }
110
+ end
111
+ end
112
+
113
+ def delete_featured_image
114
+ @post.update!(featured_image_id: nil)
115
+
116
+ head :ok
117
+ end
118
+
119
+ def delete_thumbnail_image
120
+ @post.update!(thumbnail_image_id: nil)
121
+
122
+ head :ok
123
+ end
124
+
125
+ # Use with care (and perhaps only expose to admins):
126
+ # In certain circumstances, such as when chasing breaking
127
+ # news, we need to make immediate changes.
128
+ def publish_immediately
129
+ @post.update!(publish_at: Time.now, live: true)
130
+
131
+ Rails.cache.clear
132
+ end
133
+
134
+ private
135
+
136
+ def set_post
137
+ @post = Post.friendly.find(id_param)
138
+ end
139
+
140
+ def post_params
141
+ _post_params = params.permit(post: [:headline, :subhead, :excerpt, :author_id, :status, :slug, :post_type,
142
+ :publish_at, :body, :citation_name, :citation_url, :remove_featured_image, :column_id,
143
+ :title_tag_text, :meta_description_tag_value, :featured_image_id, :thumbnail_image_id,
144
+ :feature_on_front_page, :feature_on_category_page, :comments_enabled,
145
+ :show_feature_image_on_post_page, :show_excerpt, :include_in_weekly_email,
146
+ tag_ids: [], category_ids: [], ordered_tag_ids: []])[:post]
147
+
148
+ _post_params[:publish_at] = Chronic.parse(_post_params[:publish_at]) if _post_params[:publish_at].present?
149
+
150
+ _post_params
151
+ end
152
+
153
+ def post_id_param
154
+ params.permit(:post_id)[:post_id]
155
+ end
156
+
157
+ def filter_params
158
+ params.permit(filters: [:term, :post_type, :category, :month, :status, category_ids: [], tag_ids: [], user_ids: []])[:filters]
159
+ end
160
+
161
+ def version_id_param
162
+ params.permit(:version_id)[:version_id]
163
+ end
164
+
165
+ def model_name
166
+ @post.post_type.capitalize
167
+ end
168
+
169
+ def term_param
170
+ params.permit(:term)[:term]
171
+ end
172
+ end
173
+ end
@@ -0,0 +1,31 @@
1
+ module Virgo
2
+ class Admin::SitesController < Admin::BaseController
3
+ before_action :set_site
4
+
5
+ layout 'virgo/admin/site_settings'
6
+
7
+ def edit
8
+ end
9
+
10
+ def update
11
+ if @site.update(site_params)
12
+ flash[:notice] = "Site settings saved"
13
+ redirect_to admin_site_edit_path
14
+ else
15
+ render :edit
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def set_site
22
+ @site = Site.instance
23
+
24
+ authorize! :manage, @site
25
+ end
26
+
27
+ def site_params
28
+ params.permit(site: [:name, :description, :tagline, :disqus_app_id, :twitter_handle, :instagram_account_name, :pinterest_account_name])[:site]
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,71 @@
1
+ module Virgo
2
+ class Admin::SlidesController < Admin::BaseController
3
+ before_action :set_slideshow, only: collection_actions
4
+ before_action :set_slide, only: member_actions
5
+
6
+ def new
7
+ @slide = @slideshow.slides.new
8
+ end
9
+
10
+ def create
11
+ @slide = Slide.new(slide_params)
12
+
13
+ if @slide.save
14
+ flash[:notice] = "Your new slide has been added"
15
+ redirect_to edit_admin_slideshow_path(@slide.slideshow)
16
+ else
17
+ render :new
18
+ end
19
+ end
20
+
21
+ def edit
22
+ end
23
+
24
+ def update
25
+ if @slide.update(slide_params)
26
+ flash[:notice] = "Slide settings updated"
27
+ redirect_to edit_admin_slideshow_path(@slide.slideshow)
28
+ else
29
+ render :edit
30
+ end
31
+ end
32
+
33
+ def positions
34
+ slide_data = params[:slides]
35
+
36
+ slide_data.values.each do |data|
37
+ slide = Slide.find(data[:id])
38
+ authorize! :manage, slide
39
+ slide.update!(position: data[:position])
40
+ end
41
+
42
+
43
+ head :ok
44
+ end
45
+
46
+ def destroy
47
+ authorize! :destroy, @slide
48
+ @slide.destroy
49
+ flash[:notice] = "Slide removed from slideshow"
50
+ redirect_to edit_admin_slideshow_path(@slide.slideshow)
51
+ end
52
+
53
+ private
54
+
55
+ def slide_params
56
+ params.permit(slide: [:image_id, :title, :text, :slideshow_id, :position, :video_embed])[:slide]
57
+ end
58
+
59
+ def set_slideshow
60
+ @slideshow = Slideshow.find(slideshow_id_param)
61
+ end
62
+
63
+ def set_slide
64
+ @slide = Slide.find(id_param)
65
+ end
66
+
67
+ def slideshow_id_param
68
+ params.permit(:slideshow_id)[:slideshow_id]
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,66 @@
1
+ module Virgo
2
+ class Admin::SlideshowsController < Admin::BaseController
3
+ handles_sortable_columns
4
+
5
+ before_action :set_slideshow, only: member_actions
6
+
7
+ helper_method :filter_params
8
+
9
+ def index
10
+ if sort_param.blank?
11
+ flash.keep
12
+ redirect_to admin_slideshows_path(sort: '-created_at') and return
13
+ end
14
+
15
+ @slideshows = Slideshow.joins(:author).search(filter_params).order(sort_order).page(page_param)
16
+ end
17
+
18
+ def new
19
+ @slideshow = Slideshow.new
20
+ end
21
+
22
+ def create
23
+ @slideshow = Slideshow.new(slideshow_params)
24
+
25
+ if @slideshow.save
26
+ flash[:notice] = "Slideshow successfully created. You can add slides below."
27
+ redirect_to edit_admin_slideshow_path(@slideshow)
28
+ else
29
+ render :new
30
+ end
31
+ end
32
+
33
+ def edit
34
+ end
35
+
36
+ def update
37
+ if @slideshow.update(slideshow_params)
38
+ flash[:notice] = "Slideshow settings saved"
39
+ redirect_to edit_admin_slideshow_path(@slideshow)
40
+ else
41
+ render :edit
42
+ end
43
+ end
44
+
45
+ def destroy
46
+ authorize! :destroy, @slideshow
47
+ @slideshow.destroy
48
+ flash[:notice] = "Slideshow deleted"
49
+ redirect_to admin_slideshows_path
50
+ end
51
+
52
+ private
53
+
54
+ def set_slideshow
55
+ @slideshow = Slideshow.find(id_param)
56
+ end
57
+
58
+ def slideshow_params
59
+ params.permit(slideshow: [:name, :author_id])[:slideshow]
60
+ end
61
+
62
+ def filter_params
63
+ params.permit(filters: [:term])[:filters]
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,98 @@
1
+ module Virgo
2
+ class Admin::TagsController < Admin::BaseController
3
+ before_action :set_tag, only: member_actions
4
+ helper_method :post_id_param
5
+
6
+ handles_sortable_columns
7
+
8
+ def index
9
+ if sort_param.blank? && filter_params.all_blank?
10
+ flash.keep
11
+ redirect_to admin_tags_path(sort: 'name') and return
12
+ end
13
+
14
+ @tags = Tag.search(filter_params).with_post_count.order(sort_order).page(page_param)
15
+ end
16
+
17
+ def new
18
+ @tag = Tag.new
19
+ end
20
+
21
+ def modal_form
22
+ @tag = Tag.new
23
+
24
+ render json: {status: :success, html: render_content('modal_form', layout: false)}
25
+ end
26
+
27
+ def create
28
+ @tag = Tag.new(tag_params.merge(created_by: current_user))
29
+
30
+ respond_to do |fmt|
31
+ if @tag.save
32
+ fmt.json {
33
+ @post = Post.find_by(id: post_id_param)
34
+ @post.tags << @tag unless (@post.nil? || @post.tags.include?(@tag))
35
+
36
+ flash.now[:success] = "Tag successfully added! If you would like to add more tags you can do so below. Otherwise, close this pop-up."
37
+
38
+ render json: {
39
+ status: :success,
40
+ tag: @tag,
41
+ html: render_content('modal_form', layout: false, locals: {tag: Tag.new})
42
+ }
43
+ }
44
+ fmt.html {
45
+ flash[:notice] = "Tag added successfully"
46
+ redirect_to admin_tags_path
47
+ }
48
+ else
49
+ fmt.json {
50
+ render json: {status: :err, html: render_content('modal_form', layout: false)}
51
+ }
52
+ fmt.html {
53
+ render 'new'
54
+ }
55
+ end
56
+ end
57
+
58
+ end
59
+
60
+ def edit
61
+ end
62
+
63
+ def update
64
+ if @tag.update(tag_params)
65
+ flash[:notice] = "Tag updated successfully"
66
+ redirect_to admin_tags_path
67
+ else
68
+ render 'edit'
69
+ end
70
+ end
71
+
72
+ def destroy
73
+ @tag.destroy
74
+
75
+ flash[:notice] = "Tag deleted"
76
+
77
+ redirect_to admin_tags_path
78
+ end
79
+
80
+ private
81
+
82
+ def set_tag
83
+ @tag = Tag.friendly.find(id_param)
84
+ end
85
+
86
+ def tag_params
87
+ params.permit(tag: [:name])[:tag]
88
+ end
89
+
90
+ def post_id_param
91
+ params.permit(:post_id)[:post_id]
92
+ end
93
+
94
+ def filter_params
95
+ params.permit(filters: [:term])[:filters]
96
+ end
97
+ end
98
+ end