solidus_reviews 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.rspec +2 -0
- data/.travis.yml +18 -0
- data/CONTRIBUTING.md +28 -0
- data/Gemfile +14 -0
- data/LICENSE.md +26 -0
- data/README.md +93 -0
- data/Rakefile +21 -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/solidus_reviews.js +7 -0
- data/app/assets/javascripts/spree/frontend/solidus_reviews.js +7 -0
- data/app/assets/stylesheets/spree/backend/solidus_reviews.css +3 -0
- data/app/assets/stylesheets/spree/frontend/solidus_reviews.scss +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 +26 -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/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 +34 -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 +28 -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/bin/rails +5 -0
- data/config/initializers/constants.rb +1 -0
- data/config/initializers/load_preferences.rb +5 -0
- data/config/locales/de-CH.yml +68 -0
- data/config/locales/de.yml +68 -0
- data/config/locales/en-GB.yml +68 -0
- data/config/locales/en.yml +67 -0
- data/config/locales/es.yml +68 -0
- data/config/locales/fr.yml +68 -0
- data/config/locales/pl.yml +72 -0
- data/config/locales/pt-BR.yml +68 -0
- data/config/locales/pt.yml +69 -0
- data/config/locales/ro.yml +76 -0
- data/config/locales/ru.yml +73 -0
- data/config/locales/sv.yml +66 -0
- data/config/locales/tr.yml +68 -0
- data/config/locales/uk.yml +75 -0
- data/config/locales/zh-CN.yml +65 -0
- data/config/locales/zh-TW.yml +65 -0
- data/config/routes.rb +17 -0
- data/db/migrate/20081020220724_create_reviews.rb +18 -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/migrate/20140703200946_add_show_identifier_to_reviews.rb +6 -0
- data/db/sample/ratings.yml +16 -0
- data/db/sample/reviews.yml +59 -0
- data/lib/generators/solidus_reviews/install/install_generator.rb +30 -0
- data/lib/solidus_reviews/factories/feedback_review_factory.rb +8 -0
- data/lib/solidus_reviews/factories/review_factory.rb +20 -0
- data/lib/solidus_reviews/factories.rb +5 -0
- data/lib/solidus_reviews.rb +6 -0
- data/lib/spree_reviews/engine.rb +17 -0
- data/solidus_reviews.gemspec +35 -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/features/admin_spec.rb +35 -0
- data/spec/features/reviews_spec.rb +122 -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 +168 -0
- data/spec/models/reviews_ability_spec.rb +46 -0
- data/spec/models/reviews_configuration_spec.rb +45 -0
- data/spec/spec_helper.rb +55 -0
- data/vendor/assets/javascripts/jquery.rating.js +376 -0
- metadata +357 -0
@@ -0,0 +1,44 @@
|
|
1
|
+
<% content_for :page_title do %>
|
2
|
+
<%= Spree.t('feedback_review_for', :review => @review.title) %>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<% content_for :page_actions do %>
|
6
|
+
<li><%= button_link_to Spree.t(:back_to_reviews), admin_reviews_path, { :icon => 'icon-arrow-left' } %></li>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<% render 'spree/admin/shared/product_sub_menu' %>
|
10
|
+
|
11
|
+
<% if @collection.any? %>
|
12
|
+
<table class="index">
|
13
|
+
<colgroup>
|
14
|
+
<col style="width: 30%;">
|
15
|
+
<col style="width: 20%;">
|
16
|
+
<col style="width: 20%;">
|
17
|
+
<col style="width: 17%;">
|
18
|
+
</colgroup>
|
19
|
+
<thead>
|
20
|
+
<tr>
|
21
|
+
<th><%= Spree.t('user') %></th>
|
22
|
+
<th><%= Spree.t('stars') %></th>
|
23
|
+
<th><%= Spree.t('date') %></th>
|
24
|
+
<th></th>
|
25
|
+
</tr>
|
26
|
+
</thead>
|
27
|
+
<tbody>
|
28
|
+
<%- @collection.each do |feedback| -%>
|
29
|
+
<tr id="<%= dom_id(feedback) %>">
|
30
|
+
<td><%= l feedback.created_at %></td>
|
31
|
+
<td><%= feedback.user.try(:login) || Spree.t(:anonymous) %></td>
|
32
|
+
<td><%= feedback.rating %></td>
|
33
|
+
<td class="actions">
|
34
|
+
<%= link_to_delete feedback, :no_text => true %>
|
35
|
+
</td>
|
36
|
+
</tr>
|
37
|
+
<% end %>
|
38
|
+
</tbody>
|
39
|
+
</table>
|
40
|
+
<% else %>
|
41
|
+
<div class="no-objects-found">
|
42
|
+
<%= Spree.t(:no_results) %>
|
43
|
+
</div>
|
44
|
+
<% end %>
|
@@ -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,34 @@
|
|
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
|
+
<% if Spree::Reviews::Config[:render_show_identifier_checkbox] %>
|
25
|
+
<p class="review_show_identifier_field">
|
26
|
+
<%= f.label :show_identifier %><br />
|
27
|
+
<%= f.check_box :show_identifier, :wrap => "virtual", :rows => "10", :cols => "50", :checked => true %>
|
28
|
+
</p>
|
29
|
+
<% end %>
|
30
|
+
|
31
|
+
<p class="review_submit">
|
32
|
+
<%= f.submit Spree.t(:submit_your_review), :class => "button bg_darkfirst" %>
|
33
|
+
</p>
|
34
|
+
<% 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,28 @@
|
|
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"><%= Spree.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 review.show_identifier %>
|
12
|
+
<% if Spree::Reviews::Config[:show_email] && review.user %>
|
13
|
+
<span itemprop="author"><%= review.user.email %></span>
|
14
|
+
<% else %>
|
15
|
+
<span itemprop="author"><%= review.name %></span>
|
16
|
+
<% end %>
|
17
|
+
<% else %>
|
18
|
+
<span itemprop="author"><%= Spree.t(:anonymous) %></span>
|
19
|
+
<% end %>
|
20
|
+
<div itemprop="reviewBody">
|
21
|
+
<%= simple_format(review.review) %>
|
22
|
+
</div>
|
23
|
+
<% if Spree::Reviews::Config[:feedback_rating] && (!Spree::Reviews::Config[:require_login] || spree_current_user) %>
|
24
|
+
<div class="feedback_review" id="feedback_review_<%= review.id %>">
|
25
|
+
<%= render "spree/feedback_reviews/form", :review => review %>
|
26
|
+
</div>
|
27
|
+
<% end %>
|
28
|
+
</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' %>
|
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/>
|
data/bin/rails
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
NB_STARS = 5
|
@@ -0,0 +1,68 @@
|
|
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
|
+
approval_status: Freischaltungsstatus
|
20
|
+
approve: Freischalten
|
21
|
+
approved_reviews: Freigeschaltete Rezensionen
|
22
|
+
approved_text: Freigeschalte Kommentare werden innerhalb von 1-2 Werktagen veröffentlicht.
|
23
|
+
average_customer_rating: Durchschnittliche Bewertung
|
24
|
+
back_reviews: Zurück zu den Rezensionen
|
25
|
+
based_upon_review_count:
|
26
|
+
one: basiert auf einer Rezension
|
27
|
+
other: "basiert auf %{count} Rezensionen"
|
28
|
+
by: Von
|
29
|
+
editing_review_for_html: 'Rezension über %{link} bearbeiten'
|
30
|
+
error_approve_review: Fehler bei der Freischaltung
|
31
|
+
error_no_product: Das rezensierte Produkt existiert nicht mehr.
|
32
|
+
feedback: Feedback
|
33
|
+
feedback_review_for: "Rezension: '%{review}'"
|
34
|
+
for: über
|
35
|
+
from: aus
|
36
|
+
info_approve_review: Die Rezension wurde freigeschaltet.
|
37
|
+
leave_us_a_review_for: "Ihre Rezension über %{name}"
|
38
|
+
no_reviews_available: "Es sind noch keine Rezensionen für dieses Produkt vorhanden."
|
39
|
+
out_of_5: "von 5"
|
40
|
+
rating: Bewertung
|
41
|
+
reviews: Rezensionen
|
42
|
+
admin:
|
43
|
+
tab:
|
44
|
+
review_management: Rezensionen
|
45
|
+
review_successfully_submitted: "Ihre Rezension wurde erfolgreich übertragen. Vielen Dank!"
|
46
|
+
spree_reviews:
|
47
|
+
feedback_rating: Feedback für Rezensionen erlauben
|
48
|
+
include_unapproved: Unveröffentlichte Rezensionen anzeigen
|
49
|
+
manage_review_settings: Einstellungen für die Darstellung von Rezensionen
|
50
|
+
preview_size: Größe der Vorschau
|
51
|
+
require_login: Login erforderlich
|
52
|
+
review_settings: Rezensionseinstellungen
|
53
|
+
show_email: E-Mail Adressen anzeigen
|
54
|
+
track_locale: Sprache des Benutzers tracken
|
55
|
+
star:
|
56
|
+
one: "ein Sternchen"
|
57
|
+
other: "%{count} Sternchen"
|
58
|
+
stars: Sternchen
|
59
|
+
submit_your_review: Rezension abschicken
|
60
|
+
submitted_on: Eingeschickt am
|
61
|
+
unapproved_reviews: Nicht freigeschaltete Rezensionen
|
62
|
+
voice:
|
63
|
+
one: "Eine Stimme"
|
64
|
+
other: "%{count} Stimmen"
|
65
|
+
was_this_review_helpful: War diese Rezension für Sie hilfreich?
|
66
|
+
write_your_own_review: Rezension schreiben
|
67
|
+
you_must_enter_value_for_rating: "Bitte geben Sie eine Bewertung an."
|
68
|
+
anonymous: Anonym
|
@@ -0,0 +1,68 @@
|
|
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
|
+
approval_status: Freischaltungsstatus
|
20
|
+
approve: Freischalten
|
21
|
+
approved_reviews: Freigeschaltete Rezensionen
|
22
|
+
approved_text: Freigeschalte Kommentare werden innerhalb von 1-2 Werktagen veröffentlicht.
|
23
|
+
average_customer_rating: Durchschnittliche Bewertung
|
24
|
+
back_reviews: Zurück zu den Rezensionen
|
25
|
+
based_upon_review_count:
|
26
|
+
one: basiert auf einer Rezension
|
27
|
+
other: "basiert auf %{count} Rezensionen"
|
28
|
+
by: Von
|
29
|
+
editing_review_for_html: 'Rezension über %{link} bearbeiten'
|
30
|
+
error_approve_review: Fehler bei der Freischaltung
|
31
|
+
error_no_product: Das rezensierte Produkt existiert nicht mehr.
|
32
|
+
feedback: Feedback
|
33
|
+
feedback_review_for: "Rezension: '%{review}'"
|
34
|
+
for: über
|
35
|
+
from: aus
|
36
|
+
info_approve_review: Die Rezension wurde freigeschaltet.
|
37
|
+
leave_us_a_review_for: "Ihre Rezension über %{name}"
|
38
|
+
no_reviews_available: "Es sind noch keine Rezensionen für dieses Produkt vorhanden."
|
39
|
+
out_of_5: "von 5"
|
40
|
+
rating: Bewertung
|
41
|
+
reviews: Rezensionen
|
42
|
+
admin:
|
43
|
+
tab:
|
44
|
+
review_management: Rezensionen
|
45
|
+
review_successfully_submitted: Ihre Rezension wurde erfolgreich übertragen. Vielen Dank!
|
46
|
+
spree_reviews:
|
47
|
+
feedback_rating: Feedback für Rezensionen erlauben
|
48
|
+
include_unapproved: Unveröffentlichte Rezensionen anzeigen
|
49
|
+
manage_review_settings: Einstellungen für die Darstellung von Rezensionen
|
50
|
+
preview_size: Größe der Vorschau
|
51
|
+
require_login: Login erforderlich
|
52
|
+
review_settings: Rezensionseinstellungen
|
53
|
+
show_email: E-Mail Adressen anzeigen
|
54
|
+
track_locale: Sprache des Benutzers tracken
|
55
|
+
star:
|
56
|
+
one: "ein Sternchen"
|
57
|
+
other: "%{count} Sternchen"
|
58
|
+
stars: Sternchen
|
59
|
+
submit_your_review: Rezension abschicken
|
60
|
+
submitted_on: Eingeschickt am
|
61
|
+
unapproved_reviews: Nicht freigeschaltete Rezensionen
|
62
|
+
voice:
|
63
|
+
one: "Eine Stimme"
|
64
|
+
other: "%{count} Stimmen"
|
65
|
+
was_this_review_helpful: War diese Rezension für Sie hilfreich?
|
66
|
+
write_your_own_review: Rezension schreiben
|
67
|
+
you_must_enter_value_for_rating: "Bitte geben Sie eine Bewertung an."
|
68
|
+
anonymous: Anonym
|
@@ -0,0 +1,68 @@
|
|
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
|
+
approval_status: Approval status
|
19
|
+
approve: Approve
|
20
|
+
approved_reviews: Approved
|
21
|
+
approved_text: Unlocked comments will be published within 1-2 business days.
|
22
|
+
average_customer_rating: Average rating
|
23
|
+
back_reviews: Back to the reviews
|
24
|
+
based_upon_review_count:
|
25
|
+
one: based upon one review
|
26
|
+
other: "based upon %{count} reviews"
|
27
|
+
by: by
|
28
|
+
editing_review_for_html: 'Editing review for %{link}'
|
29
|
+
error_approve_review: Error approving review
|
30
|
+
error_no_product: The reviewed product doesn't exist anymore
|
31
|
+
feedback: Feedback
|
32
|
+
feedback_review_for: "Review: '%{review}'"
|
33
|
+
for: for
|
34
|
+
from: from
|
35
|
+
info_approve_review: Review approved
|
36
|
+
leave_us_a_review_for: "Please leave us a review and a rating for our '%{name}'"
|
37
|
+
no_reviews_available: "No reviews have yet been written for this product."
|
38
|
+
out_of_5: "out of 5"
|
39
|
+
rating: rating
|
40
|
+
reviews: Reviews
|
41
|
+
admin:
|
42
|
+
tab:
|
43
|
+
review_management: Reviews
|
44
|
+
review_successfully_submitted: Review was successfully submitted
|
45
|
+
spree_reviews:
|
46
|
+
feedback_rating: Rate feedback
|
47
|
+
include_unapproved: Include unapproved reviews in listings
|
48
|
+
manage_review_settings: Control the display of reviews
|
49
|
+
preview_size: Size of the review snippets
|
50
|
+
require_login: Require user to be logged in
|
51
|
+
review_settings: Review Settings
|
52
|
+
show_email: Show email addresses
|
53
|
+
track_locale: Track user's locale
|
54
|
+
star:
|
55
|
+
one: "1"
|
56
|
+
other: "%{count}"
|
57
|
+
stars: Stars
|
58
|
+
submit_your_review: Submit your review
|
59
|
+
submitted_on: Submitted on
|
60
|
+
unapproved_reviews: Unapproved
|
61
|
+
voice:
|
62
|
+
one: "1 voice"
|
63
|
+
other: "%{count} voices"
|
64
|
+
was_this_review_helpful: "Was this review helpful to you?"
|
65
|
+
write_your_own_review: Write your own review
|
66
|
+
you_must_enter_value_for_rating: "You must enter a value for rating."
|
67
|
+
anonymous: Anonymous
|
68
|
+
|