jiffyshirts_spree_reviews 2.3.1.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.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.rspec +1 -0
- data/.travis.yml +11 -0
- data/Gemfile +6 -0
- data/Guardfile +9 -0
- data/LICENSE.md +26 -0
- data/README.md +54 -0
- data/Rakefile +15 -0
- data/app/assets/images/store/reviews/delete.gif +0 -0
- data/app/assets/images/store/reviews/star.gif +0 -0
- data/app/assets/javascripts/spree/backend/jiffyshirts_spree_reviews.js +7 -0
- data/app/assets/javascripts/spree/frontend/jiffyshirts_spree_reviews.js +7 -0
- data/app/assets/stylesheets/spree/backend/jiffyshirts_spree_reviews.css +3 -0
- data/app/assets/stylesheets/spree/frontend/jiffyshirts_spree_reviews.css.erb +83 -0
- data/app/controllers/spree/admin/feedback_reviews_controller.rb +6 -0
- data/app/controllers/spree/admin/review_settings_controller.rb +21 -0
- data/app/controllers/spree/admin/reviews_controller.rb +34 -0
- data/app/controllers/spree/feedback_reviews_controller.rb +41 -0
- data/app/controllers/spree/products_controller_decorator.rb +5 -0
- data/app/controllers/spree/reviews_controller.rb +48 -0
- data/app/helpers/spree/reviews_helper.rb +17 -0
- data/app/models/spree/feedback_review.rb +17 -0
- data/app/models/spree/product_decorator.rb +21 -0
- data/app/models/spree/review.rb +36 -0
- data/app/models/spree/reviews_ability.rb +17 -0
- data/app/models/spree/reviews_configuration.rb +23 -0
- data/app/overrides/add_reviews_after_product_properties.rb +5 -0
- data/app/overrides/add_reviews_tab_to_admin.rb +4 -0
- data/app/overrides/add_reviews_to_admin_configuration_sidebar.rb +5 -0
- data/app/overrides/fix_highlighting_of_products_tab.rb +5 -0
- data/app/views/spree/admin/feedback_reviews/index.html.erb +44 -0
- data/app/views/spree/admin/review_settings/edit.html.erb +40 -0
- data/app/views/spree/admin/reviews/_form.html.erb +22 -0
- data/app/views/spree/admin/reviews/edit.html.erb +26 -0
- data/app/views/spree/admin/reviews/index.html.erb +111 -0
- data/app/views/spree/feedback_reviews/_form.html.erb +13 -0
- data/app/views/spree/feedback_reviews/_summary.html.erb +6 -0
- data/app/views/spree/feedback_reviews/create.js.erb +7 -0
- data/app/views/spree/reviews/_form.html.erb +27 -0
- data/app/views/spree/reviews/_stars.html.erb +13 -0
- data/app/views/spree/reviews/index.html.erb +1 -0
- data/app/views/spree/reviews/new.html.erb +3 -0
- data/app/views/spree/shared/_rating.html.erb +15 -0
- data/app/views/spree/shared/_review.html.erb +24 -0
- data/app/views/spree/shared/_review_summary.html.erb +9 -0
- data/app/views/spree/shared/_reviews.html.erb +15 -0
- data/app/views/spree/shared/_shortrating.html.erb +9 -0
- data/config/initializers/constants.rb +1 -0
- data/config/initializers/load_preferences.rb +5 -0
- data/config/locales/de-CH.yml +67 -0
- data/config/locales/de.yml +67 -0
- data/config/locales/en-GB.yml +67 -0
- data/config/locales/en.yml +65 -0
- data/config/locales/es.yml +67 -0
- data/config/locales/fr.yml +67 -0
- data/config/locales/pl.yml +71 -0
- data/config/locales/pt-BR.yml +67 -0
- data/config/locales/pt.yml +68 -0
- data/config/locales/ro.yml +75 -0
- data/config/locales/ru.yml +73 -0
- data/config/locales/sv.yml +65 -0
- data/config/locales/tr.yml +67 -0
- data/config/routes.rb +17 -0
- data/db/migrate/20081020220724_create_reviews.rb +21 -0
- data/db/migrate/20101222083309_create_feedback_reviews.rb +17 -0
- data/db/migrate/20110406083603_add_rating_to_products.rb +21 -0
- data/db/migrate/20110606150524_add_user_to_reviews.rb +9 -0
- data/db/migrate/20110806093221_add_ip_address_to_reviews.rb +9 -0
- data/db/migrate/20120110172331_namespace_tables.rb +6 -0
- data/db/migrate/20120123141326_recalculate_ratings.rb +20 -0
- data/db/migrate/20120712182514_add_locale_to_reviews.rb +9 -0
- data/db/migrate/20120712182627_add_locale_to_feedback_reviews.rb +9 -0
- data/db/sample/ratings.yml +16 -0
- data/db/sample/reviews.yml +59 -0
- data/jiffyshirts_spree_reviews.gemspec +31 -0
- data/lib/generators/jiffyshirts_spree_reviews/install/install_generator.rb +30 -0
- data/lib/jiffyshirts_spree_reviews/engine.rb +23 -0
- data/lib/jiffyshirts_spree_reviews.rb +4 -0
- data/script/rails +5 -0
- data/spec/controllers/admin/feedback_reviews_controller_spec.rb +29 -0
- data/spec/controllers/admin/review_settings_controller_spec.rb +57 -0
- data/spec/controllers/admin/reviews_controller_spec.rb +63 -0
- data/spec/controllers/feedback_reviews_controller_spec.rb +71 -0
- data/spec/controllers/products_controller_spec.rb +9 -0
- data/spec/controllers/reviews_controller_spec.rb +136 -0
- data/spec/factories/feedback_review_factory.rb +8 -0
- data/spec/factories/review_factory.rb +15 -0
- data/spec/features/admin_spec.rb +35 -0
- data/spec/features/reviews_spec.rb +106 -0
- data/spec/helpers/review_helper_spec.rb +28 -0
- data/spec/models/feedback_review_spec.rb +78 -0
- data/spec/models/product_spec.rb +62 -0
- data/spec/models/review_spec.rb +169 -0
- data/spec/models/reviews_ability_spec.rb +46 -0
- data/spec/models/reviews_configuration_spec.rb +45 -0
- data/spec/spec_helper.rb +48 -0
- data/vendor/assets/javascripts/jquery.rating.js +376 -0
- metadata +339 -0
@@ -0,0 +1,40 @@
|
|
1
|
+
<%= render 'spree/admin/shared/configuration_menu' %>
|
2
|
+
|
3
|
+
<% content_for :page_title do %>
|
4
|
+
<%= Spree.t("spree_reviews.review_settings") %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<%= form_tag(admin_review_settings_path, :method => :put) do %>
|
8
|
+
<fieldset class="no-border-top">
|
9
|
+
<div class="field">
|
10
|
+
<%= check_box_tag('preferences[include_unapproved_reviews]', "1", Spree::Reviews::Config[:include_unapproved_reviews]) %>
|
11
|
+
<label><%= Spree.t("spree_reviews.include_unapproved") %></label>
|
12
|
+
</div>
|
13
|
+
<div class="field">
|
14
|
+
<%= check_box_tag('preferences[feedback_rating]', "1", Spree::Reviews::Config[:feedback_rating]) %>
|
15
|
+
<label><%= Spree.t("spree_reviews.feedback_rating") %></label>
|
16
|
+
</div>
|
17
|
+
<div class="field">
|
18
|
+
<%= check_box_tag('preferences[show_email]', "1", Spree::Reviews::Config[:show_email]) %>
|
19
|
+
<label><%= Spree.t("spree_reviews.show_email") %></label>
|
20
|
+
</div>
|
21
|
+
<div class="field">
|
22
|
+
<%= check_box_tag('preferences[require_login]', "1", Spree::Reviews::Config[:require_login]) %>
|
23
|
+
<label><%= Spree.t("spree_reviews.require_login") %></label>
|
24
|
+
</div>
|
25
|
+
<div class="field">
|
26
|
+
<%= check_box_tag('preferences[track_locale]', "1", Spree::Reviews::Config[:track_locale]) %>
|
27
|
+
<label><%= Spree.t("spree_reviews.track_locale") %></label>
|
28
|
+
</div>
|
29
|
+
<div class="field">
|
30
|
+
<label><%= Spree.t('spree_reviews.preview_size') %></label><br>
|
31
|
+
<%= text_field_tag('preferences[preview_size]', Spree::Reviews::Config[:preview_size], :size => 3) %>
|
32
|
+
</div>
|
33
|
+
|
34
|
+
<div class="form-buttons filter-actions actions" data-hook="buttons">
|
35
|
+
<%= button Spree.t('actions.update'), 'icon-refresh' %>
|
36
|
+
<span class="or"><%= Spree.t(:or) %></span>
|
37
|
+
<%= link_to_with_icon 'icon-remove', Spree.t('actions.cancel'), edit_admin_general_settings_url, :class => 'button' %>
|
38
|
+
</div>
|
39
|
+
</fieldset>
|
40
|
+
<% end %>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<%= render "spree/shared/error_messages", :target => @review %>
|
2
|
+
<%= f.field_container :name do %>
|
3
|
+
<%= f.label :name %><br />
|
4
|
+
<%= f.text_field :name, :maxlength => "255", :size => "60" %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<%= f.field_container :title do %>
|
8
|
+
<%= f.label :title %><br />
|
9
|
+
<%= f.text_field :title, :maxlength => "255", :size => "60" %>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
<%= f.field_container :review do %>
|
13
|
+
<%= f.label :review %><br />
|
14
|
+
<%= f.text_area :review, :wrap => "virtual", :rows => "10", :cols => "60" %>
|
15
|
+
<% end %>
|
16
|
+
|
17
|
+
<% if Spree::Reviews::Config[:track_locale] %>
|
18
|
+
<%= f.field_container :locale do %>
|
19
|
+
<%= f.label :locale %><br />
|
20
|
+
<%= f.select :locale, I18n.available_locales.map { |lc| [t(lc, :default => lc.to_s), lc.to_s] } %>
|
21
|
+
<% end %>
|
22
|
+
<% end %>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<% content_for :page_title do %>
|
2
|
+
<%= Spree.t(:editing_review_for_html, :link => link_to(@review.product.name, product_path(@review.product))) %>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<% render 'spree/admin/shared/product_sub_menu' %>
|
6
|
+
|
7
|
+
<%= form_for([:admin, @review]) do |f| %>
|
8
|
+
<div class="alpha eight columns">
|
9
|
+
<% unless @review.title.blank? %>
|
10
|
+
<h2><%= @review.title %></h2>
|
11
|
+
<% end %>
|
12
|
+
<p>
|
13
|
+
<%= simple_format(@review.review) %>
|
14
|
+
</p>
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<div class="omega eight columns">
|
18
|
+
<%= render 'form', :f => f %>
|
19
|
+
</div>
|
20
|
+
|
21
|
+
<div class="clear"></div>
|
22
|
+
|
23
|
+
<fieldset class="no-border-top">
|
24
|
+
<%= render 'spree/admin/shared/edit_resource_links' %>
|
25
|
+
</fieldset>
|
26
|
+
<% end %>
|
@@ -0,0 +1,111 @@
|
|
1
|
+
<% content_for :page_title do %>
|
2
|
+
<%= Spree.t('reviews') %>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<% render 'spree/admin/shared/product_sub_menu' %>
|
6
|
+
|
7
|
+
<% content_for :table_filter_title do %>
|
8
|
+
<%= Spree.t('search') %>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<% content_for :table_filter do %>
|
12
|
+
<div data-hook="admin_reviews_index_search">
|
13
|
+
|
14
|
+
<%= search_form_for [:admin, @search] do |f| %>
|
15
|
+
<div class="alpha three columns">
|
16
|
+
<div class="field">
|
17
|
+
<%= label_tag nil, Spree.t(:user) %><br />
|
18
|
+
<%= f.text_field :name_cont, :size => 25 %>
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
|
22
|
+
<div class="seven columns">
|
23
|
+
<div class="field">
|
24
|
+
<%= label_tag nil, Spree.t(:title) -%><br/>
|
25
|
+
<%= f.text_field :title_cont, :size => 25 -%>
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
|
29
|
+
<div class="four columns">
|
30
|
+
<div class="field">
|
31
|
+
<%= label_tag nil, Spree.t(:review) -%><br/>
|
32
|
+
<%= f.text_field :review_cont, :size => 25 -%>
|
33
|
+
</div>
|
34
|
+
</div>
|
35
|
+
|
36
|
+
<div class="two columns omega">
|
37
|
+
<div class="field">
|
38
|
+
<%= label_tag nil, Spree.t(:approval_status)-%><br/>
|
39
|
+
<%= f.select :approved_eq, [[Spree.t('all'), nil], [Spree.t('approved_reviews'), true], [Spree.t('unapproved_reviews'), false]] -%>
|
40
|
+
</div>
|
41
|
+
</div>
|
42
|
+
|
43
|
+
<div class="clear"></div>
|
44
|
+
|
45
|
+
<div class="form-buttons actions filter-actions" data-hook="admin_reviews_index_search_buttons">
|
46
|
+
<%= button Spree.t(:search), 'icon-search' %>
|
47
|
+
</div>
|
48
|
+
<%- end -%>
|
49
|
+
</div>
|
50
|
+
<%- end -%>
|
51
|
+
|
52
|
+
<% paginate @reviews %>
|
53
|
+
|
54
|
+
<% if @reviews.any? %>
|
55
|
+
<table class="index">
|
56
|
+
<colgroup>
|
57
|
+
<col style="width: 25%;">
|
58
|
+
<col style="width: 10%;">
|
59
|
+
<col style="width: 10%;">
|
60
|
+
<col style="width: 20%;">
|
61
|
+
<col style="width: 15%;">
|
62
|
+
<col style="width: 17%;">
|
63
|
+
</colgroup>
|
64
|
+
<thead>
|
65
|
+
<tr>
|
66
|
+
<th><%= Spree.t('product') %></th>
|
67
|
+
<th><%= Spree::Review.human_attribute_name(:rating) %></th>
|
68
|
+
<th><%= Spree.t('feedback') %></th>
|
69
|
+
<th><%= Spree::Review.human_attribute_name(:user) %></th>
|
70
|
+
<th><%= Spree::Review.human_attribute_name(:created_at) %></th>
|
71
|
+
</tr>
|
72
|
+
</thead>
|
73
|
+
<tbody>
|
74
|
+
<%- @reviews.each do |review| -%>
|
75
|
+
<tr id="<%= dom_id review %>">
|
76
|
+
<td>
|
77
|
+
<% if review.product %>
|
78
|
+
<%= link_to review.product.name, product_path(review.product) %>
|
79
|
+
<% end %>
|
80
|
+
</td>
|
81
|
+
<td class="align-center">
|
82
|
+
<%= txt_stars(review.rating) %>
|
83
|
+
</td>
|
84
|
+
<td class="align-center">
|
85
|
+
<%= link_to "(#{review.feedback_stars}/#{review.feedback_reviews.size})", admin_review_feedback_reviews_path(review) %>
|
86
|
+
</td>
|
87
|
+
<td class="align-center">
|
88
|
+
<%= review.user_id ? link_to(review.user.try(:email), [:admin, review.user]) : Spree.t(:anonymous) %></p>
|
89
|
+
<p><%= Spree::Review.human_attribute_name(:ip_address) %>: <%= review.ip_address ? link_to(review.ip_address, "http://whois.domaintools.com/#{review.ip_address}") : '-' %></p>
|
90
|
+
</td>
|
91
|
+
<td class="align-center">
|
92
|
+
<%= l review.created_at, :format => :short %>
|
93
|
+
</td>
|
94
|
+
<td class="actions">
|
95
|
+
<%= link_to_with_icon 'check', Spree.t('approve'), approve_admin_review_url(review), :no_text => true, class: 'approve' unless review.approved %>
|
96
|
+
|
97
|
+
<%= link_to_edit review, :no_text => true, :class => 'edit' %>
|
98
|
+
|
99
|
+
<%= link_to_delete review, :no_text => true %>
|
100
|
+
</td>
|
101
|
+
</tr>
|
102
|
+
<% end %>
|
103
|
+
</tbody>
|
104
|
+
</table>
|
105
|
+
<% else %>
|
106
|
+
<div class="no-objects-found">
|
107
|
+
<%= Spree.t(:no_results) %>
|
108
|
+
</div>
|
109
|
+
<% end %>
|
110
|
+
|
111
|
+
<%= paginate @reviews -%>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<%= render 'spree/feedback_reviews/summary', :review => review %>
|
2
|
+
<%= form_for((@feedback_review ||= review.feedback_reviews.build), :url => feedback_reviews_path(review), :method => :post, :remote => true) do |f| %>
|
3
|
+
<% unless @feedback_review.errors.empty? %>
|
4
|
+
<span class="error"><%= @feedback_review.errors[:rating] %></span>
|
5
|
+
<br />
|
6
|
+
<% end %>
|
7
|
+
<%= Spree.t(:was_this_review_helpful) %>
|
8
|
+
<% for i in 1..NB_STARS %>
|
9
|
+
<%= radio_button_tag "feedback_review[rating]",
|
10
|
+
Spree.t('star', :count => i), false, :class => "star" %>
|
11
|
+
<% end %>
|
12
|
+
<button class="feedback-review"><span><%= Spree.t(:say_yes) %></span></button>
|
13
|
+
<% end %>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<% if @feedback_review.valid? %>
|
2
|
+
$("div#feedback_review_<%= @review.id %>").html("<%= escape_javascript(render('spree/feedback_reviews/summary', :review => @review)) %>");
|
3
|
+
<% else %>
|
4
|
+
$("div#feedback_review_<%= @review.id %>").html("<%= escape_javascript(render('spree/feedback_reviews/form', :review => @review)) %>");
|
5
|
+
|
6
|
+
<% end %>
|
7
|
+
$(document).ready(function(){$("div#feedback_review_<%= @review.id %>").find(".star").rating({required:true});});
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<%= form_for review, :url => product_reviews_path(product), :html => {:method => :post} do |f| %>
|
2
|
+
<%= render "spree/shared/error_messages", :target => review %>
|
3
|
+
|
4
|
+
<p class="review_rating_field">
|
5
|
+
<%= f.label :rating %> <span class="required">*</span><br />
|
6
|
+
<%= render "spree/reviews/stars", :stars => review.rating, :edit_enabled => true %>
|
7
|
+
</p>
|
8
|
+
|
9
|
+
<p class="review_name_field">
|
10
|
+
<%= f.label :name %> <span class="required">*</span><br />
|
11
|
+
<%= f.text_field :name, :maxlength => "255", :size => "50" %>
|
12
|
+
</p>
|
13
|
+
|
14
|
+
<p class="review_title_field">
|
15
|
+
<%= f.label :title %><br />
|
16
|
+
<%= f.text_field :title, :maxlength => "255", :size => "50" %>
|
17
|
+
</p>
|
18
|
+
|
19
|
+
<p class="review_review_field">
|
20
|
+
<%= f.label :review %> <span class="required">*</span><br />
|
21
|
+
<%= f.text_area :review, :wrap => "virtual", :rows => "10", :cols => "50" %>
|
22
|
+
</p>
|
23
|
+
|
24
|
+
<p class="review_submit">
|
25
|
+
<%= f.submit Spree.t(:submit_your_review), :class => "button bg_darkfirst" %>
|
26
|
+
</p>
|
27
|
+
<% end %>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<% if defined? edit_enabled
|
2
|
+
state = ""
|
3
|
+
name = "review[rating]"
|
4
|
+
else
|
5
|
+
state = 'disabled'
|
6
|
+
name = defined?(review).nil? ? Time.now.tv_usec.to_s : "review_#{review}"
|
7
|
+
end %>
|
8
|
+
<% for i in 1..NB_STARS %>
|
9
|
+
<input name="<%= name %>"
|
10
|
+
type="radio" class="star"
|
11
|
+
value="<%= pluralize(i, 'stars') %>" <%= state %>
|
12
|
+
<%= "checked" if i == stars %> />
|
13
|
+
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render 'spree/shared/reviews' %>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<% stars = product.stars %>
|
2
|
+
<% reviews_count = product.reviews_count %>
|
3
|
+
<div class="ratings">
|
4
|
+
<p><%= Spree.t('average_customer_rating') %>: </p>
|
5
|
+
<p class="ratings-stars">
|
6
|
+
<span title="<%= txt_stars(stars) %>">
|
7
|
+
<%= render 'spree/reviews/stars', :stars => stars %>
|
8
|
+
</span>
|
9
|
+
</p>
|
10
|
+
<p class="ratings-basedupon">(<%= Spree.t('based_upon_review_count', :count => reviews_count) %>)</p>
|
11
|
+
<div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">
|
12
|
+
<meta itemprop="ratingValue" content="<%= stars %>" />
|
13
|
+
<meta itemprop="reviewCount" content="<%= reviews_count %>" />
|
14
|
+
</div>
|
15
|
+
</div>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<div class="review" itemprop="reviews" itemscope itemtype="http://schema.org/Review">
|
2
|
+
<span class="reviews-rating" title="<%= txt_stars(review.rating) %>">
|
3
|
+
<%= render "spree/reviews/stars", :stars => review.rating %>
|
4
|
+
</span>
|
5
|
+
<span itemprop="name"><%= review.title %></span>
|
6
|
+
<br/>
|
7
|
+
<span class="attribution"><%= t('submitted_on') %> <strong><%= l review.created_at.to_date %></strong></span>
|
8
|
+
<meta itemprop="datePublished" content="<%= review.created_at.to_date.to_s %>" />
|
9
|
+
|
10
|
+
<meta itemprop="reviewRating" content="<%= review.rating %>" />
|
11
|
+
<% if Spree::Reviews::Config[:show_email] && review.user %>
|
12
|
+
<span itemprop="author"><%= review.user.email %></span>
|
13
|
+
<% else %>
|
14
|
+
<span itemprop="author"><%= review.name %></span>
|
15
|
+
<% end %>
|
16
|
+
<div itemprop="reviewBody">
|
17
|
+
<%= simple_format(review.review) %>
|
18
|
+
</div>
|
19
|
+
<% if Spree::Reviews::Config[:feedback_rating] && (!Spree::Reviews::Config[:require_login] || spree_current_user) %>
|
20
|
+
<div class="feedback_review" id="feedback_review_<%= review.id %>">
|
21
|
+
<%= render "spree/feedback_reviews/form", :review => review %>
|
22
|
+
</div>
|
23
|
+
<% end %>
|
24
|
+
</div>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<div id="reviews">
|
2
|
+
<%= render 'spree/shared/rating', :locals => @product, :review => 0 %>
|
3
|
+
<% for review in (Spree::Reviews::Config[:track_locale] ? @product.reviews.localized(I18n.locale) : @product.reviews).default_approval_filter.preview %>
|
4
|
+
<%= render 'spree/shared/review', :review => review %>
|
5
|
+
<% end %>
|
6
|
+
<% if Spree::Reviews::Config[:feedback_rating] && (!Spree::Reviews::Config[:require_login] || spree_current_user) %>
|
7
|
+
<%= link_to Spree.t('write_your_own_review'), new_product_review_path(@product), :class => "button" %>
|
8
|
+
<% end %>
|
9
|
+
</div>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<div id="reviews">
|
2
|
+
<h6 class="product-section-title"><%= Spree.t(:reviews) %></h6>
|
3
|
+
<% if Spree::Reviews::Config[:include_unapproved_reviews] == false and @product.reviews.approved.count == 0 %>
|
4
|
+
<p class="reviews-none"><%= Spree.t('no_reviews_available') %></p>
|
5
|
+
<% else %>
|
6
|
+
<%= render 'spree/shared/rating', :product => @product, :review => 0 %>
|
7
|
+
<% for review in (Spree::Reviews::Config[:track_locale] ? @product.reviews.localized(I18n.locale) : @product.reviews).default_approval_filter.preview %>
|
8
|
+
<%= render 'spree/shared/review', :review => review %>
|
9
|
+
<% end %>
|
10
|
+
<% end %>
|
11
|
+
<% if !Spree::Reviews::Config[:require_login] || spree_current_user %>
|
12
|
+
<%= link_to Spree.t('write_your_own_review'), new_product_review_path(@product), :class => "button",
|
13
|
+
:rel => "nofollow,noindex" %>
|
14
|
+
<% end %>
|
15
|
+
</div>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<% stars = product.stars %>
|
2
|
+
<% reviews_count = product.reviews_count %>
|
3
|
+
<span style="float:left;" title="<%= txt_stars(stars) %>">
|
4
|
+
<%= render 'spree/reviews/stars', :stars => stars %>
|
5
|
+
</span>
|
6
|
+
<span style="float:right;">
|
7
|
+
<%= Spree::Review.model_name.human(:count => reviews_count) %>
|
8
|
+
</span>
|
9
|
+
<br/>
|
@@ -0,0 +1 @@
|
|
1
|
+
NB_STARS = 10
|
@@ -0,0 +1,67 @@
|
|
1
|
+
---
|
2
|
+
de-CH:
|
3
|
+
activerecord:
|
4
|
+
attributes:
|
5
|
+
spree/review:
|
6
|
+
name: Name
|
7
|
+
title: Überschrift
|
8
|
+
review: Inhalt
|
9
|
+
rating: Bewertung
|
10
|
+
created_at: Erstellt am
|
11
|
+
ip_address: IP
|
12
|
+
user: Benutzer
|
13
|
+
locale: Sprache
|
14
|
+
models:
|
15
|
+
spree/review:
|
16
|
+
one: eine Rezension
|
17
|
+
other: "%{count} Rezensionen"
|
18
|
+
spree:
|
19
|
+
approve: Freischalten
|
20
|
+
approved_reviews: Freigeschaltete Rezensionen
|
21
|
+
approved_text: Freigeschalte Kommentare werden innerhalb von 1-2 Werktagen veröffentlicht.
|
22
|
+
average_customer_rating: Durchschnittliche Bewertung
|
23
|
+
back_reviews: Zurück zu den Rezensionen
|
24
|
+
based_upon_review_count:
|
25
|
+
one: basiert auf einer Rezension
|
26
|
+
other: "basiert auf %{count} Rezensionen"
|
27
|
+
by: Von
|
28
|
+
editing_review_for_html: 'Rezension über %{link} bearbeiten'
|
29
|
+
error_approve_review: Fehler bei der Freischaltung
|
30
|
+
error_no_product: Das rezensierte Produkt existiert nicht mehr.
|
31
|
+
feedback: Feedback
|
32
|
+
feedback_review_for: "Rezension: '%{review}'"
|
33
|
+
for: über
|
34
|
+
from: aus
|
35
|
+
info_approve_review: Die Rezension wurde freigeschaltet.
|
36
|
+
leave_us_a_review_for: "Ihre Rezension über %{name}"
|
37
|
+
no_reviews_available: "Es sind noch keine Rezensionen für dieses Produkt vorhanden."
|
38
|
+
out_of_5: "von 5"
|
39
|
+
rating: Bewertung
|
40
|
+
reviews: Rezensionen
|
41
|
+
admin:
|
42
|
+
tab:
|
43
|
+
review_management: Rezensionen
|
44
|
+
review_successfully_submitted: "Ihre Rezension wurde erfolgreich übertragen. Vielen Dank!"
|
45
|
+
spree_reviews:
|
46
|
+
feedback_rating: Feedback für Rezensionen erlauben
|
47
|
+
include_unapproved: Unveröffentlichte Rezensionen anzeigen
|
48
|
+
manage_review_settings: Einstellungen für die Darstellung von Rezensionen
|
49
|
+
preview_size: Größe der Vorschau
|
50
|
+
require_login: Login erforderlich
|
51
|
+
review_settings: Rezensionseinstellungen
|
52
|
+
show_email: E-Mail Adressen anzeigen
|
53
|
+
track_locale: Sprache des Benutzers tracken
|
54
|
+
star:
|
55
|
+
one: "ein Sternchen"
|
56
|
+
other: "%{count} Sternchen"
|
57
|
+
stars: Sternchen
|
58
|
+
submit_your_review: Rezension abschicken
|
59
|
+
submitted_on: Eingeschickt am
|
60
|
+
unapproved_reviews: Nicht freigeschaltete Rezensionen
|
61
|
+
voice:
|
62
|
+
one: "Eine Stimme"
|
63
|
+
other: "%{count} Stimmen"
|
64
|
+
was_this_review_helpful: War diese Rezension für Sie hilfreich?
|
65
|
+
write_your_own_review: Rezension schreiben
|
66
|
+
you_must_enter_value_for_rating: "Bitte geben Sie eine Bewertung an."
|
67
|
+
anonymous: Anonym
|
@@ -0,0 +1,67 @@
|
|
1
|
+
---
|
2
|
+
de:
|
3
|
+
activerecord:
|
4
|
+
attributes:
|
5
|
+
spree/review:
|
6
|
+
name: Name
|
7
|
+
title: Überschrift
|
8
|
+
review: Inhalt
|
9
|
+
rating: Bewertung
|
10
|
+
created_at: Erstellt am
|
11
|
+
ip_address: IP
|
12
|
+
user: Benutzer
|
13
|
+
locale: Sprache
|
14
|
+
models:
|
15
|
+
spree/review:
|
16
|
+
one: eine Rezension
|
17
|
+
other: "%{count} Rezensionen"
|
18
|
+
spree:
|
19
|
+
approve: Freischalten
|
20
|
+
approved_reviews: Freigeschaltete Rezensionen
|
21
|
+
approved_text: Freigeschalte Kommentare werden innerhalb von 1-2 Werktagen veröffentlicht.
|
22
|
+
average_customer_rating: Durchschnittliche Bewertung
|
23
|
+
back_reviews: Zurück zu den Rezensionen
|
24
|
+
based_upon_review_count:
|
25
|
+
one: basiert auf einer Rezension
|
26
|
+
other: "basiert auf %{count} Rezensionen"
|
27
|
+
by: Von
|
28
|
+
editing_review_for_html: 'Rezension über %{link} bearbeiten'
|
29
|
+
error_approve_review: Fehler bei der Freischaltung
|
30
|
+
error_no_product: Das rezensierte Produkt existiert nicht mehr.
|
31
|
+
feedback: Feedback
|
32
|
+
feedback_review_for: "Rezension: '%{review}'"
|
33
|
+
for: über
|
34
|
+
from: aus
|
35
|
+
info_approve_review: Die Rezension wurde freigeschaltet.
|
36
|
+
leave_us_a_review_for: "Ihre Rezension über %{name}"
|
37
|
+
no_reviews_available: "Es sind noch keine Rezensionen für dieses Produkt vorhanden."
|
38
|
+
out_of_5: "von 5"
|
39
|
+
rating: Bewertung
|
40
|
+
reviews: Rezensionen
|
41
|
+
admin:
|
42
|
+
tab:
|
43
|
+
review_management: Rezensionen
|
44
|
+
review_successfully_submitted: Ihre Rezension wurde erfolgreich übertragen. Vielen Dank!
|
45
|
+
spree_reviews:
|
46
|
+
feedback_rating: Feedback für Rezensionen erlauben
|
47
|
+
include_unapproved: Unveröffentlichte Rezensionen anzeigen
|
48
|
+
manage_review_settings: Einstellungen für die Darstellung von Rezensionen
|
49
|
+
preview_size: Größe der Vorschau
|
50
|
+
require_login: Login erforderlich
|
51
|
+
review_settings: Rezensionseinstellungen
|
52
|
+
show_email: E-Mail Adressen anzeigen
|
53
|
+
track_locale: Sprache des Benutzers tracken
|
54
|
+
star:
|
55
|
+
one: "ein Sternchen"
|
56
|
+
other: "%{count} Sternchen"
|
57
|
+
stars: Sternchen
|
58
|
+
submit_your_review: Rezension abschicken
|
59
|
+
submitted_on: Eingeschickt am
|
60
|
+
unapproved_reviews: Nicht freigeschaltete Rezensionen
|
61
|
+
voice:
|
62
|
+
one: "Eine Stimme"
|
63
|
+
other: "%{count} Stimmen"
|
64
|
+
was_this_review_helpful: War diese Rezension für Sie hilfreich?
|
65
|
+
write_your_own_review: Rezension schreiben
|
66
|
+
you_must_enter_value_for_rating: "Bitte geben Sie eine Bewertung an."
|
67
|
+
anonymous: Anonym
|
@@ -0,0 +1,67 @@
|
|
1
|
+
---
|
2
|
+
en-GB:
|
3
|
+
activerecord:
|
4
|
+
attributes:
|
5
|
+
spree/review:
|
6
|
+
name: Your Name
|
7
|
+
title: Title
|
8
|
+
review: Content
|
9
|
+
rating: Rating
|
10
|
+
created_at: Date
|
11
|
+
ip_address: IP
|
12
|
+
user: User
|
13
|
+
models:
|
14
|
+
spree/review:
|
15
|
+
one: one review
|
16
|
+
other: "%{count} reviews"
|
17
|
+
spree:
|
18
|
+
approve: Approve
|
19
|
+
approved_reviews: Approved
|
20
|
+
approved_text: Unlocked comments will be published within 1-2 business days.
|
21
|
+
average_customer_rating: Average rating
|
22
|
+
back_reviews: Back to the reviews
|
23
|
+
based_upon_review_count:
|
24
|
+
one: based upon one review
|
25
|
+
other: "based upon %{count} reviews"
|
26
|
+
by: by
|
27
|
+
editing_review_for_html: 'Editing review for %{link}'
|
28
|
+
error_approve_review: Error approving review
|
29
|
+
error_no_product: The reviewed product doesn't exist anymore
|
30
|
+
feedback: Feedback
|
31
|
+
feedback_review_for: "Review: '%{review}'"
|
32
|
+
for: for
|
33
|
+
from: from
|
34
|
+
info_approve_review: Review approved
|
35
|
+
leave_us_a_review_for: "Please leave us a review and a rating for our '%{name}'"
|
36
|
+
no_reviews_available: "No reviews have yet been written for this product."
|
37
|
+
out_of_5: "out of 5"
|
38
|
+
rating: rating
|
39
|
+
reviews: Reviews
|
40
|
+
admin:
|
41
|
+
tab:
|
42
|
+
review_management: Reviews
|
43
|
+
review_successfully_submitted: Review was successfully submitted
|
44
|
+
spree_reviews:
|
45
|
+
feedback_rating: Rate feedback
|
46
|
+
include_unapproved: Include unapproved reviews in listings
|
47
|
+
manage_review_settings: Control the display of reviews
|
48
|
+
preview_size: Size of the review snippets
|
49
|
+
require_login: Require user to be logged in
|
50
|
+
review_settings: Review Settings
|
51
|
+
show_email: Show email addresses
|
52
|
+
track_locale: Track user's locale
|
53
|
+
star:
|
54
|
+
one: "1"
|
55
|
+
other: "%{count}"
|
56
|
+
stars: Stars
|
57
|
+
submit_your_review: Submit your review
|
58
|
+
submitted_on: Submitted on
|
59
|
+
unapproved_reviews: Unapproved
|
60
|
+
voice:
|
61
|
+
one: "1 voice"
|
62
|
+
other: "%{count} voices"
|
63
|
+
was_this_review_helpful: "Was this review helpful to you?"
|
64
|
+
write_your_own_review: Write your own review
|
65
|
+
you_must_enter_value_for_rating: "You must enter a value for rating."
|
66
|
+
anonymous: Anonymous
|
67
|
+
|
@@ -0,0 +1,65 @@
|
|
1
|
+
---
|
2
|
+
en:
|
3
|
+
activerecord:
|
4
|
+
attributes:
|
5
|
+
spree/review:
|
6
|
+
name: Your Name
|
7
|
+
title: Title
|
8
|
+
review: Content
|
9
|
+
rating: Rating
|
10
|
+
created_at: Date
|
11
|
+
ip_address: IP
|
12
|
+
user: User
|
13
|
+
models:
|
14
|
+
spree/review:
|
15
|
+
one: one review
|
16
|
+
other: "%{count} reviews"
|
17
|
+
spree:
|
18
|
+
approve: Approve
|
19
|
+
approved_reviews: Approved
|
20
|
+
average_customer_rating: Average rating
|
21
|
+
back_reviews: Back to the reviews
|
22
|
+
based_upon_review_count:
|
23
|
+
one: based upon one review
|
24
|
+
other: "based upon %{count} reviews"
|
25
|
+
by: by
|
26
|
+
editing_review_for_html: 'Editing review for %{link}'
|
27
|
+
error_approve_review: Error approving review
|
28
|
+
error_no_product: The reviewed product doesn't exist anymore
|
29
|
+
feedback: Feedback
|
30
|
+
feedback_review_for: "Review: '%{review}'"
|
31
|
+
for: for
|
32
|
+
from: from
|
33
|
+
info_approve_review: Review approved
|
34
|
+
leave_us_a_review_for: "Please leave us a review and a rating for our '%{name}'"
|
35
|
+
no_reviews_available: "No reviews have been written for this product."
|
36
|
+
out_of_5: "out of 5"
|
37
|
+
rating: rating
|
38
|
+
reviews: Reviews
|
39
|
+
admin:
|
40
|
+
tab:
|
41
|
+
review_management: Reviews
|
42
|
+
review_successfully_submitted: Review was successfully submitted
|
43
|
+
spree_reviews:
|
44
|
+
feedback_rating: Rate feedback
|
45
|
+
include_unapproved: Include unapproved reviews in listings
|
46
|
+
manage_review_settings: Control the display of reviews
|
47
|
+
preview_size: Size of the review snippets
|
48
|
+
require_login: Require user to be logged in
|
49
|
+
review_settings: Review Settings
|
50
|
+
show_email: Show email addresses
|
51
|
+
track_locale: Track user's locale
|
52
|
+
star:
|
53
|
+
one: "1"
|
54
|
+
other: "%{count}"
|
55
|
+
stars: Stars
|
56
|
+
submit_your_review: Submit your review
|
57
|
+
submitted_on: Submitted on
|
58
|
+
unapproved_reviews: Unapproved
|
59
|
+
voice:
|
60
|
+
one: "1 voice"
|
61
|
+
other: "%{count} voices"
|
62
|
+
was_this_review_helpful: "Was this review helpful to you?"
|
63
|
+
write_your_own_review: Write your own review
|
64
|
+
you_must_enter_value_for_rating: "You must enter a value for rating."
|
65
|
+
anonymous: Anonymous
|