camaleon_spree 0.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 (31) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +37 -0
  4. data/app/assets/javascripts/plugins/camaleon_spree/main.js +15 -0
  5. data/app/assets/stylesheets/plugins/camaleon_spree/custom.css.scss +39 -0
  6. data/app/assets/stylesheets/plugins/camaleon_spree/main.css +5 -0
  7. data/app/controllers/plugins/camaleon_spree/admin_controller.rb +15 -0
  8. data/app/helpers/plugins/camaleon_spree/main_helper.rb +83 -0
  9. data/app/plugins/camaleon_spree/product_decorator.rb +4 -0
  10. data/app/views/camaleon_cms/admin/installers/welcome.html.erb +8 -0
  11. data/app/views/plugins/camaleon_spree/admin/_render_custom_fields_product.html.erb +5 -0
  12. data/app/views/plugins/camaleon_spree/admin/cama_plugin_settings.html.erb +4 -0
  13. data/app/views/plugins/camaleon_spree/admin/custom_field/_spree_categories.html.erb +3 -0
  14. data/app/views/plugins/camaleon_spree/admin/custom_field/_spree_products.html.erb +3 -0
  15. data/app/views/plugins/camaleon_spree/admin/settings.html.erb +16 -0
  16. data/app/views/plugins/camaleon_spree/examples/_layout_menus.html.erb +23 -0
  17. data/app/views/plugins/camaleon_spree/examples/_product_custom_fields.html.erb +15 -0
  18. data/app/views/plugins/camaleon_spree/examples/template_product_page.html.erb +45 -0
  19. data/config/camaleon_plugin.json +24 -0
  20. data/config/initializers/bread_crumb_onrails.rb +18 -0
  21. data/config/initializers/camaleon.rb +104 -0
  22. data/config/initializers/routes.rb +43 -0
  23. data/config/initializers/spree.rb +64 -0
  24. data/config/initializers/will_paginate.rb +24 -0
  25. data/config/routes.rb +21 -0
  26. data/db/migrate/20160831160611_add_camaleon_user_data_to_spree.rb +15 -0
  27. data/lib/camaleon_spree.rb +4 -0
  28. data/lib/camaleon_spree/engine.rb +4 -0
  29. data/lib/camaleon_spree/version.rb +3 -0
  30. data/lib/tasks/camaleon_spree_tasks.rake +4 -0
  31. metadata +102 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 39d35ba38f34032cfce0332e9557ee52fb31c4a8
4
+ data.tar.gz: 8110a524ba6f5620a1da12acfd87d0c664eedc53
5
+ SHA512:
6
+ metadata.gz: 1954178f245f8a37fe410edb1ded31d1235898eef589494434e5899335b9497f1754ff602ded158635d08afd92034aaf676febe2e537a5f1f706c0c2898f037e
7
+ data.tar.gz: 6bade47eb96dbdbbcae16de1004af7b80b0abfa38b0bb7284c6c7f8cf9616d90ebb2ed650958123a833ad006bd2a6828dd7833cc3280bddf02b1d8efa3bf3f22
@@ -0,0 +1,20 @@
1
+ Copyright 2016 Owen Peredo
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,37 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'CamaleonSpree'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+
21
+ load 'rails/tasks/statistics.rake'
22
+
23
+
24
+
25
+ Bundler::GemHelper.install_tasks
26
+
27
+ require 'rake/testtask'
28
+
29
+ Rake::TestTask.new(:test) do |t|
30
+ t.libs << 'lib'
31
+ t.libs << 'test'
32
+ t.pattern = 'test/**/*_test.rb'
33
+ t.verbose = false
34
+ end
35
+
36
+
37
+ task default: :test
@@ -0,0 +1,15 @@
1
+ //= require camaleon_cms/admin/_custom_fields
2
+ //= require camaleon_cms/admin/_i18n
3
+ //= require camaleon_cms/admin/_translator.js
4
+
5
+ //= require camaleon_cms/admin/uploader/uploader_manifest
6
+ //= require camaleon_cms/admin/jquery.validate
7
+ //= require_self
8
+ function modal_fix_multiple(){
9
+ var activeModal = $('.modal.in:last', 'body').data('bs.modal');
10
+ if (activeModal) {
11
+ activeModal.$body.addClass('modal-open');
12
+ activeModal.enforceFocus();
13
+ activeModal.handleUpdate();
14
+ }
15
+ }
@@ -0,0 +1,39 @@
1
+ @mixin link_round($radio: 30) {
2
+ border: 1px solid #bbb;
3
+ border-radius: 50%;
4
+ color: #656d78;
5
+ display: block;
6
+ float: left;
7
+ height: #{$radio}px;
8
+ line-height: #{$radio - 3}px;
9
+ margin-left: 3px;
10
+ text-align: center;
11
+ transition: all 200ms ease 0s;
12
+ width: #{$radio}px;
13
+ }
14
+
15
+ .c-field-group {
16
+ .panel-controls{
17
+ display: none;
18
+ }
19
+ .item-custom-field {
20
+ margin-bottom: 15px;
21
+ > label {
22
+ display: block;
23
+ .shortcode_field input{
24
+ min-width: 250px;
25
+ }
26
+ }
27
+ .actions{
28
+ overflow: hidden;
29
+ width: 67px;
30
+ float: left;
31
+ .fa {
32
+ @include link_round;
33
+ }
34
+ & + .group-input-fields-content {
35
+ margin-left: 75px;
36
+ }
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,5 @@
1
+ /*
2
+ *= require font-awesome
3
+ *= require plugins/camaleon_spree/custom
4
+ *= require camaleon_cms/admin/uploader/uploader_manifest
5
+ */
@@ -0,0 +1,15 @@
1
+ class Plugins::CamaleonSpree::AdminController < CamaleonCms::Apps::PluginsAdminController
2
+ include Plugins::CamaleonSpree::MainHelper
3
+ # show settings form
4
+ def settings
5
+ end
6
+
7
+ # save values from settings form
8
+ def save_settings
9
+ @plugin.set_options(params[:options]) if params[:options].present? # save option values
10
+ @plugin.set_metas(params[:metas]) if params[:metas].present? # save meta values
11
+ @plugin.set_field_values(params[:field_options]) if params[:field_options].present? # save custom field values
12
+ redirect_to url_for(action: :settings), notice: 'Settings Saved Successfully'
13
+ end
14
+ # add custom methods below ....
15
+ end
@@ -0,0 +1,83 @@
1
+ module Plugins::CamaleonSpree::MainHelper
2
+ include Plugins::CamaleonSpree::PrivateHelper
3
+ def self.included(klass)
4
+ # klass.helper_method [:my_helper_method] rescue "" # here your methods accessible from views
5
+ end
6
+
7
+ # fix to avoid missing route for https://github.com/spree-contrib/spree_tax_cloud
8
+ def edit_admin_tax_cloud_settings_path
9
+ spree.edit_admin_tax_cloud_settings_path
10
+ end
11
+
12
+ # here all actions on going to active
13
+ # you can run sql commands like this:
14
+ # results = ActiveRecord::Base.connection.execute(query);
15
+ # plugin: plugin model
16
+ def camaleon_spree_on_active(plugin)
17
+ current_plugin.set_option('camaleon_cms_layout', 'spree/layouts/spree_application')
18
+ end
19
+
20
+ # here all actions on going to inactive
21
+ # plugin: plugin model
22
+ def camaleon_spree_on_inactive(plugin)
23
+ end
24
+
25
+ def camaleon_spree_front_default_layout(args)
26
+ args[:layout] = current_plugin.get_option('camaleon_cms_layout') if current_plugin.get_option('camaleon_cms_layout').present?
27
+ end
28
+
29
+ # permit to show spree products and taxonomies in admin->menus (camaleon cms)
30
+ def camaleon_spree_cama_nav_menus(args)
31
+ # Groups
32
+ Spree::Taxonomy.all.each do |taxonomy|
33
+ args[:custom_menus]["spree_menus"] = {link: "", title: "Spree #{taxonomy.name.pluralize}"}
34
+ taxonomy.taxons.each do |taxon|
35
+ args[:custom_menus]["spree_tax_#{taxon.id}"] = {link: spree.nested_taxons_path(taxon.permalink), title: taxon.name, kind: 'Spree::Taxon', id: taxon.id}
36
+ end
37
+ end
38
+
39
+ # Products
40
+ args[:custom_menus]["spree_menus_products"] = {link: "", title: "Spree Products"}
41
+ Spree::Product.reorder(name: :ASC).all.each do |product|
42
+ args[:custom_menus]["spree_product_#{product.id}"] = {link: spree.product_path(product), title: product.name, kind: 'Spree::Product', id: product.id}
43
+ end
44
+ end
45
+
46
+ # permit to show spree products and taxonomies in admin->menus (camaleon cms)
47
+ def camaleon_spree_on_parse_custom_menu_item(args)
48
+ if args[:menu_item].kind == 'Spree::Taxon'
49
+ taxon = Spree::Taxon.find(args[:menu_item].url)
50
+ res = {name: taxon.name, link: spree.nested_taxons_path(taxon.permalink)}
51
+ res[:current] = site_current_path == res[:link] unless args[:is_from_backend]
52
+ args[:parsed_menu] = res
53
+ end
54
+
55
+ if args[:menu_item].kind == 'Spree::Product'
56
+ product = Spree::Product.find(args[:menu_item].url)
57
+ res = {name: product.name, link: spree.product_path(product)}
58
+ res[:current] = site_current_path == res[:link] unless args[:is_from_backend]
59
+ args[:parsed_menu] = res
60
+ end
61
+ end
62
+
63
+ # here all actions to upgrade for a new version
64
+ # plugin: plugin model
65
+ def camaleon_spree_on_upgrade(plugin)
66
+ end
67
+
68
+ def camaleon_spree_on_plugin_options(args)
69
+ args[:links] << link_to('Settings', admin_plugins_camaleon_spree_settings_path)
70
+ end
71
+
72
+ # add spree role action for camaleon user group permissions
73
+ def camaleon_spree_user_roles_hook(args)
74
+ args[:roles_list][:manager] << { key: 'spree_role', label: t('plugins.spree_cama.admin.roles.label', default: 'Spree Ecommerce'), description: t('plugins.spree_cama.admin.roles.descr', default: 'Manage all sections of Spree Ecommerce')}
75
+ end
76
+
77
+ # render spree menu item added on admin->menus (camaleon cms)
78
+ def camaleon_spree_on_render_front_menu_item(args)
79
+ if args[:parsed_menu] != false && args[:menu_item].kind == 'external' && args[:parsed_menu][:current] == false
80
+ args[:parsed_menu][:current] = URI::parse(site_current_url).path == args[:parsed_menu][:link]
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,4 @@
1
+ class CamaleonCms::PostDecorator < CamaleonCms::ApplicationDecorator
2
+ include CamaleonCms::CustomFieldsConcern
3
+ delegate_all
4
+ end
@@ -0,0 +1,8 @@
1
+ <div class="well">
2
+ <h3>Your site was created successfully.</h3>
3
+ <hr>
4
+ <p>Vist Frontend: <%= link_to("Here.", cama_root_url, target: "_blank") %></p>
5
+ <p>Visit Admin panel <%= link_to("Here.", cama_admin_dashboard_url, target: "_blank") %></p>
6
+ <p>user: <small>Use Spree Credentials</small></p>
7
+ <p>pass: <small>Use Spree Credentials</small></p>
8
+ </div>
@@ -0,0 +1,5 @@
1
+ <script>var root_admin_url = '<%= cama_admin_url %>'; var ADMIN_TRANSLATIONS = <%= raw current_site.get_languages.to_json %>;</script>
2
+ <%= javascript_include_tag 'plugins/camaleon_spree/main' %>
3
+ <%= stylesheet_link_tag 'plugins/camaleon_spree/main' %>
4
+ <div class="clearfix"></div>
5
+ <%= render partial: "camaleon_cms/admin/settings/custom_fields/render", locals: {record: @product, field_groups: @product.get_field_groups} %>
@@ -0,0 +1,4 @@
1
+ <div class="form-group">
2
+ <label>Camaleon CMS Layout</label>
3
+ <%= text_field_tag 'options[camaleon_cms_layout]', plugin.get_option('camaleon_cms_layout'), class: 'form-control' %>
4
+ </div>
@@ -0,0 +1,3 @@
1
+ <div class="group-input-fields-content">
2
+ <%= select_tag "#{field_name}[#{field.slug}][values][]", option_groups_from_collection_for_select(Spree::Taxonomy.all, :taxons, :name, :id, :name), include_blank: 'Select Category', class: "form-control input-value #{"required" if field.options[:required].to_s.to_bool}", id: '' %>
3
+ </div>
@@ -0,0 +1,3 @@
1
+ <div class="group-input-fields-content">
2
+ <%= select_tag "#{field_name}[#{field.slug}][values][]", options_from_collection_for_select(Spree::Product.active.order(name: :ASC), :id, :name), include_blank: 'Select Product', class: "form-control input-value #{"required" if field.options[:required].to_s.to_bool}", id: '' %>
3
+ </div>
@@ -0,0 +1,16 @@
1
+ <div class="panel panel-default">
2
+ <div class="panel-heading">
3
+ <h4>Camaleon Spree Settings</h4>
4
+ </div>
5
+ <div class="panel-body">
6
+ <%= form_tag(url_for(action: :save_settings), class: 'validate') do %>
7
+ <div class="form-group">
8
+ <label>Camaleon CMS Layout</label><br><small>Permit you to use spree layout for camaleon pages</small>
9
+ <%= text_field_tag 'options[camaleon_cms_layout]', @plugin.get_option('camaleon_cms_layout'), class: 'form-control required' %>
10
+ </div>
11
+ <div class="form-group text-right">
12
+ <%= submit_tag 'Save Settings', class: 'btn btn-primary' %>
13
+ </div>
14
+ <% end %>
15
+ </div>
16
+ </div>
@@ -0,0 +1,23 @@
1
+ <style>
2
+ #custom_cama_menu .current-link,
3
+ #custom_cama_menu .current-menu-ancestor > a{ color: #fff; }
4
+ #custom_cama_menu .dropdown-menu .current-link{ color: #bbb; }
5
+ </style> <!--TMP Harcoding-->
6
+ <nav id="custom_cama_menu" role="navigation">
7
+ <div class="navbar navbar-inverse navbar-static-top" style="margin-bottom: 0">
8
+ <div class="container">
9
+ <div style="position: absolute; top: 0;"><%= raw current_site.draw_languages("language-list list-inline", true) %></div>
10
+ <!-- .navbar-toggle is used as the toggle for collapsed navbar content -->
11
+ <div class="navbar-header">
12
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-responsive-collapse">
13
+ <span class="icon-bar"></span>
14
+ <span class="icon-bar"></span>
15
+ <span class="icon-bar"></span>
16
+ </button>
17
+ </div>
18
+ <div class="navbar-collapse collapse navbar-responsive-collapse">
19
+ <%= raw draw_menu({container_id: "menu-menu-1", container_class: "nav navbar-nav navbar-right"}) %>
20
+ </div>
21
+ </div>
22
+ </div>
23
+ </nav>
@@ -0,0 +1,15 @@
1
+ <% if(pages = @product.get_fields('sample-pages')).present? %>
2
+ <h3>Related Pages</h3>
3
+ <div class="row">
4
+ <% pages.each do |page_id| p=CamaleonCms::Post.where(id: page_id).first.try(:decorate); next unless p.present? %>
5
+ <div class="col-md-3">
6
+ <a href="<%= p.the_url %>">
7
+ <%= image_tag(p.the_thumb_url, style: 'disply:block', width: '100%') %>
8
+ </a>
9
+ <a href="<%= p.the_url %>">
10
+ <%= p.the_title %>
11
+ </a>
12
+ </div>
13
+ <% end %>
14
+ </div>
15
+ <% end %>
@@ -0,0 +1,45 @@
1
+ <div class="col-md-12 page-view">
2
+ <article class="post-content">
3
+ <h1><%= raw @post.the_title.upcase %><%= @post.the_edit_link %></h1>
4
+ <div class="item-content">
5
+ <%= raw @post.the_content %>
6
+ </div>
7
+
8
+ <% if (fields = @post.the_fields('spree-categories')).present? %>
9
+ <h3>Related Categories</h3>
10
+ <ul>
11
+ <% fields.each do |category_id| taxon = Spree::Taxon.where(id: category_id).first; next unless taxon.present?; %>
12
+ <li><%= link_to(taxon.name, spree.nested_taxons_path(taxon.permalink)) %></li>
13
+ <% end %>
14
+ </ul>
15
+ <% end %>
16
+
17
+ <!-- Related Products -->
18
+ <% if (fields = @post.the_fields('related-products')).present? %>
19
+ <h3>Related Products</h3>
20
+ <div class="row">
21
+ <% fields.each do |product_id|
22
+ product = Spree::Product.where(id: product_id).first; next unless product.present?;
23
+ url = spree.product_url(product)
24
+ %>
25
+ <div id="product_<%= product.id %>" class="col-md-3 col-sm-6 col-xs-6 product-list-item" data-hook="products_list_item" itemscope itemtype="https://schema.org/Product">
26
+ <div class="panel panel-default">
27
+ <div class="panel-body text-center product-body">
28
+ <%= link_to url, itemprop: "url" do %>
29
+ <%= small_image(product, itemprop: "image") %><br/>
30
+ <%= content_tag(:span, truncate(product.name, length: 50), class: 'info', itemprop: "name", title: product.name) %>
31
+ <% end %>
32
+ <br/>
33
+ </div>
34
+ <div class="panel-footer text-center">
35
+ <span itemprop="offers" itemscope itemtype="https://schema.org/Offer">
36
+ <span class="price selling lead" itemprop="price"><%= display_price(product) %></span>
37
+ </span>
38
+ </div>
39
+ </div>
40
+ </div>
41
+ <% end %>
42
+ </div>
43
+ <% end %>
44
+ </article>
45
+ </div>
@@ -0,0 +1,24 @@
1
+ {
2
+ "title": "Camaleon Spree",
3
+ "descr": "Permit to include Spree Commerce admin panel into Camaleon CMS",
4
+ "key": "camaleon_spree", // must be the name of the folder of your plugin, sample: app/views/plugins/<my_plugin> ==> 'my_plugin'
5
+ "helpers": [
6
+ "Plugins::CamaleonSpree::MainHelper"
7
+ ],
8
+ "hooks": {
9
+ "on_active": [
10
+ "camaleon_spree_on_active"
11
+ ],
12
+ "on_inactive": [
13
+ "camaleon_spree_on_inactive"
14
+ ],
15
+ "available_user_roles_list": ["camaleon_spree_user_roles_hook"],
16
+ "extra_custom_fields": ["camaleon_spree_custom_fields"],
17
+ "custom_field_custom_models": ["camaleon_spree_custom_field_models"],
18
+ "on_render_front_menu_item": ["camaleon_spree_on_render_front_menu_item"],
19
+ "nav_menu_custom": ["camaleon_spree_cama_nav_menus"],
20
+ "parse_custom_menu_item": ["camaleon_spree_on_parse_custom_menu_item"],
21
+ "front_default_layout": ["camaleon_spree_front_default_layout"],
22
+ "plugin_options": ["camaleon_spree_on_plugin_options"]
23
+ }
24
+ }
@@ -0,0 +1,18 @@
1
+ Rails.application.config.to_prepare do
2
+ module BreadcrumbsOnRails
3
+ module ActionController
4
+ module HelperMethods
5
+ def render_breadcrumbs(options = {}, &block)
6
+ builder = (options.delete(:builder) || Breadcrumbs::SimpleBuilder).new(self, @breadcrumbs, options)
7
+ content = builder.render.html_safe
8
+ if block_given?
9
+ capture(content, &block)
10
+ else
11
+ content
12
+ end
13
+ end
14
+
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,104 @@
1
+ Rails.application.config.to_prepare do
2
+ # load basic helpers from spree into camaleon frontend
3
+ CamaleonCms::FrontendController.class_eval do
4
+ include Spree::Core::ControllerHelpers::Order
5
+ include Spree::Core::ControllerHelpers::Auth
6
+ include Spree::Core::ControllerHelpers::Store
7
+
8
+ helper Spree::BaseHelper
9
+ helper Spree::StoreHelper
10
+ end
11
+
12
+ ########## changes to camaleon to include spree ##########
13
+ CamaleonCms::AdminController.class_eval do
14
+ before_action :set_spree_buttons
15
+ helper_method :current_store
16
+
17
+ def current_store
18
+ Spree::Store.current
19
+ end
20
+
21
+ private
22
+ def set_spree_buttons
23
+ return if cannot? :manage, :spree_role
24
+ cama_content_prepend("
25
+ <div id=\"tmp_spree_menu\" style=\"display: none\"> #{render_to_string partial: 'spree/admin/shared/main_menu'} </div>
26
+ <script>
27
+ jQuery(function(){
28
+ // spree commerce menus
29
+ $('#sidebar-menu .sidebar-menu').append('<li id=\"spree_commerce_menu\" class=\"treeview\" data-key=\"settings\"> <a href=\"#\"><i class=\"fa fa-shopping-cart\"></i> <span class="">#{t('plugins.spree_cama.admin.menus.ecommerce', default: 'Spree Ecommerce')}</span> <i class=\"fa fa-angle-left pull-right\"></i></a> <ul class=\"treeview-menu\"></ul> </li>');
30
+ var items = $('#tmp_spree_menu').find('.nav-sidebar > .sidebar-menu-item').clone();
31
+ items.find('ul').attr('class', 'treeview-menu').each(function(){ $(this).prev().removeAttr('data-toggle').removeAttr('aria-expanded').append('<i class=\"fa fa-angle-left pull-right\"></i>'); });
32
+ items.find('a').prepend('<i class=\"fa fa-circle-o\"></i>');
33
+ $('#spree_commerce_menu .treeview-menu').html(items);
34
+
35
+ // menu spree as iframe
36
+ function spree_load_iframe(url){
37
+ $('#admin_content').html('<iframe style=\"width: 100%; height: 480px; margin-top: -66px;\" frameBorder=\"0\" src=\"'+url+'\">').find('iframe').load(function(){
38
+ $(this.contentWindow.document.body).css({'padding-bottom': '120px', 'min-height': '500px'});
39
+ this.style.height = this.contentWindow.document.body.offsetHeight + 15 + 'px';
40
+ if('history' in window && 'pushState' in history) window.history.pushState({}, '', '#{cama_admin_dashboard_path}?cama_spree_iframe_path='+this.contentWindow.location.href);
41
+ });
42
+ }
43
+
44
+ $('#spree_commerce_menu li[data-spree-ecommerce] a, #spree_commerce_menu a').click(function(e){
45
+ if($(this).attr('href').search('#') == 0) return e.preventDefault();
46
+ $(this).closest('li').addClass('active').siblings().removeClass('active');
47
+ spree_load_iframe($(this).attr('href'));
48
+ window.scrollTo(0, 0);
49
+ return false;
50
+ });
51
+ #{"spree_load_iframe('#{params[:cama_spree_iframe_path]}'); $('#spree_commerce_menu > a').click();" if params[:cama_spree_iframe_path].present?}
52
+ }); </script>")
53
+ end
54
+ end
55
+
56
+ # update camaleon session routes
57
+ module CamaleonCms::SessionHelper
58
+ def cama_current_user
59
+ @cama_current_user ||= lambda{
60
+ if spree_current_user.try(:id).present?
61
+ spree_current_user.decorate
62
+ end
63
+ }.call
64
+ end
65
+
66
+ def cama_admin_login_path
67
+ spree_login_path
68
+ end
69
+ alias_method :cama_admin_login_url, :cama_admin_login_path
70
+
71
+ def cama_admin_register_path
72
+ spree_signup_path
73
+ end
74
+ alias_method :cama_admin_register_url, :cama_admin_register_path
75
+
76
+ def cama_admin_logout_path
77
+ spree_logout_path
78
+ end
79
+ alias_method :cama_admin_logout_url, :cama_admin_logout_path
80
+ end
81
+
82
+ # custom models
83
+ CamaleonCms::User.class_eval do
84
+ alias_attribute :last_login_at, :last_sign_in_at
85
+ alias_attribute :username, :login
86
+ after_create :check_user_role
87
+
88
+ has_many :spree_roles, through: :role_users, class_name: 'Spree::Role', source: :role, after_add: :cama_update_roles, after_remove: :cama_update_roles
89
+ def has_spree_role?(role_in_question)
90
+ spree_roles.any? { |role| role.name == role_in_question.to_s } || self.role == role_in_question.to_s
91
+ end
92
+
93
+ private
94
+ def check_user_role
95
+ if self.admin?
96
+ Spree::User.find(self.id).spree_roles << Spree::Role.where(name: 'admin').first
97
+ end
98
+ end
99
+
100
+ def cama_update_roles(role)
101
+ self.update_column(:role, spree_roles.where(spree_roles: {name: 'admin'}).any? ? 'admin' : 'user')
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,43 @@
1
+ class Camaspreehelperroutes
2
+ def self.update_helper_routes
3
+ _routes = ['cama_profile', 'cama_search', 'cama_post_of_posttype', 'cama_save_comment', 'cama_save_form', 'cama_post_type', 'cama_hierarchy_post', 'cama_post_tag', 'cama_post', 'cama_root', 'cama_admin', 'cama_admin_dashboard']
4
+ _routes += Cama::PostType.pluck(:id).map{|id| "cama_post_type_#{id}"}
5
+
6
+ _cama_lang_routes = ['cama_category', 'cama_post_of_category', 'cama_post_of_post_type', 'cama_post_type']
7
+ Cama::Site.main_site.get_languages.each{|_l| _cama_lang_routes.each{|_r| _routes << "#{_r}_#{_l}" } }
8
+ _routes.each do |x|
9
+ Spree::BaseHelper.module_eval <<-eoruby, __FILE__, __LINE__ + 1
10
+ def #{x}_url(args=nil)
11
+ Rails.application.routes.url_helpers.#{x}_url(args)
12
+ end
13
+
14
+ def #{x}_path(args=nil)
15
+ Rails.application.routes.url_helpers.#{x}_path(args)
16
+ end
17
+ eoruby
18
+ end
19
+
20
+ ['edit_cama_admin_post_type_post_tag_url', 'edit_cama_admin_post_type_post_url'].each do |u|
21
+ Spree::BaseHelper.module_eval <<-eoruby, __FILE__, __LINE__ + 1
22
+ def #{u}(pt_id, object, args)
23
+ Rails.application.routes.url_helpers.#{u}(pt_id, object, args)
24
+ end
25
+ eoruby
26
+ end
27
+
28
+ ['edit_cama_admin_post_type_category_url', 'edit_cama_admin_settings_post_type_url'].each do |u|
29
+ Spree::BaseHelper.module_eval <<-eoruby, __FILE__, __LINE__ + 1
30
+ def #{u}(id, args)
31
+ Rails.application.routes.url_helpers.#{u}(id, args)
32
+ end
33
+ eoruby
34
+ end
35
+ end
36
+ end
37
+
38
+ Rails.application.config.to_prepare do
39
+ if PluginRoutes.db_installed? && Cama::Site.any?
40
+ Camaspreehelperroutes.update_helper_routes
41
+ end
42
+ PluginRoutes.add_after_reload_routes 'Camaspreehelperroutes.update_helper_routes'
43
+ end
@@ -0,0 +1,64 @@
1
+ Rails.application.config.to_prepare do
2
+ ########## changes for spree to works with camaleon ##########
3
+ Spree::UserSessionsController.class_eval do
4
+ private
5
+ def redirect_back_or_default(default)
6
+ redirect_to(cookies[:return_to] || session["spree_user_return_to"] || default)
7
+ session["spree_user_return_to"] = nil
8
+ cookies[:return_to] = nil
9
+ end
10
+ end
11
+
12
+ Deface::Override.new(
13
+ virtual_path: 'spree/layouts/admin',
14
+ name: 'cama_admin_iframe_hide_sidebar',
15
+ insert_bottom: '[data-hook="admin_footer_scripts"]',
16
+ text: '<script>
17
+ jQuery(function(){
18
+ if(window.location != window.parent.location){ $("#wrapper").addClass("sidebar-minimized"); $("#main-part").css({"margin-left": 0, "padding-left": "35px"}); $("#main-sidebar").hide(); }
19
+ })
20
+ </script>'
21
+ )
22
+
23
+ Deface::Override.new(
24
+ virtual_path: 'spree/admin/products/_form',
25
+ name: 'cama_custom_fields',
26
+ insert_bottom: '[data-hook="admin_product_form_additional_fields"]',
27
+ partial: '/plugins/camaleon_spree/admin/render_custom_fields_product'
28
+ )
29
+ Deface::Override.new(
30
+ virtual_path: 'spree/admin/products/new',
31
+ name: 'cama_custom_fields_on_create',
32
+ insert_bottom: '[data-hook="new_product_attrs"]',
33
+ partial: '/plugins/camaleon_spree/admin/render_custom_fields_product'
34
+ )
35
+
36
+ # spree product add custom fields support
37
+ Spree::Product.class_eval do
38
+ include CamaleonCms::Metas
39
+ include CamaleonCms::CustomFieldsRead
40
+ include CamaleonCms::CustomFieldsConcern
41
+ def get_field_groups(args = {}) # needs to fix for multisite&multistore support
42
+ CamaleonCms::CustomFieldGroup.where(object_class: self.class.name)
43
+ end
44
+
45
+ end
46
+
47
+
48
+ Spree::Admin::ProductsController.class_eval do
49
+ create.after :save_custom_fields
50
+ update.after :save_custom_fields
51
+
52
+ private
53
+ def save_custom_fields
54
+ @object.set_field_values(params[:field_options])
55
+ end
56
+ end
57
+
58
+ # redirect to cama dashboard
59
+ Spree::Admin::RootController.class_eval do
60
+ def index
61
+ redirect_to Rails.application.routes.url_helpers.cama_admin_dashboard_path
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,24 @@
1
+ if defined?(WillPaginate)
2
+ module WillPaginate
3
+ module ActiveRecord
4
+ module RelationMethods
5
+ def per_page(num)
6
+ if (n = num.to_i) <= 0
7
+ self
8
+ else
9
+ limit(n).offset(offset_value / limit_value * n)
10
+ end
11
+ end
12
+
13
+ def total_pages
14
+ (total_count.to_f / limit_value).ceil
15
+ end
16
+
17
+ alias_method :per, :per_page
18
+ alias_method :num_pages, :total_pages
19
+ alias_method :total_count, :total_entries
20
+ alias_method :prev_page, :previous_page
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,21 @@
1
+ Rails.application.routes.draw do
2
+
3
+ scope PluginRoutes.system_info["relative_url_root"] do
4
+ #Admin Panel
5
+ scope :admin, as: 'admin', path: PluginRoutes.system_info['admin_path_name'] do
6
+ namespace 'plugins' do
7
+ namespace 'camaleon_spree' do
8
+ controller :admin do
9
+ get :settings
10
+ post :save_settings
11
+ end
12
+ end
13
+ end
14
+ end
15
+
16
+ # main routes
17
+ #scope 'nico_chale', module: 'plugins/nico_chale/', as: 'nico_chale' do
18
+ # Here my routes for main routes
19
+ #end
20
+ end
21
+ end
@@ -0,0 +1,15 @@
1
+ class AddCamaleonUserDataToSpree < ActiveRecord::Migration
2
+ def change
3
+ add_column(CamaleonCms::User.table_name, :email, :string) unless column_exists?(CamaleonCms::User.table_name, :email)
4
+ add_column(CamaleonCms::User.table_name, :role, :string, default: 'client', index: true) unless column_exists?(CamaleonCms::User.table_name, :role)
5
+ add_column(CamaleonCms::User.table_name, :parent_id, :integer) unless column_exists?(CamaleonCms::User.table_name, :parent_id)
6
+ add_column(CamaleonCms::User.table_name, :site_id, :integer, index: true, default: -1) unless column_exists?(CamaleonCms::User.table_name, :site_id)
7
+ add_column(CamaleonCms::User.table_name, :auth_token, :string) unless column_exists?(CamaleonCms::User.table_name, :auth_token)
8
+ add_column CamaleonCms::User.table_name, :first_name, :string unless column_exists?(CamaleonCms::User.table_name, :first_name)
9
+ add_column CamaleonCms::User.table_name, :last_name, :string unless column_exists?(CamaleonCms::User.table_name, :last_name)
10
+
11
+ Spree::User.includes(:spree_roles).where(spree_roles: {name: 'admin'}).each do |s_user|
12
+ s_user.update_column(:role, 'admin')
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,4 @@
1
+ require "camaleon_spree/engine"
2
+
3
+ module CamaleonSpree
4
+ end
@@ -0,0 +1,4 @@
1
+ module CamaleonSpree
2
+ class Engine < ::Rails::Engine
3
+ end
4
+ end
@@ -0,0 +1,3 @@
1
+ module CamaleonSpree
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :camaleon_spree do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: camaleon_spree
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Owen Peredo
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-01-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sqlite3
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Permit to integrate Camaleon CMS + Spree Commerce
42
+ email:
43
+ - owenperedo@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - MIT-LICENSE
49
+ - Rakefile
50
+ - app/assets/javascripts/plugins/camaleon_spree/main.js
51
+ - app/assets/stylesheets/plugins/camaleon_spree/custom.css.scss
52
+ - app/assets/stylesheets/plugins/camaleon_spree/main.css
53
+ - app/controllers/plugins/camaleon_spree/admin_controller.rb
54
+ - app/helpers/plugins/camaleon_spree/main_helper.rb
55
+ - app/plugins/camaleon_spree/product_decorator.rb
56
+ - app/views/camaleon_cms/admin/installers/welcome.html.erb
57
+ - app/views/plugins/camaleon_spree/admin/_render_custom_fields_product.html.erb
58
+ - app/views/plugins/camaleon_spree/admin/cama_plugin_settings.html.erb
59
+ - app/views/plugins/camaleon_spree/admin/custom_field/_spree_categories.html.erb
60
+ - app/views/plugins/camaleon_spree/admin/custom_field/_spree_products.html.erb
61
+ - app/views/plugins/camaleon_spree/admin/settings.html.erb
62
+ - app/views/plugins/camaleon_spree/examples/_layout_menus.html.erb
63
+ - app/views/plugins/camaleon_spree/examples/_product_custom_fields.html.erb
64
+ - app/views/plugins/camaleon_spree/examples/template_product_page.html.erb
65
+ - config/camaleon_plugin.json
66
+ - config/initializers/bread_crumb_onrails.rb
67
+ - config/initializers/camaleon.rb
68
+ - config/initializers/routes.rb
69
+ - config/initializers/spree.rb
70
+ - config/initializers/will_paginate.rb
71
+ - config/routes.rb
72
+ - db/migrate/20160831160611_add_camaleon_user_data_to_spree.rb
73
+ - lib/camaleon_spree.rb
74
+ - lib/camaleon_spree/engine.rb
75
+ - lib/camaleon_spree/version.rb
76
+ - lib/tasks/camaleon_spree_tasks.rake
77
+ homepage: ''
78
+ licenses:
79
+ - MIT
80
+ metadata: {}
81
+ post_install_message:
82
+ rdoc_options: []
83
+ require_paths:
84
+ - lib
85
+ required_ruby_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ requirements: []
96
+ rubyforge_project:
97
+ rubygems_version: 2.4.8
98
+ signing_key:
99
+ specification_version: 4
100
+ summary: Permit to integrate Camaleon CMS + Spree Commerce
101
+ test_files: []
102
+ has_rdoc: