cd2_catton_cms 1.1.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Rakefile +37 -0
- data/app/assets/config/c_manifest.js +2 -0
- data/app/assets/images/c/drag_handle.gif +0 -0
- data/app/assets/images/c/login_background.jpg +0 -0
- data/app/assets/images/c/main_application/hero.jpg +0 -0
- data/app/assets/images/c/main_application/search.png +0 -0
- data/app/assets/images/c/placeholder_product_image.png +0 -0
- data/app/assets/images/c/select_arrow_down_blk.png +0 -0
- data/app/assets/images/c/small_icon.png +0 -0
- data/app/assets/images/c/vendor/chosen-sprite.png +0 -0
- data/app/assets/javascripts/c/application.js +59 -0
- data/app/assets/javascripts/c/change_tag.js +49 -0
- data/app/assets/javascripts/c/chosen.js +2 -0
- data/app/assets/javascripts/c/confirm_delete.js +55 -0
- data/app/assets/javascripts/c/draggable_tree.js +223 -0
- data/app/assets/javascripts/c/dropzone_init.js +98 -0
- data/app/assets/javascripts/c/fake_table.js +87 -0
- data/app/assets/javascripts/c/master_form2/collection.js +180 -0
- data/app/assets/javascripts/c/master_form2/eu_cookie.js +1 -0
- data/app/assets/javascripts/c/master_form2/jrecord.js +116 -0
- data/app/assets/javascripts/c/master_form2/master_form.coffee +4 -0
- data/app/assets/javascripts/c/split_buttons.js.erb +15 -0
- data/app/assets/javascripts/c/things_to_be_done.js +138 -0
- data/app/assets/javascripts/c/unloadevent.js +35 -0
- data/app/assets/stylesheets/c/_core.sass +237 -0
- data/app/assets/stylesheets/c/_engine.sass +4 -0
- data/app/assets/stylesheets/c/_variables.sass +32 -0
- data/app/assets/stylesheets/c/_vendor.sass +6 -0
- data/app/assets/stylesheets/c/application/checkout/_cart.sass +85 -0
- data/app/assets/stylesheets/c/application/checkout/_checkout.sass +87 -0
- data/app/assets/stylesheets/c/application/elements/buttons.sass +34 -0
- data/app/assets/stylesheets/c/application/elements/forms.sass +135 -0
- data/app/assets/stylesheets/c/application/elements/shadows.sass +23 -0
- data/app/assets/stylesheets/c/application/partials/_breadcrumbs.sass +10 -0
- data/app/assets/stylesheets/c/application/partials/_categories_sidebars/_1.sass +53 -0
- data/app/assets/stylesheets/c/application/partials/_categories_sidebars/_2.sass +77 -0
- data/app/assets/stylesheets/c/application/partials/_footer.sass +43 -0
- data/app/assets/stylesheets/c/application/partials/_header.sass +317 -0
- data/app/assets/stylesheets/c/engine/_draggable_trees.sass +68 -0
- data/app/assets/stylesheets/c/engine/_form_pages.sass +153 -0
- data/app/assets/stylesheets/c/engine/_header_bar.sass +29 -0
- data/app/assets/stylesheets/c/engine/_index_header.sass +17 -0
- data/app/assets/stylesheets/c/engine/_layout.sass +15 -0
- data/app/assets/stylesheets/c/engine/_login.sass +38 -0
- data/app/assets/stylesheets/c/engine/_navbar.sass +19 -0
- data/app/assets/stylesheets/c/engine/_pagination.sass +16 -0
- data/app/assets/stylesheets/c/engine/_settings.sass +5 -0
- data/app/assets/stylesheets/c/engine/_sidebar.sass +20 -0
- data/app/assets/stylesheets/c/engine/_tables.sass +76 -0
- data/app/assets/stylesheets/c/engine/flash_messages.sass +2 -0
- data/app/assets/stylesheets/c/print_application.sass +167 -0
- data/app/assets/stylesheets/c/vendor/_flex_mixins.scss +394 -0
- data/app/assets/stylesheets/c/vendor/_normalize.sass +340 -0
- data/app/controllers/c/admin/blogs_controller.rb +57 -0
- data/app/controllers/c/admin/devise/passwords_controller.rb +5 -0
- data/app/controllers/c/admin/devise/sessions_controller.rb +5 -0
- data/app/controllers/c/admin/documents_controller.rb +50 -0
- data/app/controllers/c/admin/enquiries_controller.rb +22 -0
- data/app/controllers/c/admin/images_controller.rb +21 -0
- data/app/controllers/c/admin/locations_controller.rb +63 -0
- data/app/controllers/c/admin/menu_items_controller.rb +49 -0
- data/app/controllers/c/admin/pages_controller.rb +94 -0
- data/app/controllers/c/admin/projects_controller.rb +55 -0
- data/app/controllers/c/admin/redirects_controller.rb +55 -0
- data/app/controllers/c/admin/roles_controller.rb +49 -0
- data/app/controllers/c/admin/slides_controller.rb +50 -0
- data/app/controllers/c/admin/slideshows_controller.rb +34 -0
- data/app/controllers/c/admin/team_members_controller.rb +61 -0
- data/app/controllers/c/admin/testimonials_controller.rb +43 -0
- data/app/controllers/c/admin/users_controller.rb +51 -0
- data/app/controllers/c/admin_controller.rb +43 -0
- data/app/controllers/c/application_controller.rb +15 -0
- data/app/controllers/c/errors_controller.rb +12 -0
- data/app/controllers/c/front/devise/passwords_controller.rb +6 -0
- data/app/controllers/c/front/devise/registrations_controller.rb +32 -0
- data/app/controllers/c/front/devise/sessions_controller.rb +27 -0
- data/app/controllers/c/front/mailchimp_controller.rb +32 -0
- data/app/controllers/c/front_controller.rb +7 -0
- data/app/controllers/c/front_end/blogs_controller.rb +21 -0
- data/app/controllers/c/front_end/enquiries_controller.rb +32 -0
- data/app/controllers/c/front_end/pages_controller.rb +19 -0
- data/app/controllers/c/main_application_controller.rb +22 -0
- data/app/helpers/c/application_helper.rb +51 -0
- data/app/helpers/c/blogs_helper.rb +113 -0
- data/app/helpers/c/c_form_builder.rb +43 -0
- data/app/helpers/c/link_to_helper.rb +25 -0
- data/app/helpers/c/navigation_helper.rb +28 -0
- data/app/helpers/c/pages_helper.rb +27 -0
- data/app/helpers/c/storefront_helper.rb +63 -0
- data/app/mailers/c/application_mailer.rb +7 -0
- data/app/mailers/c/enquiries_mailer.rb +10 -0
- data/app/models/c/ability.rb +21 -0
- data/app/models/c/application_record.rb +6 -0
- data/app/models/c/author_record.rb +13 -0
- data/app/models/c/blog.rb +43 -0
- data/app/models/c/document.rb +17 -0
- data/app/models/c/enquiry.rb +95 -0
- data/app/models/c/image.rb +11 -0
- data/app/models/c/location.rb +18 -0
- data/app/models/c/menu_item.rb +35 -0
- data/app/models/c/non_delete.rb +10 -0
- data/app/models/c/page.rb +48 -0
- data/app/models/c/page_info.rb +16 -0
- data/app/models/c/permission.rb +9 -0
- data/app/models/c/permission_subject.rb +12 -0
- data/app/models/c/project.rb +20 -0
- data/app/models/c/redirect.rb +33 -0
- data/app/models/c/role.rb +18 -0
- data/app/models/c/slide.rb +16 -0
- data/app/models/c/slideshow.rb +23 -0
- data/app/models/c/team_member.rb +33 -0
- data/app/models/c/testimonial.rb +42 -0
- data/app/models/c/user.rb +42 -0
- data/app/models/c/user_role.rb +7 -0
- data/app/models/c/weight.rb +10 -0
- data/app/models/concerns/c/authorable.rb +18 -0
- data/app/models/concerns/c/documentable.rb +18 -0
- data/app/models/concerns/c/imageable.rb +49 -0
- data/app/models/concerns/c/non_deletable.rb +30 -0
- data/app/models/concerns/c/orderable.rb +30 -0
- data/app/models/concerns/c/previewable.rb +20 -0
- data/app/models/concerns/c/site_page.rb +89 -0
- data/app/uploaders/c/file_uploader.rb +9 -0
- data/app/uploaders/c/image_uploader.rb +39 -0
- data/app/views/c/admin/_background_jobs_dropdown.html.haml +18 -0
- data/app/views/c/admin/_bread_crumbs.html.haml +7 -0
- data/app/views/c/admin/_ebay_categories.html.haml +20 -0
- data/app/views/c/admin/_flash_messages.html.haml +5 -0
- data/app/views/c/admin/_header_bar.html.haml +18 -0
- data/app/views/c/admin/_index_table.html.haml +113 -0
- data/app/views/c/admin/_index_table_data.html.haml +17 -0
- data/app/views/c/admin/_navigation_bar.html.haml +1 -0
- data/app/views/c/admin/_preview_image.html.haml +2 -0
- data/app/views/c/admin/_preview_upload.html.haml +18 -0
- data/app/views/c/admin/_seo.html.haml +11 -0
- data/app/views/c/admin/_side_menu.html.haml +26 -0
- data/app/views/c/admin/_uploaded_images_new.html.haml +13 -0
- data/app/views/c/admin/blogs/_form.html.haml +58 -0
- data/app/views/c/admin/blogs/index.html.haml +9 -0
- data/app/views/c/admin/confirm_destroy.html.haml +6 -0
- data/app/views/c/admin/confirm_mass_destroy.html.haml +10 -0
- data/app/views/c/admin/documents/_form.html.haml +8 -0
- data/app/views/c/admin/documents/index.html.haml +9 -0
- data/app/views/c/admin/edit.html.haml +15 -0
- data/app/views/c/admin/enquiries/index.html.haml +14 -0
- data/app/views/c/admin/locations/_form.html.haml +58 -0
- data/app/views/c/admin/locations/index.html.haml +9 -0
- data/app/views/c/admin/menu_items/_form.html.haml +44 -0
- data/app/views/c/admin/menu_items/_menu_item_list_item.html.haml +10 -0
- data/app/views/c/admin/menu_items/index.html.haml +10 -0
- data/app/views/c/admin/new.html.haml +8 -0
- data/app/views/c/admin/pages/_form.html.haml +93 -0
- data/app/views/c/admin/pages/_page_list_item.html.haml +10 -0
- data/app/views/c/admin/pages/dashboard.html.erb +0 -0
- data/app/views/c/admin/pages/index.html.haml +11 -0
- data/app/views/c/admin/projects/_form.html.haml +46 -0
- data/app/views/c/admin/projects/index.html.haml +9 -0
- data/app/views/c/admin/quick_edit.js.erb +6 -0
- data/app/views/c/admin/redirects/_form.html.haml +14 -0
- data/app/views/c/admin/redirects/index.html.haml +9 -0
- data/app/views/c/admin/reload_images.js.erb +2 -0
- data/app/views/c/admin/roles/_form.html.haml +42 -0
- data/app/views/c/admin/roles/index.html.haml +17 -0
- data/app/views/c/admin/set_preview_image.js.erb +1 -0
- data/app/views/c/admin/show.html.haml +1 -0
- data/app/views/c/admin/slides/_form.html.haml +19 -0
- data/app/views/c/admin/slideshows/_form.html.haml +25 -0
- data/app/views/c/admin/slideshows/index.html.haml +8 -0
- data/app/views/c/admin/team_members/_form.html.haml +20 -0
- data/app/views/c/admin/team_members/index.html.haml +10 -0
- data/app/views/c/admin/testimonials/_form.html.haml +13 -0
- data/app/views/c/admin/testimonials/index.html.haml +8 -0
- data/app/views/c/admin/users/_form.html.haml +17 -0
- data/app/views/c/admin/users/index.html.haml +12 -0
- data/app/views/c/enquiries_mailer/new_enquiry.html.haml +14 -0
- data/app/views/c/enquiries_mailer/new_enquiry.text.haml +9 -0
- data/app/views/c/errors/404.html.haml +5 -0
- data/app/views/c/errors/500.html.haml +5 -0
- data/app/views/c/front/application/_category_item.html.haml +2 -0
- data/app/views/c/front/application/_menu_item.html.haml +4 -0
- data/app/views/c/front/application/_sales_highlight.html.haml +1 -0
- data/app/views/c/front/application/_slide.html.haml +6 -0
- data/app/views/c/front/blogs/_archive_filter_month.html.haml +2 -0
- data/app/views/c/front/blogs/_archive_filter_year.html.haml +1 -0
- data/app/views/c/front/blogs/_menu_item.html.haml +2 -0
- data/app/views/c/front_end/enquiries/new.html.haml +23 -0
- data/app/views/c/front_end/enquiries/thanks.html.haml +5 -0
- data/app/views/c/front_end/pages/_sales_highlight.html.haml +7 -0
- data/app/views/c/front_end/pages/about.html.haml +8 -0
- data/app/views/c/front_end/pages/home.html.haml +19 -0
- data/app/views/c/front_end/pages/search.html.haml +16 -0
- data/app/views/c/front_end/pages/show.html.haml +7 -0
- data/app/views/c/front_end/pages/sitemap.xml.builder +25 -0
- data/app/views/c/mailchimp/_signup_newsletter.html.haml +4 -0
- data/app/views/c/main_application/_application_bar.html.haml +22 -0
- data/app/views/c/main_application/_breadcrumbs.html.haml +7 -0
- data/app/views/c/main_application/_contact_info.html.haml +5 -0
- data/app/views/c/main_application/_footer.html.haml +49 -0
- data/app/views/c/main_application/_front_head_tags.html.haml +3 -0
- data/app/views/c/main_application/_header.html.haml +55 -0
- data/app/views/c/main_application/_site_search.html.haml +3 -0
- data/app/views/c/main_application/_yield.html.haml +5 -0
- data/app/views/devise/confirmations/new.html.erb +16 -0
- data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
- data/app/views/devise/mailer/password_change.html.erb +3 -0
- data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/devise/passwords/edit.html.haml +26 -0
- data/app/views/devise/passwords/new.html.haml +14 -0
- data/app/views/devise/registrations/edit.html.haml +40 -0
- data/app/views/devise/registrations/new.html.haml +24 -0
- data/app/views/devise/sessions/new.html.haml +20 -0
- data/app/views/devise/shared/_links.html.erb +25 -0
- data/app/views/devise/unlocks/new.html.erb +16 -0
- data/app/views/layouts/c/application.html.haml +18 -0
- data/app/views/layouts/c/cms_login_layout.html.haml +18 -0
- data/app/views/layouts/c/mailer.html.erb +245 -0
- data/app/views/layouts/c/mailer.text.erb +3 -0
- data/app/views/layouts/c/main_application.html.haml +13 -0
- data/config/environment.rb +0 -0
- data/config/initializers/carrierwave.rb +18 -0
- data/config/initializers/devise.rb +283 -0
- data/config/initializers/rack_profiler.rb +8 -0
- data/config/locales/devise.en.yml +62 -0
- data/config/locales/en.yml +17 -0
- data/config/routes.rb +150 -0
- data/db/migrate/20160819000000_migrate_schema.rb +273 -0
- data/db/seed_data/countries.txt +227 -0
- data/lib/c/engine.rb +38 -0
- data/lib/c/version.rb +4 -0
- data/lib/cd2_catton_cms.rb +51 -0
- data/lib/tasks/c_tasks.rake +28 -0
- data/spec/dummy/Gemfile +4 -0
- data/spec/dummy/Gemfile.lock +20 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/config/manifest.js +5 -0
- data/spec/dummy/app/assets/images/placeholder.png +0 -0
- data/spec/dummy/app/assets/javascripts/application.js +26 -0
- data/spec/dummy/app/assets/javascripts/cable.js +13 -0
- data/spec/dummy/app/assets/javascripts/pages.coffee +3 -0
- data/spec/dummy/app/assets/stylesheets/application.sass +13 -0
- data/spec/dummy/app/assets/stylesheets/c/application.sass +2 -0
- data/spec/dummy/app/controllers/application_controller.rb +10 -0
- data/spec/dummy/app/controllers/blogs_controller.rb +11 -0
- data/spec/dummy/app/controllers/pages_controller.rb +13 -0
- data/spec/dummy/app/models/application_record.rb +4 -0
- data/spec/dummy/app/models/page.rb +3 -0
- data/spec/dummy/bin/bundle +4 -0
- data/spec/dummy/bin/rails +5 -0
- data/spec/dummy/bin/rake +5 -0
- data/spec/dummy/bin/setup +35 -0
- data/spec/dummy/bin/update +30 -0
- data/spec/dummy/config/application.rb +17 -0
- data/spec/dummy/config/boot.rb +6 -0
- data/spec/dummy/config/cable.yml +9 -0
- data/spec/dummy/config/database.travis.yml +3 -0
- data/spec/dummy/config/database.yml +85 -0
- data/spec/dummy/config/environment.rb +6 -0
- data/spec/dummy/config/environments/development.rb +61 -0
- data/spec/dummy/config/environments/production.rb +87 -0
- data/spec/dummy/config/environments/test.rb +43 -0
- data/spec/dummy/config/initializers/application_controller_renderer.rb +7 -0
- data/spec/dummy/config/initializers/assets.rb +21 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +8 -0
- data/spec/dummy/config/initializers/carrierwave.rb +15 -0
- data/spec/dummy/config/initializers/commercity.rb +4 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +6 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +5 -0
- data/spec/dummy/config/initializers/inflections.rb +17 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/new_framework_defaults.rb +25 -0
- data/spec/dummy/config/initializers/session_store.rb +4 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +15 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/puma.rb +48 -0
- data/spec/dummy/config/routes.rb +4 -0
- data/spec/dummy/config/secrets.yml +22 -0
- data/spec/dummy/config/sidekiq.yml +6 -0
- data/spec/dummy/config/spring.rb +7 -0
- data/spec/dummy/config.ru +5 -0
- data/spec/dummy/db/schema.rb +1110 -0
- data/spec/dummy/lib/tasks/reprocess_images.rake +12 -0
- data/spec/dummy/lib/tasks/reset_all.rake +44 -0
- data/spec/dummy/lib/tasks/seeds/seed_blogs.rake +8 -0
- data/spec/dummy/lib/tasks/seeds/seed_pages.rake +24 -0
- data/spec/dummy/public/404.html +67 -0
- data/spec/dummy/public/422.html +67 -0
- data/spec/dummy/public/500.html +66 -0
- data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
- data/spec/dummy/public/apple-touch-icon.png +0 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/seed/highlight1.png +0 -0
- data/spec/dummy/seed/highlight2.png +0 -0
- data/spec/dummy/seed/images/1/main.jpg +0 -0
- data/spec/dummy/seed/images/1/thumb.JPG +0 -0
- data/spec/dummy/seed/images/1/thumb2.jpg +0 -0
- data/spec/dummy/seed/images/2/main.jpeg +0 -0
- data/spec/dummy/seed/images/2/thumb.JPG +0 -0
- data/spec/dummy/seed/images/2/thumb2.JPG +0 -0
- data/spec/dummy/spec/models/redirect_spec.rb +57 -0
- data/spec/dummy/spec/support/factory_girl.rb +8 -0
- data/spec/dummy/spec/support/seed/images/product_image.png +0 -0
- data/spec/rails_helper.rb +49 -0
- data/spec/spec_helper.rb +52 -0
- metadata +734 -0
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module C
|
3
|
+
class Page < ApplicationRecord
|
4
|
+
include SitePage
|
5
|
+
include Imageable
|
6
|
+
include Authorable
|
7
|
+
include Orderable
|
8
|
+
include Previewable
|
9
|
+
include Documentable
|
10
|
+
|
11
|
+
acts_as_tree order: 'weight'
|
12
|
+
|
13
|
+
validates :name, presence: true
|
14
|
+
|
15
|
+
has_many :menu_items
|
16
|
+
|
17
|
+
has_many :product_points, dependent: :destroy, class_name: 'ProductPoint'
|
18
|
+
|
19
|
+
accepts_nested_attributes_for :product_points, allow_destroy: true
|
20
|
+
|
21
|
+
before_save do
|
22
|
+
self.layout = 'show' if layout.blank?
|
23
|
+
end
|
24
|
+
|
25
|
+
def build_product_points
|
26
|
+
case product_points.count
|
27
|
+
when 3
|
28
|
+
return
|
29
|
+
when 2
|
30
|
+
1.times { product_points.build }
|
31
|
+
when 1
|
32
|
+
2.times { product_points.build }
|
33
|
+
when 0
|
34
|
+
3.times { product_points.build }
|
35
|
+
else
|
36
|
+
return
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
INDEX_TABLE = {
|
41
|
+
"Name": { link: { name: { call: 'name' }, options: '[:edit, object]' }, sort: 'name' },
|
42
|
+
"Author": { call: 'author', sort: 'author' },
|
43
|
+
"Published": { call: 'published', sort: 'published' },
|
44
|
+
"Created": { call: 'created_at', sort: 'published' },
|
45
|
+
"Edit": { link: { name: { text: 'edit' }, options: '[:edit, object]' } }
|
46
|
+
}.freeze
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module C
|
3
|
+
class PageInfo < ApplicationRecord
|
4
|
+
belongs_to :page, polymorphic: true
|
5
|
+
|
6
|
+
def fallback_title
|
7
|
+
if (name = page.try(:name))
|
8
|
+
"#{name} | #{C.store_name}"
|
9
|
+
else
|
10
|
+
C.store_name
|
11
|
+
end
|
12
|
+
rescue
|
13
|
+
''
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module C
|
3
|
+
class Project < ApplicationRecord
|
4
|
+
include SitePage
|
5
|
+
include Imageable
|
6
|
+
include Orderable
|
7
|
+
include Previewable
|
8
|
+
include Authorable
|
9
|
+
|
10
|
+
validates :name, presence: true
|
11
|
+
|
12
|
+
INDEX_TABLE = {
|
13
|
+
'Name': { link: { name: { call: 'name' }, options: '[:edit, object]' }, sort: 'name' },
|
14
|
+
'Author': { call: 'author', sort: 'author' },
|
15
|
+
'Published': { call: 'published', sort: 'published' },
|
16
|
+
'Created': { call: 'created_at', sort: 'published' },
|
17
|
+
'Edit': { link: { name: { text: 'edit' }, options: '[:edit, object]' } }
|
18
|
+
}.freeze
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module C
|
3
|
+
class Redirect < ApplicationRecord
|
4
|
+
scope :ordered, -> { order created_at: :desc }
|
5
|
+
|
6
|
+
validates :old_url, presence: true
|
7
|
+
validates :new_url, presence: true
|
8
|
+
|
9
|
+
def increment
|
10
|
+
self.used_counter = used_counter + 1
|
11
|
+
self.last_used = Time.zone.now
|
12
|
+
save!
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.bulk_action(action)
|
16
|
+
case action
|
17
|
+
when 'delete'
|
18
|
+
destroy_all
|
19
|
+
'Deleted Redirects'
|
20
|
+
else
|
21
|
+
'No action selected'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
INDEX_TABLE = {
|
26
|
+
'Old URL': { call: 'old_url', sort: 'old_url' },
|
27
|
+
'New URL': { call: 'new_url', sort: 'new_url' },
|
28
|
+
'Used': { call: 'used_counter', sort: 'used_counter' },
|
29
|
+
'Last Used': { call: 'last_used', sort: 'last_used' },
|
30
|
+
'Edit': { link: { name: { text: 'edit' }, options: '[:edit, object]' } }
|
31
|
+
}.freeze
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module C
|
3
|
+
class Role < ApplicationRecord
|
4
|
+
has_many :permissions
|
5
|
+
accepts_nested_attributes_for :permissions
|
6
|
+
|
7
|
+
has_many :user_roles
|
8
|
+
has_many :users, through: :user_roles
|
9
|
+
|
10
|
+
validates :name, presence: true
|
11
|
+
|
12
|
+
def build_or_find_permissions
|
13
|
+
PermissionSubject.find_each do |subject|
|
14
|
+
permissions.collect(&:permission_subject_id).include?(subject.id) || permissions.build(permission_subject: subject)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module C
|
3
|
+
class Slide < ApplicationRecord
|
4
|
+
include Orderable
|
5
|
+
|
6
|
+
belongs_to :slideshow
|
7
|
+
|
8
|
+
mount_uploader :image, ImageUploader
|
9
|
+
|
10
|
+
INDEX_TABLE = {
|
11
|
+
'Slide': { image: 'image.preview' },
|
12
|
+
'Name': { link: { name: { call: 'name' }, options: '[:edit, object.slideshow, object]' } },
|
13
|
+
'Edit': { link: { name: { text: 'Edit' }, options: '[:edit, object.slideshow, object]' } }
|
14
|
+
}.freeze
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module C
|
3
|
+
class Slideshow < ApplicationRecord
|
4
|
+
scope :ordered, -> { order created_at: :asc }
|
5
|
+
|
6
|
+
has_many :slides, dependent: :delete_all
|
7
|
+
|
8
|
+
before_validation on: :create do
|
9
|
+
self.machine_name = name
|
10
|
+
end
|
11
|
+
|
12
|
+
# Force non blank parametized machine name
|
13
|
+
def machine_name=(val)
|
14
|
+
super val.to_s.parameterize
|
15
|
+
end
|
16
|
+
|
17
|
+
INDEX_TABLE = {
|
18
|
+
'Name': { link: { name: { call: 'name' }, options: '[:edit, object]' } },
|
19
|
+
'Description': { call: 'body&.html_safe' },
|
20
|
+
'Slides': { link: { name: { call: 'slides.count' }, options: '[:edit, object]' } }
|
21
|
+
}.freeze
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module C
|
3
|
+
class TeamMember < ApplicationRecord
|
4
|
+
include Orderable
|
5
|
+
|
6
|
+
validates :name, presence: true
|
7
|
+
|
8
|
+
mount_uploader :image, ImageUploader
|
9
|
+
|
10
|
+
def name_and_role
|
11
|
+
"#{name} - #{role}"
|
12
|
+
end
|
13
|
+
|
14
|
+
INDEX_TABLE = {
|
15
|
+
'Image': {
|
16
|
+
image: 'image.preview'
|
17
|
+
},
|
18
|
+
'': {},
|
19
|
+
'Name': {
|
20
|
+
link: {
|
21
|
+
name: { call: 'name_and_role' },
|
22
|
+
options: '[:edit, object]'
|
23
|
+
}
|
24
|
+
},
|
25
|
+
'Edit': {
|
26
|
+
link: {
|
27
|
+
name: { text: 'Edit' },
|
28
|
+
options: '[:edit, object]'
|
29
|
+
}
|
30
|
+
}
|
31
|
+
}.freeze
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module C
|
3
|
+
class Testimonial < ApplicationRecord
|
4
|
+
include Orderable
|
5
|
+
include Imageable
|
6
|
+
|
7
|
+
validates :quote, :author, presence: true
|
8
|
+
belongs_to :project, optional: true
|
9
|
+
|
10
|
+
def quote_teaser
|
11
|
+
if quote.length > 150
|
12
|
+
quote.truncate(150)
|
13
|
+
else
|
14
|
+
quote
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
INDEX_TABLE = {
|
19
|
+
"Quote": {
|
20
|
+
call: 'quote'
|
21
|
+
},
|
22
|
+
"Author": {
|
23
|
+
call: 'author'
|
24
|
+
},
|
25
|
+
"Created": {
|
26
|
+
call: 'created_at'
|
27
|
+
},
|
28
|
+
"Delete": {
|
29
|
+
link: {
|
30
|
+
name: {
|
31
|
+
text: 'Delete'
|
32
|
+
},
|
33
|
+
options: '[object]',
|
34
|
+
method: :delete,
|
35
|
+
data: {
|
36
|
+
confirm: 'Are you sure?'
|
37
|
+
}
|
38
|
+
}
|
39
|
+
}
|
40
|
+
}.freeze
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module C
|
3
|
+
class User < ApplicationRecord
|
4
|
+
# Include default devise modules. Others available are:
|
5
|
+
# :confirmable, :lockable, :timeoutable and :omniauthable, :registerable
|
6
|
+
devise :database_authenticatable, :recoverable,
|
7
|
+
:rememberable, :trackable, :validatable
|
8
|
+
|
9
|
+
scope :ordered, -> { order name: :asc }
|
10
|
+
|
11
|
+
has_many :user_roles
|
12
|
+
has_many :roles, through: :user_roles
|
13
|
+
has_many :permissions, -> { distinct }, through: :roles
|
14
|
+
|
15
|
+
validates :name, presence: true
|
16
|
+
|
17
|
+
INDEX_TABLE = {
|
18
|
+
'Name': {
|
19
|
+
link: {
|
20
|
+
name: {
|
21
|
+
call: 'name'
|
22
|
+
},
|
23
|
+
options: '[:edit, object]'
|
24
|
+
},
|
25
|
+
sort: 'name'
|
26
|
+
},
|
27
|
+
'Email': {
|
28
|
+
call: 'email', sort: 'email'
|
29
|
+
},
|
30
|
+
'Last Sign In': {
|
31
|
+
call: 'last_sign_in_at'
|
32
|
+
},
|
33
|
+
'Edit': {
|
34
|
+
link: {
|
35
|
+
name: {
|
36
|
+
text: 'edit'
|
37
|
+
}, options: '[:edit, object]'
|
38
|
+
}
|
39
|
+
}
|
40
|
+
}.freeze
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module C
|
3
|
+
module Authorable
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
has_one :author_record, as: :authored, autosave: true, dependent: :destroy
|
8
|
+
delegate :user, to: :author_record
|
9
|
+
delegate :author, to: :author_record, allow_nil: true
|
10
|
+
|
11
|
+
after_save :assign_author
|
12
|
+
|
13
|
+
def assign_author
|
14
|
+
create_author_record(user_id: $user_id)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module C
|
3
|
+
module Documentable
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
has_many :documents, as: :documentable, autosave: true, dependent: :destroy
|
8
|
+
|
9
|
+
accepts_nested_attributes_for :documents, allow_destroy: true
|
10
|
+
|
11
|
+
def new_documents=(val)
|
12
|
+
Array(val).each do |document|
|
13
|
+
documents.build(document: document)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module C
|
3
|
+
module Imageable
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
has_many :images, as: :imageable, autosave: true, dependent: :destroy
|
8
|
+
has_one :feature_image, -> { where(featured_image: true) }, as: :imageable, class_name: 'C::Image'
|
9
|
+
has_one :preview_image, -> { where(preview_image: true) }, as: :imageable, class_name: 'C::Image'
|
10
|
+
|
11
|
+
accepts_nested_attributes_for :images, allow_destroy: true
|
12
|
+
|
13
|
+
def new_images=(val)
|
14
|
+
Array(val).each do |image|
|
15
|
+
images.build(image: image)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def feature_image(fallback=nil)
|
20
|
+
super&.image || images.first&.image || fallback || ''
|
21
|
+
end
|
22
|
+
|
23
|
+
def feature_image?
|
24
|
+
images.where(featured_image: true).exists?
|
25
|
+
end
|
26
|
+
|
27
|
+
def preview_image(fallback=nil)
|
28
|
+
super&.image || images.first&.image || fallback || ''
|
29
|
+
end
|
30
|
+
|
31
|
+
def teaser_image(fallback=nil)
|
32
|
+
preview_image fallback
|
33
|
+
end
|
34
|
+
|
35
|
+
def preview_image?
|
36
|
+
images.where(preview_image: true).exists?
|
37
|
+
end
|
38
|
+
|
39
|
+
def teaser_image?
|
40
|
+
preview_image?
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class_methods do
|
45
|
+
def asd; end
|
46
|
+
IMAGEABLE_ATTRIBUTES = [images_attributes: [:_destroy, :id, :alt, :caption, :image, :image_cache, :feature_image, :preview_image, :weight, :featured_image]].freeze
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module C
|
3
|
+
module NonDeletable
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
has_one :non_delete, as: :non_deletable, dependent: :destroy
|
8
|
+
|
9
|
+
before_create do
|
10
|
+
create_non_delete!
|
11
|
+
end
|
12
|
+
|
13
|
+
def destroy
|
14
|
+
create_non_delete! unless non_delete
|
15
|
+
non_delete.update(deleted: true)
|
16
|
+
end
|
17
|
+
|
18
|
+
def deleted?
|
19
|
+
create_non_delete! unless non_delete
|
20
|
+
non_delete.deleted
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.included(klass)
|
25
|
+
klass.instance_eval do
|
26
|
+
default_scope { includes(:non_delete).where(c_non_deletes: { deleted: false }) }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module C
|
3
|
+
module Orderable
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
has_one :_weight, dependent: :destroy, class_name: 'C::Weight', as: :orderable
|
8
|
+
accepts_nested_attributes_for :_weight
|
9
|
+
|
10
|
+
scope :ordered, -> { includes(:_weight).order('c_weights.value asc') }
|
11
|
+
|
12
|
+
def _weight
|
13
|
+
super || build__weight
|
14
|
+
end
|
15
|
+
|
16
|
+
def weight
|
17
|
+
_weight.value
|
18
|
+
end
|
19
|
+
|
20
|
+
def weight=(val)
|
21
|
+
_weight.value = val
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.update_order(ordered_ids)
|
25
|
+
order = ordered_ids.each_with_index.map { |_, i| { weight: i + 1 } }
|
26
|
+
update(ordered_ids, order)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module C
|
3
|
+
module Previewable
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
def preview_body
|
8
|
+
if !self.class.column_names.include?('preview_body') || super.blank?
|
9
|
+
if body.present?
|
10
|
+
ActionController::Base.helpers.strip_tags(body.gsub(%r{<h(\d)>.*?<\/h(\1)>}, '')).truncate(150, strip_tags: true)
|
11
|
+
else
|
12
|
+
''
|
13
|
+
end
|
14
|
+
else
|
15
|
+
super
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module C
|
3
|
+
module SitePage
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
scope :published, -> { includes(:page_info).where("c_page_infos.published": true) }
|
8
|
+
|
9
|
+
has_one :page_info, as: :page, dependent: :destroy
|
10
|
+
accepts_nested_attributes_for :page_info
|
11
|
+
|
12
|
+
has_one :menu_item, autosave: true
|
13
|
+
accepts_nested_attributes_for :menu_item
|
14
|
+
|
15
|
+
delegate :title=, to: :page_info
|
16
|
+
delegate :meta_description=, to: :page_info
|
17
|
+
delegate :published=, to: :page_info
|
18
|
+
delegate :protected=, to: :page_info
|
19
|
+
delegate :home_page=, to: :page_info
|
20
|
+
|
21
|
+
delegate :protected, to: :page_info
|
22
|
+
delegate :published, to: :page_info
|
23
|
+
delegate :home_page, to: :page_info
|
24
|
+
delegate :home_page?, to: :page_info
|
25
|
+
delegate :title, to: :page_info
|
26
|
+
delegate :meta_description, to: :page_info
|
27
|
+
delegate :author, to: :page_info
|
28
|
+
|
29
|
+
validates :url_alias, presence: true
|
30
|
+
|
31
|
+
before_validation do
|
32
|
+
if url_alias.blank?
|
33
|
+
|
34
|
+
ident = if new_record?
|
35
|
+
self.class.count + 1
|
36
|
+
else
|
37
|
+
id
|
38
|
+
end
|
39
|
+
|
40
|
+
url_pattern = if name.blank?
|
41
|
+
ident
|
42
|
+
else
|
43
|
+
name.parameterize
|
44
|
+
end
|
45
|
+
|
46
|
+
if self.class.find_by(url_alias: url_pattern)
|
47
|
+
url_pattern = "#{url_pattern}-#{ident}"
|
48
|
+
end
|
49
|
+
self.url_alias = url_pattern
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
before_create do
|
54
|
+
create_page_info unless page_info
|
55
|
+
end
|
56
|
+
|
57
|
+
def to_param
|
58
|
+
url_alias
|
59
|
+
end
|
60
|
+
|
61
|
+
def page_info
|
62
|
+
super || build_page_info(page: self)
|
63
|
+
end
|
64
|
+
|
65
|
+
def assign_author(user)
|
66
|
+
page_info.author_id = user.id
|
67
|
+
page_info.save
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
class_methods do
|
72
|
+
def get_from_url(url=nil)
|
73
|
+
# TODO: url alias can be nil w/o being homepage
|
74
|
+
# cond = url ? {url_alias: url} : {home_page: true}
|
75
|
+
if url
|
76
|
+
all.find_by(url_alias: url)
|
77
|
+
else
|
78
|
+
all.includes(:page_info).find_by(c_page_infos: { home_page: true })
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def root_page
|
83
|
+
PageInfo.find_by(page_type: page_type, root: true).page
|
84
|
+
end
|
85
|
+
|
86
|
+
PAGE_INFO_ATTRIBUTES = [page_info_attributes: [:id, :title, :meta_description]].freeze
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
module C
|
4
|
+
class ImageUploader < CarrierWave::Uploader::Base
|
5
|
+
include CarrierWave::MiniMagick
|
6
|
+
|
7
|
+
def store_dir
|
8
|
+
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
9
|
+
end
|
10
|
+
|
11
|
+
version :thumbnail do
|
12
|
+
process resize_and_pad: [150, 150]
|
13
|
+
end
|
14
|
+
|
15
|
+
version :preview do
|
16
|
+
process resize_to_fit: [100, 100]
|
17
|
+
end
|
18
|
+
|
19
|
+
version :cropped_square do
|
20
|
+
process resize_to_fill: [300, 300]
|
21
|
+
end
|
22
|
+
|
23
|
+
version :square do
|
24
|
+
process resize_to_fit: [300, 300]
|
25
|
+
end
|
26
|
+
|
27
|
+
version :big_sq do
|
28
|
+
process resize_and_pad: [600, 400]
|
29
|
+
end
|
30
|
+
|
31
|
+
version :large do
|
32
|
+
process resize_to_fill: [1000, 600]
|
33
|
+
end
|
34
|
+
|
35
|
+
version :cropped_rect do
|
36
|
+
process :resize_to_fill => [250, 100]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
- unless @background_jobs.blank?
|
2
|
+
#background_jobs
|
3
|
+
.label
|
4
|
+
= fa_icon("caret-down")
|
5
|
+
= pluralize(@background_jobs_count, "Running Job")
|
6
|
+
.background_jobs_container
|
7
|
+
%ul
|
8
|
+
- @background_jobs.each do |product|
|
9
|
+
%li
|
10
|
+
- max_length = 20
|
11
|
+
%p
|
12
|
+
Processing Amazon data for
|
13
|
+
%span.product_name
|
14
|
+
= "#{product.name[0..max_length]}#{"..." if product.name.length > max_length}"
|
15
|
+
- difference = @background_jobs_count - @background_jobs.count
|
16
|
+
- if difference > 0
|
17
|
+
%li
|
18
|
+
%p And #{difference} more
|