spree_core 0.30.2 → 0.40.0
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.
- data/app/controllers/admin/base_controller.rb +0 -31
- data/app/controllers/admin/orders_controller.rb +10 -9
- data/app/controllers/admin/overview_controller.rb +1 -1
- data/app/controllers/admin/products_controller.rb +8 -8
- data/app/controllers/admin/properties_controller.rb +1 -1
- data/app/controllers/admin/shipments_controller.rb +6 -3
- data/app/controllers/admin/shipping_methods_controller.rb +1 -1
- data/app/controllers/admin/tax_rates_controller.rb +2 -2
- data/app/controllers/admin/taxons_controller.rb +1 -2
- data/app/controllers/admin/users_controller.rb +7 -8
- data/app/controllers/admin/variants_controller.rb +2 -2
- data/app/controllers/countries_controller.rb +1 -1
- data/app/controllers/locale_controller.rb +1 -1
- data/app/controllers/spree/base_controller.rb +1 -117
- data/app/controllers/states_controller.rb +1 -1
- data/app/helpers/spree/base_helper.rb +1 -7
- data/app/helpers/taxons_helper.rb +2 -2
- data/app/models/app_configuration.rb +0 -3
- data/app/models/calculator/flat_percent_item_total.rb +2 -1
- data/app/models/calculator/vat.rb +1 -1
- data/app/models/creditcard.rb +1 -1
- data/app/models/gateway/authorize_net.rb +13 -2
- data/app/models/gateway/authorize_net_cim.rb +11 -0
- data/app/models/gateway/beanstream.rb +30 -7
- data/app/models/inventory_unit.rb +21 -31
- data/app/models/line_item.rb +7 -8
- data/app/models/order.rb +4 -1
- data/app/models/product_group.rb +4 -8
- data/app/models/property.rb +1 -3
- data/app/models/return_authorization.rb +6 -1
- data/app/models/state_event.rb +3 -3
- data/app/models/state_monitor.rb +16 -16
- data/app/models/taxon.rb +6 -7
- data/app/models/user.rb +4 -0
- data/app/views/admin/general_settings/edit.html.erb +0 -8
- data/app/views/admin/general_settings/show.html.erb +5 -10
- data/app/views/admin/images/_form.html.erb +1 -1
- data/app/views/admin/images/index.html.erb +1 -1
- data/app/views/admin/option_types/new.html.erb +1 -1
- data/app/views/admin/orders/_add_product.html.erb +3 -3
- data/app/views/admin/orders/_form.html.erb +3 -0
- data/app/views/admin/orders/_user_form.html.erb +1 -1
- data/app/views/admin/orders/index.html.erb +2 -2
- data/app/views/admin/orders/show.html.erb +3 -8
- data/app/views/admin/orders/user.html.erb +1 -1
- data/app/views/admin/product_groups/index.html.erb +1 -1
- data/app/views/admin/product_groups/show.html.erb +1 -1
- data/app/views/admin/products/index.html.erb +1 -1
- data/app/views/admin/return_authorizations/_form.html.erb +3 -1
- data/app/views/admin/shared/_address_form.html.erb +1 -1
- data/app/views/admin/shared/_configuration_menu.html.erb +11 -11
- data/app/views/admin/shared/_order_tabs.html.erb +12 -12
- data/app/views/admin/shared/_product_tabs.html.erb +6 -6
- data/app/views/admin/states/_state_list.html.erb +2 -2
- data/app/views/admin/taxonomies/_js_head.html.erb +6 -8
- data/app/views/admin/taxonomies/edit.html.erb +11 -11
- data/app/views/admin/taxonomies/get_children.json.erb +5 -5
- data/app/views/admin/taxons/available.js.erb +10 -10
- data/app/views/admin/taxons/selected.html.erb +13 -13
- data/app/views/admin/variants/index.html.erb +1 -1
- data/app/views/checkout/_address.html.erb +2 -2
- data/app/views/layouts/admin.html.erb +1 -2
- data/app/views/layouts/spree_application.html.erb +1 -2
- data/app/views/shared/_admin_head.html.erb +3 -3
- data/app/views/shared/_doc_and_xmlns.html.erb +2 -0
- data/app/views/shared/_filters.html.erb +3 -28
- data/app/views/taxons/show.html.erb +7 -5
- data/config/initializers/spree.rb +1 -19
- data/config/locales/en.yml +0 -2
- data/config/routes.rb +3 -5
- data/db/migrate/20091007134354_change_taxons_to_nested_set.rb +2 -2
- data/lib/product_filters.rb +10 -11
- data/lib/scopes/product.rb +15 -0
- data/lib/spree/mail_settings.rb +2 -4
- data/lib/spree/preference_access.rb +3 -3
- data/lib/spree_base.rb +116 -0
- data/lib/spree_core.rb +3 -1
- data/lib/spree_core/preferences/model_hooks.rb +1 -1
- data/lib/tasks/install.rake +0 -1
- data/public/javascripts/admin.js +0 -6
- data/public/javascripts/admin/checkouts/edit.js +41 -40
- data/public/javascripts/admin/orders/edit_form.js +5 -4
- data/public/javascripts/jquery.cookie.js +96 -0
- data/public/javascripts/jquery.delayedobserver.js +35 -0
- data/public/javascripts/jsTree/jquery.jstree.js +3510 -0
- data/public/javascripts/jsTree/themes/apple/d.png +0 -0
- data/public/javascripts/jsTree/themes/apple/style.css +60 -34
- data/public/javascripts/jsTree/themes/apple/throbber.gif +0 -0
- data/public/javascripts/taxonomy.js +150 -149
- data/public/stylesheets/admin/admin.css +0 -34
- metadata +36 -43
- data/app/controllers/password_resets_controller.rb +0 -48
- data/app/helpers/users_helper.rb +0 -13
- data/app/models/spree/alert.rb +0 -13
- data/app/views/admin/shared/_alert.html.erb +0 -6
- data/app/views/shared/_login.html.erb +0 -21
- data/app/views/shared/_user_form.html.erb +0 -17
- data/lib/spree/i18n_utils.rb +0 -47
- data/public/javascripts/jquery.js +0 -19
- data/public/javascripts/jrails.autocomplete.js +0 -274
- data/public/javascripts/jrails.js +0 -1
- data/public/javascripts/jsTree/jquery.tree.js +0 -2058
- data/public/javascripts/jsTree/plugins/jquery.tree.contextmenu.js +0 -129
- data/public/javascripts/jsTree/themes/apple/icons.png +0 -0
|
@@ -61,7 +61,7 @@ div.inner input[type=text], div.inner select { width: 80%; }
|
|
|
61
61
|
</p>
|
|
62
62
|
<p id="bcountry" class="field">
|
|
63
63
|
<%= bill_form.label :country_id, t(:country) %>
|
|
64
|
-
<span id="bcountry"><%= bill_form.collection_select :country_id,
|
|
64
|
+
<span id="bcountry"><%= bill_form.collection_select :country_id, Country.all, :id, :name, {}, {:class => 'required'} %></span>
|
|
65
65
|
<span class="req">*</span>
|
|
66
66
|
</p>
|
|
67
67
|
<p id="bphone" class="field">
|
|
@@ -140,7 +140,7 @@ div.inner input[type=text], div.inner select { width: 80%; }
|
|
|
140
140
|
</p>
|
|
141
141
|
<p id="scountry" class="field">
|
|
142
142
|
<%= ship_form.label :country_id, t(:country) %>
|
|
143
|
-
<span id="scountry"><%= ship_form.collection_select :country_id,
|
|
143
|
+
<span id="scountry"><%= ship_form.collection_select :country_id, Country.all, :id, :name, {}, {:class => 'required'} %></span>
|
|
144
144
|
<span class="req">*</span>
|
|
145
145
|
</p>
|
|
146
146
|
<p id="sphone" class="field">
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
<ul id="login-nav">
|
|
18
18
|
<li><%= t('logged_in_as') %>: <%= current_user.email %></li>
|
|
19
19
|
<li><%= link_to t('account'), edit_user_path(current_user) %></li>
|
|
20
|
-
<li><%= link_to t('logout'),
|
|
20
|
+
<li><%= link_to t('logout'), destroy_user_session_path %></li>
|
|
21
21
|
<li><%= link_to t('store'), products_path %></li>
|
|
22
22
|
</ul>
|
|
23
23
|
<% end %>
|
|
@@ -50,7 +50,6 @@
|
|
|
50
50
|
<div class="flash notice"><%= self.notice %></div>
|
|
51
51
|
<% end %>
|
|
52
52
|
|
|
53
|
-
<%= render :partial => 'admin/shared/alert', :collection => session[:alerts] %>
|
|
54
53
|
|
|
55
54
|
<%= yield %>
|
|
56
55
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
1
|
+
<%= render :partial => 'shared/doc_and_xmlns'%>
|
|
3
2
|
<head>
|
|
4
3
|
<%= hook :inside_head do %>
|
|
5
4
|
<%= render :partial => 'shared/head'%>
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
:product_search_basic_json => admin_products_url(:format => 'json', :json_format => 'basic', :limit => 10),
|
|
9
9
|
:user_search_basic_json => admin_users_url(:format => 'json', :json_format => 'basic', :limit => 10)
|
|
10
10
|
}.to_json) %>;
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
strings = <%= raw(
|
|
13
13
|
[:no_results, :type_to_search, :searching].
|
|
14
14
|
inject({}){|memo, item| {item => t(item) }}.to_json )
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
<% end %>
|
|
17
17
|
|
|
18
18
|
<%= stylesheet_link_tag 'admin/admin-reset', 'admin/grids', 'admin/admin-typography', 'admin/admin-forms', 'admin/admin-tables', 'admin/admin', 'admin/autocomplete', 'admin/token-input', :cache => 'admin-all' %>
|
|
19
|
-
<%= javascript_include_tag 'jquery-1.4.2.min.js', '
|
|
19
|
+
<%= javascript_include_tag 'jquery-1.4.2.min.js', 'rails', 'jquery-ui', 'jquery.suggest', 'jquery.tokeninput.js', 'jquery.delayedobserver.js', :cache => 'jquery-admin-plugins' %>
|
|
20
20
|
<%= javascript_include_tag('jquery.template') unless controller.controller_name == "overview" %>
|
|
21
21
|
<%= javascript_include_tag 'admin', 'nested-attribute', 'zone', 'calculator', 'gateway' %>
|
|
22
22
|
<%= javascript_tag "$ = jQuery;" %>
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
|
|
27
27
|
<%= stylesheet_link_tag '/javascripts/jquery.alerts/jquery.alerts.css' %>
|
|
28
28
|
<%= stylesheet_link_tag '/javascripts/jquery.alerts/jquery.alerts.spree.css' %>
|
|
29
|
-
<%#= stylesheet_link_tag 'jquery.autocomplete.css'
|
|
29
|
+
<%#= stylesheet_link_tag 'jquery.autocomplete.css'
|
|
30
30
|
%>
|
|
31
31
|
|
|
32
32
|
<%= javascript_tag "jQuery.alerts.dialogClass = 'spree';" %>
|
|
@@ -1,27 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
siblings = @taxon.parent.children
|
|
3
|
-
else
|
|
4
|
-
siblings = Taxonomy.all.map &:root
|
|
5
|
-
end
|
|
6
|
-
%>
|
|
7
|
-
|
|
8
|
-
<div id="taxonomies" class="sidebar-item">
|
|
9
|
-
<ul class="navigation-list">
|
|
10
|
-
<% siblings.each do |s| %>
|
|
11
|
-
<li<%= ' class="current"' if s == @taxon %>>
|
|
12
|
-
<% if s.parent %>
|
|
13
|
-
<%= link_to s.name, url_for(:taxon => s.id) %>
|
|
14
|
-
<% else %>
|
|
15
|
-
<%= link_to t("shop_by_taxonomy", :taxonomy => s.taxonomy.name.singularize), url_for(:taxon => s.id), :class => 'root' %>
|
|
16
|
-
<% end %>
|
|
17
|
-
</li>
|
|
18
|
-
<% end %>
|
|
19
|
-
</ul>
|
|
20
|
-
</div>
|
|
21
|
-
|
|
22
|
-
<%= form_for :search do |f| %>
|
|
1
|
+
<%= form_tag '', :method => :get do %>
|
|
23
2
|
<% params[:search] ||= {} %>
|
|
24
|
-
<input type="hidden" name="taxon" value="<%= @taxon.id %>"/>
|
|
25
3
|
<input type="hidden" name="per_page" value="<%= params[:per_page] %>"/>
|
|
26
4
|
|
|
27
5
|
<% filters = @taxon ? @taxon.applicable_filters : [ProductFilters.all_taxons] %>
|
|
@@ -34,19 +12,16 @@
|
|
|
34
12
|
<% labels.each do |nm,val| %>
|
|
35
13
|
<% label = "#{filter[:name]}_#{nm}".gsub(/\s+/,'_') %>
|
|
36
14
|
<li class="nowrap">
|
|
37
|
-
<%# had problems with the following, so am hard-coding it %>
|
|
38
|
-
<%# f.check_box "taxons_id_equals_any[]", {}, taxon.id %>
|
|
39
15
|
<input type="checkbox"
|
|
40
16
|
id="<%= label %>"
|
|
41
17
|
name="search[<%= filter[:scope].to_s %>][]"
|
|
42
18
|
value="<%= val %>"
|
|
43
|
-
<%= params[:search][filter[:scope]] && params[:search][filter[:scope]].include?(val.to_s) ? "checked" : "" %>
|
|
44
|
-
onclick="this.form.submit();"
|
|
45
|
-
/>
|
|
19
|
+
<%= params[:search][filter[:scope]] && params[:search][filter[:scope]].include?(val.to_s) ? "checked" : "" %> />
|
|
46
20
|
<label class="nowrap" for="<%= label %>"> <%= nm %> </label>
|
|
47
21
|
</li>
|
|
48
22
|
<% end %>
|
|
49
23
|
</ul>
|
|
50
24
|
</div>
|
|
51
25
|
<% end %>
|
|
26
|
+
<%= submit_tag t(:search), :name => nil %>
|
|
52
27
|
<% end %>
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
<h1><%= @taxon.name %></h1>
|
|
2
2
|
|
|
3
|
+
<% content_for :sidebar do %>
|
|
4
|
+
<%= hook :taxon_sidebar_navigation do %>
|
|
5
|
+
<%= render :partial => "shared/taxonomies" %>
|
|
6
|
+
<%= render(:partial => "shared/filters") if @taxon.children.empty? %>
|
|
7
|
+
<% end %>
|
|
8
|
+
<% end %>
|
|
9
|
+
|
|
3
10
|
<% if @taxon.children.empty? || !params[:keywords].blank? %>
|
|
4
11
|
<%= hook :taxon_products do %>
|
|
5
12
|
<%= render :partial => "shared/products", :locals => {:products => @products, :taxon => @taxon } %>
|
|
@@ -10,8 +17,3 @@
|
|
|
10
17
|
<% end %>
|
|
11
18
|
<% end %>
|
|
12
19
|
|
|
13
|
-
<% content_for :sidebar do %>
|
|
14
|
-
<%= hook :taxon_sidebar_navigation do %>
|
|
15
|
-
<%= render :partial => "shared/taxonomies" %>
|
|
16
|
-
<% end %>
|
|
17
|
-
<% end %>
|
|
@@ -22,24 +22,6 @@ end
|
|
|
22
22
|
# include Spree::Support::CoreExtensions::Array
|
|
23
23
|
#end
|
|
24
24
|
|
|
25
|
-
#RAILS3 TODO
|
|
26
|
-
# class ActiveRecord::Base
|
|
27
|
-
# # Ryan Bates - http://railscasts.com/episodes/112
|
|
28
|
-
# scope :conditions, lambda { |*args| where(args)}
|
|
29
|
-
#
|
|
30
|
-
# # general merging of conditions, names following the searchlogic pattern
|
|
31
|
-
# # conditions_all is a more descriptively named enhancement of the above
|
|
32
|
-
# scope :conditions_all, lambda { |*args| where([args].flatten)}
|
|
33
|
-
#
|
|
34
|
-
# # forming the disjunction of a list of conditions (as strings)
|
|
35
|
-
# scope :conditions_any, lambda { |*args|
|
|
36
|
-
# args = [args].flatten
|
|
37
|
-
# raise "non-strings in conditions_any" unless args.all? {|s| s.is_a? String}
|
|
38
|
-
# { where(args.map {|c| "(#{c})"}.join(" OR ")) }
|
|
39
|
-
# }
|
|
40
|
-
# end
|
|
41
|
-
|
|
42
|
-
|
|
43
25
|
String.class_eval do
|
|
44
26
|
include SpreeCore::Ext::String
|
|
45
|
-
end
|
|
27
|
+
end
|
data/config/locales/en.yml
CHANGED
|
@@ -880,8 +880,6 @@ en:
|
|
|
880
880
|
ssl_will_be_used_in_production_mode: "SSL will be used in production mode"
|
|
881
881
|
ssl_will_not_be_used_in_development_and_test_modes: "SSL will not be used in development and test mode if necessary."
|
|
882
882
|
ssl_will_not_be_used_in_production_mode: "SSL will not be used in production mode"
|
|
883
|
-
spree_alert_checking: "Check for Spree security and release alerts"
|
|
884
|
-
spree_alert_not_checking: "Not checking for Spree security and release alerts"
|
|
885
883
|
start: Start
|
|
886
884
|
start_date: Valid from
|
|
887
885
|
state: State
|
data/config/routes.rb
CHANGED
|
@@ -149,11 +149,7 @@ Rails.application.routes.draw do
|
|
|
149
149
|
end
|
|
150
150
|
end
|
|
151
151
|
|
|
152
|
-
resource :general_settings
|
|
153
|
-
collection do
|
|
154
|
-
post :dismiss_alert
|
|
155
|
-
end
|
|
156
|
-
end
|
|
152
|
+
resource :general_settings
|
|
157
153
|
|
|
158
154
|
resources :taxonomies do
|
|
159
155
|
member do
|
|
@@ -185,6 +181,8 @@ Rails.application.routes.draw do
|
|
|
185
181
|
resources :mail_methods
|
|
186
182
|
end
|
|
187
183
|
|
|
184
|
+
match '/admin' => 'admin/orders#index', :as => :admin
|
|
185
|
+
|
|
188
186
|
match '/content/cvv' => 'content#cvv'
|
|
189
187
|
|
|
190
188
|
#RAILS3 TODO - we should disable this by default
|
|
@@ -18,14 +18,14 @@ class ChangeTaxonsToNestedSet < ActiveRecord::Migration
|
|
|
18
18
|
# set left
|
|
19
19
|
node[left_column_name] = indices[scope.call(node)] += 1
|
|
20
20
|
# find
|
|
21
|
-
|
|
21
|
+
where("#{quoted_parent_column_name} = ?", node).order("position ASC").each{ |n| set_left_and_rights.call(n) }
|
|
22
22
|
# set right
|
|
23
23
|
node[right_column_name] = indices[scope.call(node)] += 1
|
|
24
24
|
node.save!
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
# Find root node(s)
|
|
28
|
-
|
|
28
|
+
where("#{quoted_parent_column_name} IS NULL").order("position ASC").each do |root_node|
|
|
29
29
|
# setup index for this scope
|
|
30
30
|
indices[scope.call(root_node)] ||= 0
|
|
31
31
|
set_left_and_rights.call(root_node)
|
data/lib/product_filters.rb
CHANGED
|
@@ -45,7 +45,7 @@ module ProductFilters
|
|
|
45
45
|
Product.scope :price_range_any,
|
|
46
46
|
lambda {|opts|
|
|
47
47
|
conds = opts.map {|o| ProductFilters.price_filter[:conds][o]}.reject {|c| c.nil?}
|
|
48
|
-
Product.scoped(:joins => :master).conditions_any(conds)
|
|
48
|
+
Product.scoped(:joins => :master).conditions_any(conds)
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
def ProductFilters.price_filter
|
|
@@ -79,17 +79,16 @@ module ProductFilters
|
|
|
79
79
|
Product.scope :brand_any,
|
|
80
80
|
lambda {|opts|
|
|
81
81
|
conds = opts.map {|o| ProductFilters.brand_filter[:conds][o]}.reject {|c| c.nil?}
|
|
82
|
-
Product.with_property(
|
|
82
|
+
Product.with_property("brand").conditions_any(conds)
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
def ProductFilters.brand_filter
|
|
86
86
|
brands = ProductProperty.find_all_by_property_id(@@brand_property).map(&:value).uniq
|
|
87
|
-
conds = Hash[*brands.map {|b| [b, "
|
|
88
|
-
|
|
89
|
-
{ :name => "All Brands",
|
|
87
|
+
conds = Hash[*brands.map {|b| [b, "product_properties.value = '#{b}'"]}.flatten]
|
|
88
|
+
{ :name => "Brands",
|
|
90
89
|
:scope => :brand_any,
|
|
91
90
|
:conds => conds,
|
|
92
|
-
:labels => (brands.sort
|
|
91
|
+
:labels => (brands.sort).map {|k| [k,k]}
|
|
93
92
|
}
|
|
94
93
|
end
|
|
95
94
|
end
|
|
@@ -97,7 +96,7 @@ module ProductFilters
|
|
|
97
96
|
# Example: a parametrized filter
|
|
98
97
|
# The filter above may show brands which aren't applicable to the current taxon,
|
|
99
98
|
# so this one only shows the brands that are relevant to a particular taxon and
|
|
100
|
-
# its
|
|
99
|
+
# its descendants.
|
|
101
100
|
#
|
|
102
101
|
# We don't have to give a new scope since the conditions here are a subset of the
|
|
103
102
|
# more general filter, so decoding will still work - as long as the filters on a
|
|
@@ -115,7 +114,7 @@ module ProductFilters
|
|
|
115
114
|
# the product properties model.
|
|
116
115
|
|
|
117
116
|
if Property.table_exists? && @@brand_property
|
|
118
|
-
Product.scope :selective_brand_any, lambda {|opts| Product.brand_any(opts)
|
|
117
|
+
Product.scope :selective_brand_any, lambda {|opts| Product.brand_any(opts) }
|
|
119
118
|
|
|
120
119
|
def ProductFilters.selective_brand_filter(taxon = nil)
|
|
121
120
|
if taxon.nil?
|
|
@@ -124,7 +123,7 @@ module ProductFilters
|
|
|
124
123
|
all_brands = ProductProperty.find_all_by_property_id(@@brand_property).map(&:value).uniq
|
|
125
124
|
scope = ProductProperty.scoped(:conditions => ["property_id = ?", @@brand_property]).
|
|
126
125
|
scoped(:joins => {:product => :taxons},
|
|
127
|
-
:conditions => ["taxons.id in (?)", [taxon] + taxon.
|
|
126
|
+
:conditions => ["taxons.id in (?)", [taxon] + taxon.descendants])
|
|
128
127
|
brands = scope.map {|p| p.value}
|
|
129
128
|
|
|
130
129
|
{ :name => "Applicable Brands",
|
|
@@ -159,12 +158,12 @@ module ProductFilters
|
|
|
159
158
|
|
|
160
159
|
# Filtering by the list of all taxons
|
|
161
160
|
#
|
|
162
|
-
# Similar idea as above, but we don't want the
|
|
161
|
+
# Similar idea as above, but we don't want the descendants' products, hence
|
|
163
162
|
# it uses one of the auto-generated scopes from SearchLogic.
|
|
164
163
|
#
|
|
165
164
|
# idea: expand the format to allow nesting of labels?
|
|
166
165
|
def ProductFilters.all_taxons
|
|
167
|
-
taxons = Taxonomy.all.map {|t| [t.root] + t.root.
|
|
166
|
+
taxons = Taxonomy.all.map {|t| [t.root] + t.root.descendants }.flatten
|
|
168
167
|
{ :name => "All taxons",
|
|
169
168
|
:scope => :taxons_id_equals_any,
|
|
170
169
|
:labels => taxons.sort_by(&:name).map {|t| [t.name, t.id]},
|
data/lib/scopes/product.rb
CHANGED
|
@@ -44,6 +44,21 @@ module Scopes::Product
|
|
|
44
44
|
:with_ids => :product_picker_field
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
# Ryan Bates - http://railscasts.com/episodes/112
|
|
48
|
+
# general merging of conditions, names following the searchlogic pattern
|
|
49
|
+
::Product.scope :conditions, lambda { |*args| {:conditions => args}}
|
|
50
|
+
# conditions_all is a more descriptively named enhancement of the above
|
|
51
|
+
::Product.scope :conditions_all, lambda { |*args| {:conditions => [args].flatten}}
|
|
52
|
+
|
|
53
|
+
# forming the disjunction of a list of conditions (as strings)
|
|
54
|
+
::Product.scope :conditions_any, lambda { |*args|
|
|
55
|
+
args = [args].flatten
|
|
56
|
+
raise "non-strings in conditions_any" unless args.all? {|s| s.is_a? String}
|
|
57
|
+
{:conditions => args.map {|c| "(#{c})"}.join(" OR ")}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
47
62
|
#RAILS3 TODO - scopes are duplicated here and in model/product.rb - can we DRY it up?
|
|
48
63
|
# default product scope only lists available and non-deleted products
|
|
49
64
|
# ::Product.scope :not_deleted, lambda { where("products.deleted_at is null") }
|
data/lib/spree/mail_settings.rb
CHANGED
|
@@ -18,12 +18,10 @@ module Spree
|
|
|
18
18
|
mail_server_settings[:password] = mail_method.preferred_smtp_password
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
+
mail_server_settings[:enable_starttls_auto] = (mail_method.preferred_secure_connection_type == 'TLS')
|
|
22
|
+
|
|
21
23
|
ActionMailer::Base.smtp_settings = mail_server_settings
|
|
22
24
|
ActionMailer::Base.perform_deliveries = true
|
|
23
|
-
|
|
24
|
-
if mail_method.preferred_secure_connection_type == 'TLS'
|
|
25
|
-
mail_server_settings[:enable_starttls_auto] = true
|
|
26
|
-
end
|
|
27
25
|
else
|
|
28
26
|
#logger.warn "NOTICE: Mail not enabled"
|
|
29
27
|
ActionMailer::Base.perform_deliveries = false
|
|
@@ -6,7 +6,7 @@ module Spree::PreferenceAccess
|
|
|
6
6
|
key = key.to_s if key.is_a?(Symbol)
|
|
7
7
|
return nil unless config = self.instance
|
|
8
8
|
# preferences will be cached under the name of the class including this module (ex. Spree::Config)
|
|
9
|
-
prefs = Rails.cache.fetch(
|
|
9
|
+
prefs = Rails.cache.fetch("configuration_#{config.id}".to_sym) { config.preferences }
|
|
10
10
|
return prefs if key.nil?
|
|
11
11
|
prefs[key]
|
|
12
12
|
end
|
|
@@ -18,10 +18,10 @@ module Spree::PreferenceAccess
|
|
|
18
18
|
config.set_preference(key, value)
|
|
19
19
|
end
|
|
20
20
|
config.save
|
|
21
|
-
Rails.cache.delete(
|
|
21
|
+
Rails.cache.delete("configuration_#{config.id}".to_sym)
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
alias_method :[], :get
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
|
-
end
|
|
27
|
+
end
|
data/lib/spree_base.rb
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
module SpreeBase
|
|
2
|
+
module InstanceMethods
|
|
3
|
+
def access_forbidden
|
|
4
|
+
render :text => 'Access Forbidden', :layout => true, :status => 401
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
# can be used in views as well as controllers.
|
|
8
|
+
# e.g. <% title = 'This is a custom title for this view' %>
|
|
9
|
+
def title=(title)
|
|
10
|
+
@title = title
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def title
|
|
14
|
+
title_string = @title.blank? ? accurate_title : @title
|
|
15
|
+
if title_string.blank?
|
|
16
|
+
default_title
|
|
17
|
+
else
|
|
18
|
+
if Spree::Config[:always_put_site_name_in_title]
|
|
19
|
+
[default_title, title_string].join(' - ')
|
|
20
|
+
else
|
|
21
|
+
title_string
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
protected
|
|
27
|
+
|
|
28
|
+
def default_title
|
|
29
|
+
Spree::Config[:site_name]
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def accurate_title
|
|
33
|
+
return nil
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# def reject_unknown_object
|
|
37
|
+
# # workaround to catch problems with loading errors for permalink ids (reconsider RC permalink hack elsewhere?)
|
|
38
|
+
# begin
|
|
39
|
+
# load_object
|
|
40
|
+
# rescue Exception => e
|
|
41
|
+
# @object = nil
|
|
42
|
+
# end
|
|
43
|
+
# the_object = instance_variable_get "@#{object_name}"
|
|
44
|
+
# the_object = nil if (the_object.respond_to?(:deleted?) && the_object.deleted?)
|
|
45
|
+
# unless params[:id].blank? || the_object
|
|
46
|
+
# if self.respond_to? :object_missing
|
|
47
|
+
# self.object_missing(params[:id])
|
|
48
|
+
# else
|
|
49
|
+
# render_404(Exception.new("missing object in #{self.class.to_s}"))
|
|
50
|
+
# end
|
|
51
|
+
# end
|
|
52
|
+
# true
|
|
53
|
+
# end
|
|
54
|
+
|
|
55
|
+
def render_404(exception=nil)
|
|
56
|
+
respond_to do |type|
|
|
57
|
+
type.html { render :status => :not_found, :file => "#{Rails.root}/public/404.html", :layout=>nil}
|
|
58
|
+
type.all { render :status => :not_found, :nothing => true }
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
private
|
|
63
|
+
|
|
64
|
+
def redirect_back_or_default(default)
|
|
65
|
+
redirect_to(session["user_return_to"] || default)
|
|
66
|
+
session["user_return_to"] = nil
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def instantiate_controller_and_action_names
|
|
70
|
+
@current_action = action_name
|
|
71
|
+
@current_controller = controller_name
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def get_taxonomies
|
|
75
|
+
@taxonomies ||= Taxonomy.includes(:root => :children)
|
|
76
|
+
@taxonomies.reject { |t| t.root.nil? }
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def current_gateway
|
|
80
|
+
@current_gateway ||= Gateway.current
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
#RAILS 3 TODO
|
|
84
|
+
# # Load all models using STI to fix associations such as @order.credits giving no results and resulting in incorrect order totals
|
|
85
|
+
# def touch_sti_subclasses
|
|
86
|
+
# if Rails.env == 'development'
|
|
87
|
+
# load(File.join(SPREE_ROOT,'config/initializers/touch.rb'))
|
|
88
|
+
# end
|
|
89
|
+
# end
|
|
90
|
+
|
|
91
|
+
def set_user_language
|
|
92
|
+
locale = session[:locale] || Spree::Config[:default_locale]
|
|
93
|
+
locale = I18n.default_locale unless I18n.available_locales.include?(locale.to_sym)
|
|
94
|
+
I18n.locale = locale.to_sym
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def self.included(receiver)
|
|
99
|
+
#receiver.extend ClassMethods
|
|
100
|
+
receiver.send :include, InstanceMethods
|
|
101
|
+
receiver.send :layout, 'spree_application'
|
|
102
|
+
receiver.send :helper, 'hook'
|
|
103
|
+
receiver.send :before_filter, 'instantiate_controller_and_action_names'
|
|
104
|
+
# #RAILS 3 TODO
|
|
105
|
+
# #before_filter :touch_sti_subclasses
|
|
106
|
+
receiver.send :before_filter, 'set_user_language'
|
|
107
|
+
|
|
108
|
+
receiver.send :helper_method, 'title'
|
|
109
|
+
receiver.send :helper_method, 'title='
|
|
110
|
+
receiver.send :helper_method, 'get_taxonomies'
|
|
111
|
+
receiver.send :helper_method, 'current_gateway'
|
|
112
|
+
receiver.send :helper_method, 'current_order'
|
|
113
|
+
receiver.send :include, SslRequirement
|
|
114
|
+
receiver.send :include, Spree::CurrentOrder
|
|
115
|
+
end
|
|
116
|
+
end
|