cd2_catton_cms 1.1.10

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 (306) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +37 -0
  3. data/app/assets/config/c_manifest.js +2 -0
  4. data/app/assets/images/c/drag_handle.gif +0 -0
  5. data/app/assets/images/c/login_background.jpg +0 -0
  6. data/app/assets/images/c/main_application/hero.jpg +0 -0
  7. data/app/assets/images/c/main_application/search.png +0 -0
  8. data/app/assets/images/c/placeholder_product_image.png +0 -0
  9. data/app/assets/images/c/select_arrow_down_blk.png +0 -0
  10. data/app/assets/images/c/small_icon.png +0 -0
  11. data/app/assets/images/c/vendor/chosen-sprite.png +0 -0
  12. data/app/assets/javascripts/c/application.js +59 -0
  13. data/app/assets/javascripts/c/change_tag.js +49 -0
  14. data/app/assets/javascripts/c/chosen.js +2 -0
  15. data/app/assets/javascripts/c/confirm_delete.js +55 -0
  16. data/app/assets/javascripts/c/draggable_tree.js +223 -0
  17. data/app/assets/javascripts/c/dropzone_init.js +98 -0
  18. data/app/assets/javascripts/c/fake_table.js +87 -0
  19. data/app/assets/javascripts/c/master_form2/collection.js +180 -0
  20. data/app/assets/javascripts/c/master_form2/eu_cookie.js +1 -0
  21. data/app/assets/javascripts/c/master_form2/jrecord.js +116 -0
  22. data/app/assets/javascripts/c/master_form2/master_form.coffee +4 -0
  23. data/app/assets/javascripts/c/split_buttons.js.erb +15 -0
  24. data/app/assets/javascripts/c/things_to_be_done.js +138 -0
  25. data/app/assets/javascripts/c/unloadevent.js +35 -0
  26. data/app/assets/stylesheets/c/_core.sass +237 -0
  27. data/app/assets/stylesheets/c/_engine.sass +4 -0
  28. data/app/assets/stylesheets/c/_variables.sass +32 -0
  29. data/app/assets/stylesheets/c/_vendor.sass +6 -0
  30. data/app/assets/stylesheets/c/application/checkout/_cart.sass +85 -0
  31. data/app/assets/stylesheets/c/application/checkout/_checkout.sass +87 -0
  32. data/app/assets/stylesheets/c/application/elements/buttons.sass +34 -0
  33. data/app/assets/stylesheets/c/application/elements/forms.sass +135 -0
  34. data/app/assets/stylesheets/c/application/elements/shadows.sass +23 -0
  35. data/app/assets/stylesheets/c/application/partials/_breadcrumbs.sass +10 -0
  36. data/app/assets/stylesheets/c/application/partials/_categories_sidebars/_1.sass +53 -0
  37. data/app/assets/stylesheets/c/application/partials/_categories_sidebars/_2.sass +77 -0
  38. data/app/assets/stylesheets/c/application/partials/_footer.sass +43 -0
  39. data/app/assets/stylesheets/c/application/partials/_header.sass +317 -0
  40. data/app/assets/stylesheets/c/engine/_draggable_trees.sass +68 -0
  41. data/app/assets/stylesheets/c/engine/_form_pages.sass +153 -0
  42. data/app/assets/stylesheets/c/engine/_header_bar.sass +29 -0
  43. data/app/assets/stylesheets/c/engine/_index_header.sass +17 -0
  44. data/app/assets/stylesheets/c/engine/_layout.sass +15 -0
  45. data/app/assets/stylesheets/c/engine/_login.sass +38 -0
  46. data/app/assets/stylesheets/c/engine/_navbar.sass +19 -0
  47. data/app/assets/stylesheets/c/engine/_pagination.sass +16 -0
  48. data/app/assets/stylesheets/c/engine/_settings.sass +5 -0
  49. data/app/assets/stylesheets/c/engine/_sidebar.sass +20 -0
  50. data/app/assets/stylesheets/c/engine/_tables.sass +76 -0
  51. data/app/assets/stylesheets/c/engine/flash_messages.sass +2 -0
  52. data/app/assets/stylesheets/c/print_application.sass +167 -0
  53. data/app/assets/stylesheets/c/vendor/_flex_mixins.scss +394 -0
  54. data/app/assets/stylesheets/c/vendor/_normalize.sass +340 -0
  55. data/app/controllers/c/admin/blogs_controller.rb +57 -0
  56. data/app/controllers/c/admin/devise/passwords_controller.rb +5 -0
  57. data/app/controllers/c/admin/devise/sessions_controller.rb +5 -0
  58. data/app/controllers/c/admin/documents_controller.rb +50 -0
  59. data/app/controllers/c/admin/enquiries_controller.rb +22 -0
  60. data/app/controllers/c/admin/images_controller.rb +21 -0
  61. data/app/controllers/c/admin/locations_controller.rb +63 -0
  62. data/app/controllers/c/admin/menu_items_controller.rb +49 -0
  63. data/app/controllers/c/admin/pages_controller.rb +94 -0
  64. data/app/controllers/c/admin/projects_controller.rb +55 -0
  65. data/app/controllers/c/admin/redirects_controller.rb +55 -0
  66. data/app/controllers/c/admin/roles_controller.rb +49 -0
  67. data/app/controllers/c/admin/slides_controller.rb +50 -0
  68. data/app/controllers/c/admin/slideshows_controller.rb +34 -0
  69. data/app/controllers/c/admin/team_members_controller.rb +61 -0
  70. data/app/controllers/c/admin/testimonials_controller.rb +43 -0
  71. data/app/controllers/c/admin/users_controller.rb +51 -0
  72. data/app/controllers/c/admin_controller.rb +43 -0
  73. data/app/controllers/c/application_controller.rb +15 -0
  74. data/app/controllers/c/errors_controller.rb +12 -0
  75. data/app/controllers/c/front/devise/passwords_controller.rb +6 -0
  76. data/app/controllers/c/front/devise/registrations_controller.rb +32 -0
  77. data/app/controllers/c/front/devise/sessions_controller.rb +27 -0
  78. data/app/controllers/c/front/mailchimp_controller.rb +32 -0
  79. data/app/controllers/c/front_controller.rb +7 -0
  80. data/app/controllers/c/front_end/blogs_controller.rb +21 -0
  81. data/app/controllers/c/front_end/enquiries_controller.rb +32 -0
  82. data/app/controllers/c/front_end/pages_controller.rb +19 -0
  83. data/app/controllers/c/main_application_controller.rb +22 -0
  84. data/app/helpers/c/application_helper.rb +51 -0
  85. data/app/helpers/c/blogs_helper.rb +113 -0
  86. data/app/helpers/c/c_form_builder.rb +43 -0
  87. data/app/helpers/c/link_to_helper.rb +25 -0
  88. data/app/helpers/c/navigation_helper.rb +28 -0
  89. data/app/helpers/c/pages_helper.rb +27 -0
  90. data/app/helpers/c/storefront_helper.rb +63 -0
  91. data/app/mailers/c/application_mailer.rb +7 -0
  92. data/app/mailers/c/enquiries_mailer.rb +10 -0
  93. data/app/models/c/ability.rb +21 -0
  94. data/app/models/c/application_record.rb +6 -0
  95. data/app/models/c/author_record.rb +13 -0
  96. data/app/models/c/blog.rb +43 -0
  97. data/app/models/c/document.rb +17 -0
  98. data/app/models/c/enquiry.rb +95 -0
  99. data/app/models/c/image.rb +11 -0
  100. data/app/models/c/location.rb +18 -0
  101. data/app/models/c/menu_item.rb +35 -0
  102. data/app/models/c/non_delete.rb +10 -0
  103. data/app/models/c/page.rb +48 -0
  104. data/app/models/c/page_info.rb +16 -0
  105. data/app/models/c/permission.rb +9 -0
  106. data/app/models/c/permission_subject.rb +12 -0
  107. data/app/models/c/project.rb +20 -0
  108. data/app/models/c/redirect.rb +33 -0
  109. data/app/models/c/role.rb +18 -0
  110. data/app/models/c/slide.rb +16 -0
  111. data/app/models/c/slideshow.rb +23 -0
  112. data/app/models/c/team_member.rb +33 -0
  113. data/app/models/c/testimonial.rb +42 -0
  114. data/app/models/c/user.rb +42 -0
  115. data/app/models/c/user_role.rb +7 -0
  116. data/app/models/c/weight.rb +10 -0
  117. data/app/models/concerns/c/authorable.rb +18 -0
  118. data/app/models/concerns/c/documentable.rb +18 -0
  119. data/app/models/concerns/c/imageable.rb +49 -0
  120. data/app/models/concerns/c/non_deletable.rb +30 -0
  121. data/app/models/concerns/c/orderable.rb +30 -0
  122. data/app/models/concerns/c/previewable.rb +20 -0
  123. data/app/models/concerns/c/site_page.rb +89 -0
  124. data/app/uploaders/c/file_uploader.rb +9 -0
  125. data/app/uploaders/c/image_uploader.rb +39 -0
  126. data/app/views/c/admin/_background_jobs_dropdown.html.haml +18 -0
  127. data/app/views/c/admin/_bread_crumbs.html.haml +7 -0
  128. data/app/views/c/admin/_ebay_categories.html.haml +20 -0
  129. data/app/views/c/admin/_flash_messages.html.haml +5 -0
  130. data/app/views/c/admin/_header_bar.html.haml +18 -0
  131. data/app/views/c/admin/_index_table.html.haml +113 -0
  132. data/app/views/c/admin/_index_table_data.html.haml +17 -0
  133. data/app/views/c/admin/_navigation_bar.html.haml +1 -0
  134. data/app/views/c/admin/_preview_image.html.haml +2 -0
  135. data/app/views/c/admin/_preview_upload.html.haml +18 -0
  136. data/app/views/c/admin/_seo.html.haml +11 -0
  137. data/app/views/c/admin/_side_menu.html.haml +26 -0
  138. data/app/views/c/admin/_uploaded_images_new.html.haml +13 -0
  139. data/app/views/c/admin/blogs/_form.html.haml +58 -0
  140. data/app/views/c/admin/blogs/index.html.haml +9 -0
  141. data/app/views/c/admin/confirm_destroy.html.haml +6 -0
  142. data/app/views/c/admin/confirm_mass_destroy.html.haml +10 -0
  143. data/app/views/c/admin/documents/_form.html.haml +8 -0
  144. data/app/views/c/admin/documents/index.html.haml +9 -0
  145. data/app/views/c/admin/edit.html.haml +15 -0
  146. data/app/views/c/admin/enquiries/index.html.haml +14 -0
  147. data/app/views/c/admin/locations/_form.html.haml +58 -0
  148. data/app/views/c/admin/locations/index.html.haml +9 -0
  149. data/app/views/c/admin/menu_items/_form.html.haml +44 -0
  150. data/app/views/c/admin/menu_items/_menu_item_list_item.html.haml +10 -0
  151. data/app/views/c/admin/menu_items/index.html.haml +10 -0
  152. data/app/views/c/admin/new.html.haml +8 -0
  153. data/app/views/c/admin/pages/_form.html.haml +93 -0
  154. data/app/views/c/admin/pages/_page_list_item.html.haml +10 -0
  155. data/app/views/c/admin/pages/dashboard.html.erb +0 -0
  156. data/app/views/c/admin/pages/index.html.haml +11 -0
  157. data/app/views/c/admin/projects/_form.html.haml +46 -0
  158. data/app/views/c/admin/projects/index.html.haml +9 -0
  159. data/app/views/c/admin/quick_edit.js.erb +6 -0
  160. data/app/views/c/admin/redirects/_form.html.haml +14 -0
  161. data/app/views/c/admin/redirects/index.html.haml +9 -0
  162. data/app/views/c/admin/reload_images.js.erb +2 -0
  163. data/app/views/c/admin/roles/_form.html.haml +42 -0
  164. data/app/views/c/admin/roles/index.html.haml +17 -0
  165. data/app/views/c/admin/set_preview_image.js.erb +1 -0
  166. data/app/views/c/admin/show.html.haml +1 -0
  167. data/app/views/c/admin/slides/_form.html.haml +19 -0
  168. data/app/views/c/admin/slideshows/_form.html.haml +25 -0
  169. data/app/views/c/admin/slideshows/index.html.haml +8 -0
  170. data/app/views/c/admin/team_members/_form.html.haml +20 -0
  171. data/app/views/c/admin/team_members/index.html.haml +10 -0
  172. data/app/views/c/admin/testimonials/_form.html.haml +13 -0
  173. data/app/views/c/admin/testimonials/index.html.haml +8 -0
  174. data/app/views/c/admin/users/_form.html.haml +17 -0
  175. data/app/views/c/admin/users/index.html.haml +12 -0
  176. data/app/views/c/enquiries_mailer/new_enquiry.html.haml +14 -0
  177. data/app/views/c/enquiries_mailer/new_enquiry.text.haml +9 -0
  178. data/app/views/c/errors/404.html.haml +5 -0
  179. data/app/views/c/errors/500.html.haml +5 -0
  180. data/app/views/c/front/application/_category_item.html.haml +2 -0
  181. data/app/views/c/front/application/_menu_item.html.haml +4 -0
  182. data/app/views/c/front/application/_sales_highlight.html.haml +1 -0
  183. data/app/views/c/front/application/_slide.html.haml +6 -0
  184. data/app/views/c/front/blogs/_archive_filter_month.html.haml +2 -0
  185. data/app/views/c/front/blogs/_archive_filter_year.html.haml +1 -0
  186. data/app/views/c/front/blogs/_menu_item.html.haml +2 -0
  187. data/app/views/c/front_end/enquiries/new.html.haml +23 -0
  188. data/app/views/c/front_end/enquiries/thanks.html.haml +5 -0
  189. data/app/views/c/front_end/pages/_sales_highlight.html.haml +7 -0
  190. data/app/views/c/front_end/pages/about.html.haml +8 -0
  191. data/app/views/c/front_end/pages/home.html.haml +19 -0
  192. data/app/views/c/front_end/pages/search.html.haml +16 -0
  193. data/app/views/c/front_end/pages/show.html.haml +7 -0
  194. data/app/views/c/front_end/pages/sitemap.xml.builder +25 -0
  195. data/app/views/c/mailchimp/_signup_newsletter.html.haml +4 -0
  196. data/app/views/c/main_application/_application_bar.html.haml +22 -0
  197. data/app/views/c/main_application/_breadcrumbs.html.haml +7 -0
  198. data/app/views/c/main_application/_contact_info.html.haml +5 -0
  199. data/app/views/c/main_application/_footer.html.haml +49 -0
  200. data/app/views/c/main_application/_front_head_tags.html.haml +3 -0
  201. data/app/views/c/main_application/_header.html.haml +55 -0
  202. data/app/views/c/main_application/_site_search.html.haml +3 -0
  203. data/app/views/c/main_application/_yield.html.haml +5 -0
  204. data/app/views/devise/confirmations/new.html.erb +16 -0
  205. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  206. data/app/views/devise/mailer/password_change.html.erb +3 -0
  207. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  208. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  209. data/app/views/devise/passwords/edit.html.haml +26 -0
  210. data/app/views/devise/passwords/new.html.haml +14 -0
  211. data/app/views/devise/registrations/edit.html.haml +40 -0
  212. data/app/views/devise/registrations/new.html.haml +24 -0
  213. data/app/views/devise/sessions/new.html.haml +20 -0
  214. data/app/views/devise/shared/_links.html.erb +25 -0
  215. data/app/views/devise/unlocks/new.html.erb +16 -0
  216. data/app/views/layouts/c/application.html.haml +18 -0
  217. data/app/views/layouts/c/cms_login_layout.html.haml +18 -0
  218. data/app/views/layouts/c/mailer.html.erb +245 -0
  219. data/app/views/layouts/c/mailer.text.erb +3 -0
  220. data/app/views/layouts/c/main_application.html.haml +13 -0
  221. data/config/environment.rb +0 -0
  222. data/config/initializers/carrierwave.rb +18 -0
  223. data/config/initializers/devise.rb +283 -0
  224. data/config/initializers/rack_profiler.rb +8 -0
  225. data/config/locales/devise.en.yml +62 -0
  226. data/config/locales/en.yml +17 -0
  227. data/config/routes.rb +150 -0
  228. data/db/migrate/20160819000000_migrate_schema.rb +273 -0
  229. data/db/seed_data/countries.txt +227 -0
  230. data/lib/c/engine.rb +38 -0
  231. data/lib/c/version.rb +4 -0
  232. data/lib/cd2_catton_cms.rb +51 -0
  233. data/lib/tasks/c_tasks.rake +28 -0
  234. data/spec/dummy/Gemfile +4 -0
  235. data/spec/dummy/Gemfile.lock +20 -0
  236. data/spec/dummy/Rakefile +6 -0
  237. data/spec/dummy/app/assets/config/manifest.js +5 -0
  238. data/spec/dummy/app/assets/images/placeholder.png +0 -0
  239. data/spec/dummy/app/assets/javascripts/application.js +26 -0
  240. data/spec/dummy/app/assets/javascripts/cable.js +13 -0
  241. data/spec/dummy/app/assets/javascripts/pages.coffee +3 -0
  242. data/spec/dummy/app/assets/stylesheets/application.sass +13 -0
  243. data/spec/dummy/app/assets/stylesheets/c/application.sass +2 -0
  244. data/spec/dummy/app/controllers/application_controller.rb +10 -0
  245. data/spec/dummy/app/controllers/blogs_controller.rb +11 -0
  246. data/spec/dummy/app/controllers/pages_controller.rb +13 -0
  247. data/spec/dummy/app/models/application_record.rb +4 -0
  248. data/spec/dummy/app/models/page.rb +3 -0
  249. data/spec/dummy/bin/bundle +4 -0
  250. data/spec/dummy/bin/rails +5 -0
  251. data/spec/dummy/bin/rake +5 -0
  252. data/spec/dummy/bin/setup +35 -0
  253. data/spec/dummy/bin/update +30 -0
  254. data/spec/dummy/config/application.rb +17 -0
  255. data/spec/dummy/config/boot.rb +6 -0
  256. data/spec/dummy/config/cable.yml +9 -0
  257. data/spec/dummy/config/database.travis.yml +3 -0
  258. data/spec/dummy/config/database.yml +85 -0
  259. data/spec/dummy/config/environment.rb +6 -0
  260. data/spec/dummy/config/environments/development.rb +61 -0
  261. data/spec/dummy/config/environments/production.rb +87 -0
  262. data/spec/dummy/config/environments/test.rb +43 -0
  263. data/spec/dummy/config/initializers/application_controller_renderer.rb +7 -0
  264. data/spec/dummy/config/initializers/assets.rb +21 -0
  265. data/spec/dummy/config/initializers/backtrace_silencers.rb +8 -0
  266. data/spec/dummy/config/initializers/carrierwave.rb +15 -0
  267. data/spec/dummy/config/initializers/commercity.rb +4 -0
  268. data/spec/dummy/config/initializers/cookies_serializer.rb +6 -0
  269. data/spec/dummy/config/initializers/filter_parameter_logging.rb +5 -0
  270. data/spec/dummy/config/initializers/inflections.rb +17 -0
  271. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  272. data/spec/dummy/config/initializers/new_framework_defaults.rb +25 -0
  273. data/spec/dummy/config/initializers/session_store.rb +4 -0
  274. data/spec/dummy/config/initializers/wrap_parameters.rb +15 -0
  275. data/spec/dummy/config/locales/en.yml +23 -0
  276. data/spec/dummy/config/puma.rb +48 -0
  277. data/spec/dummy/config/routes.rb +4 -0
  278. data/spec/dummy/config/secrets.yml +22 -0
  279. data/spec/dummy/config/sidekiq.yml +6 -0
  280. data/spec/dummy/config/spring.rb +7 -0
  281. data/spec/dummy/config.ru +5 -0
  282. data/spec/dummy/db/schema.rb +1110 -0
  283. data/spec/dummy/lib/tasks/reprocess_images.rake +12 -0
  284. data/spec/dummy/lib/tasks/reset_all.rake +44 -0
  285. data/spec/dummy/lib/tasks/seeds/seed_blogs.rake +8 -0
  286. data/spec/dummy/lib/tasks/seeds/seed_pages.rake +24 -0
  287. data/spec/dummy/public/404.html +67 -0
  288. data/spec/dummy/public/422.html +67 -0
  289. data/spec/dummy/public/500.html +66 -0
  290. data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
  291. data/spec/dummy/public/apple-touch-icon.png +0 -0
  292. data/spec/dummy/public/favicon.ico +0 -0
  293. data/spec/dummy/seed/highlight1.png +0 -0
  294. data/spec/dummy/seed/highlight2.png +0 -0
  295. data/spec/dummy/seed/images/1/main.jpg +0 -0
  296. data/spec/dummy/seed/images/1/thumb.JPG +0 -0
  297. data/spec/dummy/seed/images/1/thumb2.jpg +0 -0
  298. data/spec/dummy/seed/images/2/main.jpeg +0 -0
  299. data/spec/dummy/seed/images/2/thumb.JPG +0 -0
  300. data/spec/dummy/seed/images/2/thumb2.JPG +0 -0
  301. data/spec/dummy/spec/models/redirect_spec.rb +57 -0
  302. data/spec/dummy/spec/support/factory_girl.rb +8 -0
  303. data/spec/dummy/spec/support/seed/images/product_image.png +0 -0
  304. data/spec/rails_helper.rb +49 -0
  305. data/spec/spec_helper.rb +52 -0
  306. metadata +734 -0
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+ require_dependency 'c/admin_controller'
3
+
4
+ module C
5
+ class Admin::ProjectsController < AdminController
6
+ before_action :load_from_url, only: [:edit, :update, :destroy]
7
+ load_and_authorize_resource class: C::Project
8
+
9
+ def index
10
+ @projects = filter_and_paginate(@projects, 'created_at desc')
11
+ end
12
+
13
+ def create
14
+ @project = C::Project.new(project_params)
15
+ if @project.save
16
+ redirect_to projects_path, notice: 'Project created'
17
+ else
18
+ render :new
19
+ end
20
+ end
21
+
22
+ def update
23
+ if params[:commit] == 'upload'
24
+ @project.assign_attributes(new_image_params)
25
+ render :edit
26
+ elsif @project.update(project_params)
27
+ redirect_to projects_path, notice: 'Project updated'
28
+ else
29
+ render :edit
30
+ end
31
+ end
32
+
33
+ def destroy
34
+ @project.destroy
35
+ respond_to do |format|
36
+ format.js
37
+ format.html { redirect_to projects_path }
38
+ end
39
+ end
40
+
41
+ private
42
+
43
+ def load_from_url
44
+ @project = C::Project.get_from_url(params[:id])
45
+ end
46
+
47
+ def new_image_params
48
+ params.require(:project).permit(new_images: [], images_attributes: [:id, :_destroy, :alt, :caption])
49
+ end
50
+
51
+ def project_params
52
+ params.require(:project).permit(:name, :body, :published, :url_alias, C::Page::IMAGEABLE_ATTRIBUTES, C::Page::PAGE_INFO_ATTRIBUTES, new_images: [])
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+ require_dependency 'c/admin_controller'
3
+
4
+ module C
5
+ class Admin::RedirectsController < AdminController
6
+ load_and_authorize_resource class: C::Redirect
7
+ before_action :set_redirect, only: [:edit, :update, :destroy]
8
+
9
+ def index
10
+ @redirects = filter_and_paginate(@redirects, 'old_url asc')
11
+ end
12
+
13
+ def create
14
+ if @redirect.save
15
+ redirect_to redirects_path, notice: 'Redirect Created'
16
+ else
17
+ render :new
18
+ end
19
+ end
20
+
21
+ def update
22
+ if @redirect.update(redirect_params)
23
+ redirect_to redirects_path, notice: 'Redirect Updated'
24
+ else
25
+ render :edit
26
+ end
27
+ end
28
+
29
+ def destroy
30
+ @redirect.destroy!
31
+ respond_to do |format|
32
+ format.js
33
+ format.html { redirect_to [:redirect] }
34
+ end
35
+ end
36
+
37
+ def confirm_destroy; end
38
+
39
+ def bulk_actions
40
+ @redirects = C::Redirect.where(id: params[:redirect])
41
+ action = @redirects.bulk_action(params[:bulk_actions])
42
+ redirect_back(fallback_location: order_sales_path, notice: action)
43
+ end
44
+
45
+ private
46
+
47
+ def set_redirect
48
+ @redirect = Redirect.find(params[:id])
49
+ end
50
+
51
+ def redirect_params
52
+ params.require(:redirect).permit(:old_url, :new_url, :last_used, :used_counter)
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+ require_dependency 'c/admin_controller'
3
+
4
+ module C
5
+ class Admin::RolesController < AdminController
6
+ load_and_authorize_resource class: C::Role
7
+
8
+ def index; end
9
+
10
+ def new; end
11
+
12
+ def create
13
+ if @role.save
14
+ flash[:success] = 'Role saved.'
15
+ redirect_to roles_path
16
+ else
17
+ render :new
18
+ end
19
+ end
20
+
21
+ def edit; end
22
+
23
+ def update
24
+ if @role.update(role_params)
25
+ flash[:success] = 'Role updated.'
26
+ redirect_to roles_path
27
+ else
28
+ render :edit
29
+ end
30
+ end
31
+
32
+ def destroy
33
+ if @role.destroy
34
+ flash[:success] = 'Role deleted.'
35
+ else
36
+ flash[:error] = 'An error occurred.'
37
+ end
38
+ redirect_to roles_path
39
+ end
40
+
41
+ def confirm_destroy; end
42
+
43
+ private
44
+
45
+ def role_params
46
+ params.require(:role).permit(:name, :body, permissions_attributes: [:id, :permission_subject_id, :read, :new, :edit, :remove])
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+ require_dependency 'c/admin_controller'
3
+
4
+ module C
5
+ class Admin::SlidesController < AdminController
6
+ load_and_authorize_resource :slideshow, class: C::Slideshow
7
+ load_and_authorize_resource :slide, class: C::Slide, through: :slideshow
8
+
9
+ def create
10
+ @slide = @slideshow.slides.new(slide_params)
11
+ if @slide.save
12
+ redirect_to edit_slideshow_path(@slideshow), notice: 'Slide created'
13
+ else
14
+ render :new
15
+ end
16
+ end
17
+
18
+ def update
19
+ if @slide.update(slide_params)
20
+ redirect_to edit_slideshow_path(@slideshow), notice: 'Slide updated'
21
+ else
22
+ render :edit
23
+ end
24
+ end
25
+
26
+ def destroy
27
+ @slide.destroy
28
+ respond_to do |format|
29
+ format.js
30
+ format.html do
31
+ redirect_to @slideshow, notice: 'Slide deleted'
32
+ end
33
+ end
34
+ end
35
+
36
+ def sort
37
+ @slides = C::Slideshow.find(params[:slideshow_id]).slides
38
+ @slides.update_order(params[:slideshow])
39
+ respond_to do |format|
40
+ format.js { head :ok, content_type: 'text/html' }
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ def slide_params
47
+ params.require(:slide).permit(:name, :body, :url, :image)
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+ require_dependency 'c/admin_controller'
3
+
4
+ module C
5
+ class Admin::SlideshowsController < AdminController
6
+ load_and_authorize_resource class: C::Slideshow
7
+
8
+ def index
9
+ @slideshows = @slideshows.ordered
10
+ end
11
+
12
+ def create
13
+ if @slideshow.save
14
+ redirect_to [:edit, @slideshow], notice: 'Slideshow created'
15
+ else
16
+ render :new
17
+ end
18
+ end
19
+
20
+ def update
21
+ if @slideshow.update(slideshow_params)
22
+ redirect_to [:edit, @slideshow], notice: 'Slideshow updated'
23
+ else
24
+ render :new
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def slideshow_params
31
+ params.require(:slideshow).permit(:id, :name, :body)
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+ require_dependency 'c/admin_controller'
3
+
4
+ module C
5
+ class Admin::TeamMembersController < AdminController
6
+ before_action :load_from_url, only: [:destroy, :edit, :update]
7
+ load_and_authorize_resource class: C::TeamMember
8
+
9
+ def index
10
+ @team_members
11
+ end
12
+
13
+ def new; end
14
+
15
+ def edit; end
16
+
17
+ def create
18
+ if @team_member.save
19
+ redirect_to team_members_path, notice: 'Team Member created'
20
+ else
21
+ render :new
22
+ end
23
+ end
24
+
25
+ def update
26
+ if @team_member.update(team_member_params)
27
+ redirect_to team_members_path, notice: 'Team Member updated'
28
+ else
29
+ render :edit
30
+ end
31
+ end
32
+
33
+ def dashboard; end
34
+
35
+ def destroy
36
+ @team_member.destroy
37
+ respond_to do |format|
38
+ format.js
39
+ format.html { redirect_to team_members_path }
40
+ end
41
+ end
42
+
43
+ def sort
44
+ @team_members = C::TeamMember.all
45
+ @team_members.update_order(params[:team_member])
46
+ respond_to do |format|
47
+ format.js { head :ok, content_type: 'text/html' }
48
+ end
49
+ end
50
+
51
+ private
52
+
53
+ def load_from_url
54
+ @team_member = C::TeamMember.find(params[:id])
55
+ end
56
+
57
+ def team_member_params
58
+ params.require(:team_member).permit(:id, :name, :role, :image, :body)
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+ require_dependency 'c/admin_controller'
3
+
4
+ module C
5
+ class Admin::TestimonialsController < AdminController
6
+ load_and_authorize_resource class: C::Testimonial
7
+
8
+ def index
9
+ @testimonials = filter_and_paginate(@testimonials, 'created_at desc')
10
+ end
11
+
12
+ def create
13
+ @testimonial = C::Testimonial.new(testimonial_params)
14
+ if @testimonial.save
15
+ redirect_to testimonials_path, notice: 'Testimonial created'
16
+ else
17
+ render :new
18
+ end
19
+ end
20
+
21
+ def update
22
+ if @testimonial.update(testimonial_params)
23
+ redirect_to testimonials_path, notice: 'Testimonial updated'
24
+ else
25
+ render :edit
26
+ end
27
+ end
28
+
29
+ def destroy
30
+ @testimonial.destroy
31
+ respond_to do |format|
32
+ format.js
33
+ format.html { redirect_to testimonials_path }
34
+ end
35
+ end
36
+
37
+ private
38
+
39
+ def testimonial_params
40
+ params.require(:testimonial).permit(:author, :quote)
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+ require_dependency 'c/admin_controller'
3
+
4
+ module C
5
+ class Admin::UsersController < AdminController
6
+ load_and_authorize_resource class: C::User
7
+
8
+ def index
9
+ @users = filter_and_paginate(@users, 'name asc')
10
+ end
11
+
12
+ def create
13
+ if @user.save
14
+ redirect_to users_path, notice: 'User created'
15
+ else
16
+ render :new
17
+ end
18
+ end
19
+
20
+ def update
21
+ if @user.update(user_params)
22
+ redirect_to users_path, notice: 'User created'
23
+ else
24
+ render :edit
25
+ end
26
+ end
27
+
28
+ def destroy
29
+ if @user != current_user && @user.destroy
30
+ respond_to do |format|
31
+ format.js
32
+ format.html { redirect_to [:redirect] }
33
+ end
34
+ else
35
+ redirect_to [:redirect]
36
+ end
37
+ end
38
+
39
+ def confirm_destroy; end
40
+
41
+ private
42
+
43
+ def user_params
44
+ if params[:user][:password].blank?
45
+ params[:user].delete(:password)
46
+ params[:user].delete(:password_confirmation)
47
+ end
48
+ params.require(:user).permit(:name, :email, :password, role_ids: [])
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+ require_dependency 'c/application_controller'
3
+
4
+ module C
5
+ class AdminController < ApplicationController
6
+ check_authorization unless: :devise_controller?
7
+
8
+ before_action :authenticate_user!
9
+ before_action :current_user_id
10
+
11
+ def edit
12
+ ajax_form
13
+ end
14
+
15
+ def new
16
+ ajax_form
17
+ end
18
+
19
+ private
20
+
21
+ def current_ability
22
+ @current_ability ||= ::C::Ability.new(current_user)
23
+ end
24
+
25
+ def ajax_form
26
+ respond_to do |format|
27
+ format.html
28
+ format.js { render 'quick_edit' }
29
+ end
30
+ end
31
+
32
+ def current_user_id
33
+ # For the Authorable concern
34
+ $user_id = current_user.id
35
+ end
36
+
37
+ def filter_and_paginate(collection, default_sort='id asc', per_page=30)
38
+ @q = collection.ransack(params[:q])
39
+ @q.sorts = default_sort if @q.sorts.empty?
40
+ @q.result.paginate(page: params[:page], per_page: per_page)
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+ module C
3
+ class ApplicationController < ActionController::Base
4
+ protect_from_forgery with: :exception
5
+ layout :layout
6
+
7
+ def layout
8
+ devise_controller? ? 'c/cms_login_layout' : 'c/application'
9
+ end
10
+
11
+ def current_ability
12
+ Ability.new(current_user)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+ class C::ErrorsController < ApplicationController
3
+ def show
4
+ render status_code.to_s, status: status_code
5
+ end
6
+
7
+ protected
8
+
9
+ def status_code
10
+ params[:code] || 500
11
+ end
12
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ module C
3
+ class Front::Devise::PasswordsController < Devise::PasswordsController
4
+ layout 'c/main_application'
5
+ end
6
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+ module C
3
+ class Front::Devise::RegistrationsController < Devise::RegistrationsController
4
+ layout 'c/main_application'
5
+
6
+ def after_sign_up_path_for(resource)
7
+ if session[:cart_id].present?
8
+ begin
9
+ customer = current_front_customer_account.customer
10
+ cart = C::Cart.find(session[:cart_id])
11
+ cart.update(customer_id: customer.id)
12
+ cart.order.update(customer: customer) if cart.order.present?
13
+ rescue ActiveRecord::RecordNotFound
14
+ # Do nothing, as there is nothing to set
15
+ end
16
+ session.delete(:cart_id)
17
+ end
18
+ params['checkout'] ? new_checkout_path : super
19
+ end
20
+
21
+ private
22
+
23
+ def sign_up_params
24
+ h = params.require(:front_customer_account).permit(
25
+ :email, :password, :password_confirmation,
26
+ customer_attributes: [:name]
27
+ )
28
+ h[:customer_attributes][:email] = h[:email]
29
+ h
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+ module C
3
+ class Front::Devise::SessionsController < Devise::SessionsController
4
+ layout 'c/main_application'
5
+ after_action :after_login, only: :create
6
+
7
+ def after_login
8
+ return unless session[:cart_id].present?
9
+ begin
10
+ customer = current_front_customer_account.customer
11
+ cart = C::Cart.find(session[:cart_id])
12
+ cart.update(customer_id: customer.id)
13
+ cart.order.update(customer: customer) if cart.order.present?
14
+ rescue ActiveRecord::RecordNotFound
15
+ # Do nothing, as there is nothing to set
16
+ end
17
+ end
18
+
19
+ def after_sign_in_path_for(resource)
20
+ request[:checkout] ? new_checkout_path : super
21
+ end
22
+
23
+ def after_sign_out_path_for(_resource_or_scope)
24
+ '/'
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+ require_dependency 'c/application_controller'
3
+
4
+ module C
5
+ class Front::MailchimpController < ApplicationController
6
+ def subscribe
7
+ begin
8
+ @mc = Mailchimp::API.new(Setting.get('mailchimp_api_key'))
9
+ email = params['email']
10
+ begin
11
+ @mc.lists.subscribe(Setting.get('mailchimp_list_id'), 'email' => email)
12
+ flash[:success] = "#{email} subscribed successfully"
13
+ rescue Mailchimp::ListAlreadySubscribedError
14
+ flash[:error] = "#{email} is already subscribed to the list"
15
+ rescue Mailchimp::ListDoesNotExistError
16
+ flash[:error] = 'The list could not be found'
17
+ redirect_back(fallback_location: front_end_root_path)
18
+ return
19
+ rescue Mailchimp::Error => ex
20
+ flash[:error] = if ex.message
21
+ ex.message
22
+ else
23
+ 'An unknown error occurred'
24
+ end
25
+ end
26
+ rescue Mailchimp::InvalidApiKeyError => ex
27
+ flash[:error] = ex.message
28
+ end
29
+ redirect_back(fallback_location: front_end_root_path)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+ require_dependency 'c/application_controller'
3
+
4
+ module C
5
+ class FrontController < MainApplicationController
6
+ end
7
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+ require_dependency 'c/application_controller'
3
+
4
+ module C
5
+ class FrontEnd::BlogsController < MainApplicationController
6
+ include BlogsHelper
7
+
8
+ def index
9
+ get_page C::Page, 'blogs'
10
+ @blogs = C::Blog.order(created_at: 'DESC')
11
+ archive_blogs
12
+ end
13
+
14
+ def show
15
+ get_page C::Blog
16
+ @blog = @page
17
+ redirect_to root_url unless @blog.published || user_signed_in?
18
+ force_clean_url @blog
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+ require_dependency 'c/application_controller'
3
+
4
+ module C
5
+ class FrontEnd::EnquiriesController < MainApplicationController
6
+ def new
7
+ get_page C::Page, 'contact-us'
8
+ @enquiry = C::Enquiry.new
9
+ end
10
+
11
+ def create
12
+ get_page C::Page, 'contact-us'
13
+ @enquiry = C::Enquiry.new(enquiry_params)
14
+ if @enquiry.save
15
+ C::EnquiriesMailer.new_enquiry(@enquiry).deliver_now
16
+ redirect_to thanks_front_end_enquiries_path
17
+ else
18
+ render :new
19
+ end
20
+ end
21
+
22
+ def thanks
23
+ @enquiry = C::Enquiry.new
24
+ end
25
+
26
+ private
27
+
28
+ def enquiry_params
29
+ params.require(:enquiry).permit(:name, :email, :body)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+ require_dependency 'c/application_controller'
3
+
4
+ module C
5
+ class FrontEnd::PagesController < MainApplicationController
6
+ def show
7
+ get_page C::Page
8
+ render @render if @render
9
+ redirect_to root_url unless @page.published || user_signed_in?
10
+ end
11
+
12
+ def sitemap
13
+ @pages = C::Page.all
14
+ respond_to do |format|
15
+ format.xml
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+ require_dependency 'c/application_controller'
3
+
4
+ module C
5
+ class MainApplicationController < ApplicationController
6
+ layout 'c/main_application'
7
+ helper C::NavigationHelper
8
+ helper C::StorefrontHelper
9
+ helper C::PagesHelper
10
+ include C::PagesHelper
11
+
12
+ before_action :check_redirects
13
+
14
+ private
15
+
16
+ def check_redirects
17
+ return unless (redirect = C::Redirect.find_by(old_url: request.path))
18
+ redirect.increment
19
+ redirect_to redirect.new_url
20
+ end
21
+ end
22
+ end