spree_reviews 0.30.0 → 0.50.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/reviews_controller.rb +3 -11
- data/app/models/product_decorator.rb +8 -5
- data/app/models/review.rb +1 -1
- data/app/models/review_sweeper.rb +20 -0
- data/app/views/admin/review_settings/show.html.erb +2 -2
- data/app/views/admin/reviews/edit.html.erb +3 -3
- data/app/views/feedback_reviews/_form.html.erb +1 -1
- data/app/views/reviews/_fine_print.html.erb +8 -6
- data/app/views/reviews/_form.html.erb +23 -0
- data/app/views/reviews/_stars.html.erb +1 -9
- data/app/views/reviews/new.html.erb +1 -38
- data/app/views/shared/_review.html.erb +2 -2
- data/app/views/shared/_shortrating.html.erb +0 -3
- data/config/initializers/constants.rb +1 -0
- data/config/locales/en.yml +34 -32
- data/config/locales/ru.yml +41 -20
- data/db/migrate/20110406083603_add_rating_to_products.rb +17 -0
- data/lib/spree_reviews.rb +1 -0
- data/lib/spree_reviews_hook.rb +8 -1
- data/public/stylesheets/reviews.css +70 -18
- data/spree_reviews.gemspec +3 -5
- metadata +19 -17
- data/app/models/rating.rb +0 -20
- data/app/views/reviews/_stars0.html.erb +0 -1
- data/app/views/reviews/_stars1.html.erb +0 -1
- data/app/views/reviews/_stars2.html.erb +0 -1
- data/app/views/reviews/_stars3.html.erb +0 -1
- data/app/views/reviews/_stars4.html.erb +0 -1
- data/app/views/reviews/_stars5.html.erb +0 -1
- data/db/migrate/20081020220700_create_ratings.rb +0 -14
- data/spec/models/ratings_spec.rb +0 -11
@@ -1,10 +1,7 @@
|
|
1
1
|
class Admin::ReviewsController < Admin::BaseController
|
2
|
-
|
3
|
-
layout 'admin'
|
4
|
-
|
5
2
|
resource_controller
|
6
3
|
|
7
|
-
index
|
4
|
+
def index
|
8
5
|
@unapproved_reviews = Review.not_approved.find(:all, :order => "created_at DESC")
|
9
6
|
@approved_reviews = Review.approved.find(:all, :order => "created_at DESC")
|
10
7
|
end
|
@@ -20,13 +17,8 @@ class Admin::ReviewsController < Admin::BaseController
|
|
20
17
|
def approve
|
21
18
|
r = Review.find(params[:id])
|
22
19
|
|
23
|
-
r.approved
|
24
|
-
|
25
|
-
r.product.rating = Rating.create :value => 0, :count => 0
|
26
|
-
end
|
27
|
-
r.product.rating.add_rating(r.rating)
|
28
|
-
|
29
|
-
if r.save
|
20
|
+
if r.update_attribute(:approved, true)
|
21
|
+
r.product.recalculate_rating
|
30
22
|
flash[:notice] = t("info_approve_review")
|
31
23
|
else
|
32
24
|
flash[:error] = t("error_approve_review")
|
@@ -1,14 +1,17 @@
|
|
1
1
|
# Add access to reviews/ratings to the product model
|
2
2
|
Product.class_eval do
|
3
|
-
has_one :rating
|
4
3
|
has_many :reviews
|
5
4
|
|
6
5
|
def get_stars
|
7
|
-
|
8
|
-
|
6
|
+
[avg_rating.round, reviews_count]
|
7
|
+
end
|
8
|
+
|
9
|
+
def recalculate_rating
|
10
|
+
reviews_count = reviews.approved.count
|
11
|
+
if reviews_count > 0
|
12
|
+
self.update_attribute :avg_rating, self.reviews.approved.sum(:rating).to_f / reviews_count
|
9
13
|
else
|
10
|
-
|
14
|
+
self.update_attribute :avg_rating, 0
|
11
15
|
end
|
12
16
|
end
|
13
|
-
|
14
17
|
end
|
data/app/models/review.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
class ReviewSweeper < ActionController::Caching::Sweeper
|
2
|
+
observe Review
|
3
|
+
def after_create(review)
|
4
|
+
expire_cache_for(review)
|
5
|
+
end
|
6
|
+
|
7
|
+
def after_update(review)
|
8
|
+
expire_cache_for(review)
|
9
|
+
end
|
10
|
+
|
11
|
+
def after_destroy(review)
|
12
|
+
expire_cache_for(review)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def expire_cache_for(review)
|
18
|
+
review.product.recalculate_rating
|
19
|
+
end
|
20
|
+
end
|
@@ -5,11 +5,11 @@
|
|
5
5
|
<table>
|
6
6
|
<tr>
|
7
7
|
<th scope="row"><%= t("reviews.include_unapproved") %>:</th>
|
8
|
-
<td><%= Spree::Reviews::Config[:include_unapproved_reviews] %></td>
|
8
|
+
<td><%= Spree::Reviews::Config[:include_unapproved_reviews] ? t('yes') : t('no') %></td>
|
9
9
|
</tr>
|
10
10
|
<tr>
|
11
11
|
<th scope="row"><%= t("reviews.preview_size") %>:</th>
|
12
|
-
<td><%=
|
12
|
+
<td><%= Spree::Reviews::Config[:preview_size] %></td>
|
13
13
|
</tr>
|
14
14
|
</table>
|
15
15
|
|
@@ -1,13 +1,13 @@
|
|
1
|
-
<h1
|
1
|
+
<h1><%= t(:editing_review_for) %> <%= link_to @review.product.name, product_path(@review.product) %></h1>
|
2
2
|
|
3
|
-
<h2
|
3
|
+
<h2><%= t(:original_version) %></h2>
|
4
4
|
|
5
5
|
<p>
|
6
6
|
<%= @review.review %>
|
7
7
|
</p>
|
8
8
|
<br/>
|
9
9
|
|
10
|
-
<h2
|
10
|
+
<h2><%= t(:edited_version) %></h2>
|
11
11
|
|
12
12
|
<% form_for([:admin, @review]) do |f| %>
|
13
13
|
<%= render :partial => f,
|
@@ -6,7 +6,7 @@
|
|
6
6
|
<% end %>
|
7
7
|
|
8
8
|
<%= t(:was_this_review_helpful) %>
|
9
|
-
<% for i in 1..
|
9
|
+
<% for i in 1..NB_STARS %>
|
10
10
|
<%= radio_button_tag "feedback_review[rating]", pluralize(i, 'stars'), false, :class => "star" %>
|
11
11
|
<% end %>
|
12
12
|
<%= hidden_field_tag "feedback_review[user_id]", current_user.try(:id) %>
|
@@ -1,7 +1,9 @@
|
|
1
|
-
<
|
2
|
-
<h2><%= t('the_fine_print') %></h2>
|
3
|
-
<ul>
|
4
|
-
<li><%= t('terms_text') %>: <%= link_to t(
|
1
|
+
<div class="review_fine_print">
|
2
|
+
<h2><%= t('the_fine_print') %></h2>
|
3
|
+
<ul>
|
4
|
+
<li><%= t('terms_text') %>: <%= link_to t(:terms_and_conditions), url_for(:action => 'terms') %></li>
|
5
5
|
<li><%= t('approved_text') %></li>
|
6
|
-
<li><%= t('guideline_text')
|
7
|
-
|
6
|
+
<li><%= t('guideline_text') %>
|
7
|
+
: <%= link_to t(:review_guidelines), url_for(:action => 'submissionguidelines') %></li>
|
8
|
+
</ul>
|
9
|
+
</div>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<%= form_for review, :url => product_reviews_path(product), :html => {:method => :post} do |f| %>
|
2
|
+
<%= render "shared/error_messages", :target => review %>
|
3
|
+
<%= f.hidden_field :product_id, :value => product.id %>
|
4
|
+
|
5
|
+
<p class="review_rating_field">
|
6
|
+
<%= f.label :rating, t("rating") %> <span class="required">*</span><br />
|
7
|
+
<%= render :partial => "reviews/stars", :locals => {:stars => review.rating, :edit_enabled => true} %>
|
8
|
+
</p>
|
9
|
+
|
10
|
+
<p class="review_title_field">
|
11
|
+
<%= f.label :title, t("review_title") %> <span class="required">*</span><br />
|
12
|
+
<%= f.text_field :title, :maxlength => "255", :size => "50" %>
|
13
|
+
</p>
|
14
|
+
|
15
|
+
<p class="review_review_field">
|
16
|
+
<%= f.label :review, t("review_content") %> <span class="required">*</span><br />
|
17
|
+
<%= f.text_area :review, :wrap => "virtual", :rows => "10", :cols => "50" %>
|
18
|
+
</p>
|
19
|
+
|
20
|
+
<p class="review_submit">
|
21
|
+
<%= f.submit I18n.t('submit_your_review'), :class => "button bg_darkfirst" %>
|
22
|
+
</p>
|
23
|
+
<% end %>
|
@@ -1,8 +1,3 @@
|
|
1
|
-
<% content_for :head do %>
|
2
|
-
<%= javascript_include_tag("jquery.rating.js") %>
|
3
|
-
<%= javascript_tag("$(document).ready(function(){$('.stars').rating({required:true});});") %>
|
4
|
-
<% end %>
|
5
|
-
|
6
1
|
<% if defined? edit_enabled
|
7
2
|
state = ""
|
8
3
|
name = "review[rating]"
|
@@ -10,12 +5,9 @@
|
|
10
5
|
state = 'disabled="disabled"'
|
11
6
|
name = defined?(review).nil? ? Time.now.tv_usec.to_s : "review_#{review}"
|
12
7
|
end %>
|
13
|
-
<% for i in 1..
|
8
|
+
<% for i in 1..NB_STARS %>
|
14
9
|
<input name="<%= name %>"
|
15
10
|
type="radio" class="star"
|
16
11
|
value="<%= pluralize(i, 'stars') %>" <%= state %>
|
17
12
|
<%= "checked=\"checked\"" if i==stars %> />
|
18
13
|
<% end %>
|
19
|
-
|
20
|
-
|
21
|
-
|
@@ -5,43 +5,6 @@
|
|
5
5
|
|
6
6
|
<h2> <%= I18n.t('leave_us_a_review_for') + ' "' + @product.name + '"' %> </h2>
|
7
7
|
|
8
|
-
<%=
|
9
|
-
<%= render "shared/error_messages", :target => @review %>
|
10
|
-
<%= f.hidden_field :product_id, :value => @product.id %>
|
11
|
-
|
12
|
-
<table cellspacing="0" cellpadding="2">
|
13
|
-
<tbody>
|
14
|
-
<tr valign="top">
|
15
|
-
<td style="padding-top: 5px; padding-bottom: 5px;" class="fieldtitle right nowrap">
|
16
|
-
<strong><%= I18n.t('rating') %></strong>
|
17
|
-
</td>
|
18
|
-
<td style="padding-top: 5px; padding-bottom: 5px;">
|
19
|
-
<%= render :partial => "reviews/stars", :locals => {:stars => @review.rating, :edit_enabled => true} %>
|
20
|
-
</td>
|
21
|
-
</tr>
|
22
|
-
<tr valign="top">
|
23
|
-
<td class="fieldtitle right nowrap">
|
24
|
-
<%= f.label :title, raw("<strong>#{ I18n.t('review_title')}</strong>") %>
|
25
|
-
</td>
|
26
|
-
<td>
|
27
|
-
<%= f.text_field :title, :maxlength => "255", :size => "50" %>
|
28
|
-
</td>
|
29
|
-
</tr>
|
30
|
-
<tr valign="top">
|
31
|
-
<td class="fieldtitle right nowrap">
|
32
|
-
<%= f.label :review, raw("<strong>#{ I18n.t('review_content')}</strong>") %>
|
33
|
-
</td>
|
34
|
-
<td>
|
35
|
-
<%= f.text_area :review, :wrap => "virtual", :rows => "10", :cols => "50" %>
|
36
|
-
</td>
|
37
|
-
</tr>
|
38
|
-
<tr>
|
39
|
-
<td> </td>
|
40
|
-
<td style="padding-top: 5px;">
|
41
|
-
<%= f.submit I18n.t('submit_your_review'), :class => "button bg_darkfirst".html_safe %>
|
42
|
-
</td>
|
43
|
-
</tr>
|
44
|
-
</tbody></table>
|
45
|
-
<% end %>
|
8
|
+
<%= render 'form', { :review => @review, :product => @product } %>
|
46
9
|
|
47
10
|
<%= render :partial => "fine_print" %>
|
@@ -2,13 +2,13 @@
|
|
2
2
|
<span title="<%= txt_stars(review.rating) %>">
|
3
3
|
<%= render :partial => "reviews/stars", :locals => {:stars => review.rating} %>
|
4
4
|
</span>
|
5
|
-
|
5
|
+
<span class="title"> <%= review.title %> </span>
|
6
6
|
<br/>
|
7
7
|
<span class="attribution"><%= t('submitted_on') %> <strong><%= l review.created_at.to_date %></strong></span>
|
8
8
|
<p>
|
9
9
|
<%= review.review %>
|
10
10
|
</p>
|
11
|
-
<div id="feedback_review_<%= review.id %>">
|
11
|
+
<div class="feedback_review" id="feedback_review_<%= review.id %>">
|
12
12
|
<%= render :partial => "feedback_reviews/form", :locals => {:review => review} %>
|
13
13
|
</div>
|
14
14
|
</div>
|
@@ -0,0 +1 @@
|
|
1
|
+
NB_STARS = 5
|
data/config/locales/en.yml
CHANGED
@@ -1,17 +1,34 @@
|
|
1
1
|
en:
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
back_reviews: Back to the reviews
|
2
|
+
approve: Approve
|
3
|
+
Approved_reviews: Approved
|
4
|
+
approved_text: Unlocked comments will be published within 1-2 business days.
|
6
5
|
are_you_sure_review: Are you sure to delete review ?
|
7
|
-
|
6
|
+
average_customer_rating: Average rating
|
7
|
+
back_reviews: Back to the reviews
|
8
|
+
based_upon: based upon
|
9
|
+
by: by
|
10
|
+
date_: Date
|
11
|
+
edited_version: 'Edited version'
|
12
|
+
editing_review_for: 'Editing review for'
|
8
13
|
error_approve_review: Error approving review
|
9
|
-
|
14
|
+
feedback: Feedback
|
15
|
+
feedback_review_for: "Review: '%{review}'"
|
16
|
+
for: for
|
17
|
+
from: from
|
18
|
+
guideline_text: We reserve the right not to post opinions unrelated to your product
|
19
|
+
info_approve_review: Review approved
|
10
20
|
leave_us_a_review_for: Please leave us a review and a rating for our
|
11
|
-
|
21
|
+
original_version: 'Original version'
|
22
|
+
out_of_5: "out of 5"
|
12
23
|
rating: rating
|
13
|
-
|
24
|
+
review:
|
25
|
+
one: one review
|
26
|
+
other: %{count} reviews
|
14
27
|
review_content: Content
|
28
|
+
review_guidelines: Review Guidelines
|
29
|
+
review_management: Review Management
|
30
|
+
review_management_description: Manage the user-submitted reviews
|
31
|
+
review_successfully_submitted: Review was successfully submitted
|
15
32
|
review_title: Title
|
16
33
|
reviews:
|
17
34
|
review_settings: Review Settings
|
@@ -20,34 +37,19 @@ en:
|
|
20
37
|
include_unapproved: Include unapproved reviews in listings
|
21
38
|
your_name: Your name
|
22
39
|
your_location: Your location
|
23
|
-
average_customer_rating: Average rating
|
24
|
-
the_fine_print: The fine print
|
25
|
-
terms_text: All opinions must comply with our terms and conditions
|
26
|
-
approved_text: Unlocked comments will be published within 1-2 business days.
|
27
|
-
guideline_text: We reserve the right not to post opinions unrelated to your product
|
28
|
-
"terms and conditions": Terms & Conditions
|
29
|
-
"review guidelines": Review Guidelines
|
30
|
-
date_: Date
|
31
|
-
for: for
|
32
|
-
Unapproved_reviews: Unapproved
|
33
|
-
Approved_reviews: Approved
|
34
|
-
from: from
|
35
|
-
by: by
|
36
|
-
submitted_on: Submitted on
|
37
|
-
based_upon: based upon
|
38
|
-
review:
|
39
|
-
one: one review
|
40
|
-
other: %{count} reviews
|
41
40
|
star:
|
42
41
|
one: "1"
|
43
42
|
other: "%{count}"
|
43
|
+
stars: Stars
|
44
|
+
submit_your_review: Submit your review
|
45
|
+
submitted_on: Submitted on
|
46
|
+
terms_text: All opinions must comply with our terms and conditions
|
47
|
+
terms_and_conditions: Terms & Conditions
|
48
|
+
the_fine_print: The fine print
|
49
|
+
Unapproved_reviews: Unapproved
|
44
50
|
voice:
|
45
51
|
one: "1 voice"
|
46
52
|
other: "%{count} voices"
|
47
|
-
|
48
|
-
feedback: Feedback
|
49
|
-
stars: Stars
|
50
|
-
feedback_review_for: "Review: '%{review}'"
|
51
|
-
out_of_5: "out of 5"
|
53
|
+
write_your_own_review: Write your own review
|
52
54
|
was_this_review_helpful: "Was this review helpful to you?"
|
53
|
-
you_must_enter_value_for_rating: "You must enter a value for rating."
|
55
|
+
you_must_enter_value_for_rating: "You must enter a value for rating."
|
data/config/locales/ru.yml
CHANGED
@@ -1,4 +1,10 @@
|
|
1
1
|
ru:
|
2
|
+
activerecord:
|
3
|
+
attributes:
|
4
|
+
review:
|
5
|
+
title: Заголовок
|
6
|
+
review: Содержание
|
7
|
+
rating: Рейтинг
|
2
8
|
write_your_own_review: Оставьте свой отзыв
|
3
9
|
review_management: Управление отзывами
|
4
10
|
review_management_description: Управляйте отзывами покупателей
|
@@ -15,33 +21,48 @@ ru:
|
|
15
21
|
review_title: Заголовок
|
16
22
|
reviews:
|
17
23
|
review_settings: Настройки отзывов покупателей
|
18
|
-
manage_review_settings:
|
19
|
-
preview_size:
|
20
|
-
include_unapproved:
|
24
|
+
manage_review_settings: Управление отображением отзывов
|
25
|
+
preview_size: Количество отзывов на странице товара
|
26
|
+
include_unapproved: Показывать неодобренные отзывы на странице товара
|
21
27
|
your_name: Ваше имя
|
22
28
|
your_location: Город
|
23
|
-
average_customer_rating:
|
24
|
-
the_fine_print:
|
25
|
-
terms_text:
|
26
|
-
approved_text:
|
27
|
-
guideline_text:
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
29
|
+
average_customer_rating: Средняя оценка
|
30
|
+
the_fine_print: Мелкий текст
|
31
|
+
terms_text: Все отзывы должны быть написаны в соответствии с условиями и соглашениями
|
32
|
+
approved_text: Разблокированные комментарии будут опубликованы в течение 1-2 рабочих дней.
|
33
|
+
guideline_text: Мы оставляем за собой право не публиковать отзывы не имеющие отношения к продукту
|
34
|
+
terms_and_conditions: Условия и соглашения
|
35
|
+
review_guidelines: Советы по составлению отзывов
|
36
|
+
review_header: Отзывы
|
37
|
+
date_: Дата
|
38
|
+
for: для
|
39
|
+
Unapproved_reviews: Неутверждённые отзывы
|
40
|
+
Approved_reviews: Утверждённые отзывы
|
34
41
|
from: from
|
35
42
|
by: by
|
36
|
-
submitted_on:
|
43
|
+
submitted_on: Добавлено
|
37
44
|
based_upon: "на основе"
|
38
45
|
review:
|
39
|
-
zero: "0
|
40
|
-
one: "
|
46
|
+
zero: "0 отзывов"
|
47
|
+
one: "%{count} отзыв"
|
41
48
|
few: "%{count} отзыва"
|
42
49
|
other: "%{count} отзывов"
|
50
|
+
voice:
|
51
|
+
zero: "0 голосов"
|
52
|
+
one: "%{count} голос"
|
53
|
+
few: "%{count} голоса"
|
54
|
+
other: "%{count} голосов"
|
55
|
+
star:
|
56
|
+
one: "1"
|
57
|
+
other: "%{count}"
|
43
58
|
|
44
|
-
feedback:
|
45
|
-
stars:
|
46
|
-
feedback_review_for: "
|
59
|
+
feedback: Обратная связь
|
60
|
+
stars: Звёзды
|
61
|
+
feedback_review_for: "Отзывы: '%{review}'"
|
62
|
+
out_of_5: "из 5"
|
63
|
+
was_this_review_helpful: "Был ли Вам полезен этот отзыв?"
|
64
|
+
you_must_enter_value_for_rating: "Вы должны оценить отзыв."
|
47
65
|
|
66
|
+
original_version: 'Исходная версия'
|
67
|
+
edited_version: 'Отредактированная версия'
|
68
|
+
editing_review_for: 'Редактируем отзыв для'
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class AddRatingToProducts < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
add_column :products, :avg_rating, :decimal, :default => 0.0, :null => false, :precision => 7, :scale => 5
|
4
|
+
add_column :products, :reviews_count, :integer, :default => 0, :null => false
|
5
|
+
|
6
|
+
Product.reset_column_information
|
7
|
+
Product.all.each do |p|
|
8
|
+
Product.update_counters p.id, :reviews_count => p.reviews.length
|
9
|
+
p.recalculate_rating
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.down
|
14
|
+
remove_column :products, :reviews_count
|
15
|
+
remove_column :products, :avg_rating
|
16
|
+
end
|
17
|
+
end
|
data/lib/spree_reviews.rb
CHANGED
@@ -10,6 +10,7 @@ module SpreeReviews
|
|
10
10
|
Dir.glob(File.join(File.dirname(__FILE__), "../app/**/*_decorator*.rb")) do |c|
|
11
11
|
Rails.env.production? ? require(c) : load(c)
|
12
12
|
end
|
13
|
+
ProductsHelper.send(:include, ReviewsHelper)
|
13
14
|
end
|
14
15
|
|
15
16
|
config.to_prepare &method(:activate).to_proc
|
data/lib/spree_reviews_hook.rb
CHANGED
@@ -1,7 +1,14 @@
|
|
1
1
|
class SpreeReviewsHooks < Spree::ThemeSupport::HookListener
|
2
2
|
insert_after :product_properties, 'shared/reviews'
|
3
3
|
insert_after :inside_head do
|
4
|
-
%(<%= stylesheet_link_tag('reviews.css') %>)
|
4
|
+
%( <%= stylesheet_link_tag('reviews.css') %> )
|
5
|
+
end
|
6
|
+
|
7
|
+
insert_after :footer_right do
|
8
|
+
%(
|
9
|
+
<%= javascript_include_tag("jquery.rating.js") %>
|
10
|
+
<%= javascript_tag("$(document).ready(function(){$('.stars').rating({required:true});});") %>
|
11
|
+
)
|
5
12
|
end
|
6
13
|
|
7
14
|
insert_after :admin_product_sub_tabs do
|
@@ -1,20 +1,23 @@
|
|
1
1
|
#reviews div.header {
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
2
|
+
font-size: 12pt;
|
3
|
+
font-weight: bold;
|
4
|
+
border-bottom: 1px #2222aa dashed;
|
5
|
+
margin-top: 10px;
|
6
|
+
margin-bottom: 10px;
|
7
7
|
}
|
8
|
+
|
8
9
|
#reviews div.review {
|
9
|
-
|
10
|
-
|
10
|
+
border-bottom: 1px #2222aa dashed;
|
11
|
+
margin-bottom: 10px;
|
11
12
|
}
|
13
|
+
|
12
14
|
#reviews div.review span.title {
|
13
|
-
|
14
|
-
|
15
|
+
font-size: 11pt;
|
16
|
+
font-weight: bold;
|
15
17
|
}
|
18
|
+
|
16
19
|
#reviews div.review span.attribution {
|
17
|
-
|
20
|
+
font-size: 8pt;
|
18
21
|
}
|
19
22
|
|
20
23
|
.lit {
|
@@ -23,6 +26,7 @@
|
|
23
26
|
margin-right: 1px;
|
24
27
|
padding-left: 1px;
|
25
28
|
}
|
29
|
+
|
26
30
|
.unlit {
|
27
31
|
background-color: #aaaaaa;
|
28
32
|
color: #000000;
|
@@ -30,15 +34,63 @@
|
|
30
34
|
padding-left: 1px;
|
31
35
|
}
|
32
36
|
|
37
|
+
.star-rating-control {
|
38
|
+
display: inline-block;
|
39
|
+
height: 15px;
|
40
|
+
}
|
41
|
+
|
42
|
+
.review_hr {
|
43
|
+
size: 1px;
|
44
|
+
background: silver;
|
45
|
+
border: none;
|
46
|
+
margin: 1em 0;
|
47
|
+
}
|
48
|
+
|
33
49
|
/* jQuery.Rating Plugin CSS - http://www.fyneworks.com/jquery/star-rating/ */
|
34
|
-
div.rating-cancel,div.star-rating{
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
50
|
+
div.rating-cancel, div.star-rating {
|
51
|
+
float: left;
|
52
|
+
width: 17px;
|
53
|
+
height: 15px;
|
54
|
+
text-indent: -999em;
|
55
|
+
cursor: pointer;
|
56
|
+
display: block;
|
57
|
+
background: transparent;
|
58
|
+
overflow: hidden
|
59
|
+
}
|
60
|
+
|
61
|
+
div.rating-cancel, div.rating-cancel a {
|
62
|
+
background: transparent url('/images/delete.gif') no-repeat scroll 0 -16px;
|
63
|
+
}
|
64
|
+
|
65
|
+
div.star-rating, div.star-rating a {
|
66
|
+
background: url('/images/star.gif') no-repeat 0 0px
|
67
|
+
}
|
68
|
+
|
69
|
+
div.rating-cancel a, div.star-rating a {
|
70
|
+
display: block;
|
71
|
+
width: 16px;
|
72
|
+
height: 100%;
|
73
|
+
background-position: 0 0px;
|
74
|
+
border: 0
|
75
|
+
}
|
76
|
+
|
77
|
+
div.star-rating-on a {
|
78
|
+
background-position: 0 -16px !important
|
79
|
+
}
|
80
|
+
|
81
|
+
div.star-rating-hover a {
|
82
|
+
background-position: 0 -32px
|
83
|
+
}
|
84
|
+
|
40
85
|
/* Read Only CSS */
|
41
|
-
div.star-rating-readonly a{
|
86
|
+
div.star-rating-readonly a {
|
87
|
+
cursor: default !important
|
88
|
+
}
|
89
|
+
|
42
90
|
/* Partial Star CSS */
|
43
|
-
div.star-rating{
|
91
|
+
div.star-rating {
|
92
|
+
background: transparent !important;
|
93
|
+
overflow: hidden !important
|
94
|
+
}
|
95
|
+
|
44
96
|
/* END jQuery.Rating Plugin CSS */
|
data/spree_reviews.gemspec
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.platform = Gem::Platform::RUBY
|
3
3
|
s.name = 'spree_reviews'
|
4
|
-
s.version = '0.
|
4
|
+
s.version = '0.50.0'
|
5
5
|
s.summary = 'Basic review and ratings facility for Spree'
|
6
6
|
#s.description = 'Add (optional) gem description here'
|
7
7
|
s.required_ruby_version = '>= 1.8.7'
|
8
8
|
|
9
9
|
# s.author = 'David Heinemeier Hansson'
|
10
10
|
# s.email = 'david@loudthinking.com'
|
11
|
-
|
11
|
+
s.homepage = 'https://github.com/romul/spree-reviews/'
|
12
12
|
# s.rubyforge_project = 'actionmailer'
|
13
13
|
|
14
14
|
s.files = `git ls-files`.split("\n")
|
@@ -16,7 +16,5 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.require_path = 'lib'
|
17
17
|
s.requirements << 'none'
|
18
18
|
|
19
|
-
s.
|
20
|
-
|
21
|
-
s.add_dependency('spree_core', '>= 0.30.1')
|
19
|
+
s.add_dependency('spree_core', '>= 0.50.0')
|
22
20
|
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_reviews
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 215
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
|
-
-
|
8
|
+
- 50
|
8
9
|
- 0
|
9
|
-
version: 0.
|
10
|
+
version: 0.50.0
|
10
11
|
platform: ruby
|
11
12
|
authors: []
|
12
13
|
|
@@ -14,21 +15,23 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2011-
|
18
|
+
date: 2011-04-27 00:00:00 +04:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: spree_core
|
22
23
|
prerelease: false
|
23
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
24
26
|
requirements:
|
25
27
|
- - ">="
|
26
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 215
|
27
30
|
segments:
|
28
31
|
- 0
|
29
|
-
-
|
30
|
-
-
|
31
|
-
version: 0.
|
32
|
+
- 50
|
33
|
+
- 0
|
34
|
+
version: 0.50.0
|
32
35
|
type: :runtime
|
33
36
|
version_requirements: *id001
|
34
37
|
description:
|
@@ -53,8 +56,8 @@ files:
|
|
53
56
|
- app/helpers/reviews_helper.rb
|
54
57
|
- app/models/feedback_review.rb
|
55
58
|
- app/models/product_decorator.rb
|
56
|
-
- app/models/rating.rb
|
57
59
|
- app/models/review.rb
|
60
|
+
- app/models/review_sweeper.rb
|
58
61
|
- app/models/reviews_configuration.rb
|
59
62
|
- app/views/admin/feedback_reviews/index.html.erb
|
60
63
|
- app/views/admin/review_settings/edit.html.erb
|
@@ -66,13 +69,8 @@ files:
|
|
66
69
|
- app/views/feedback_reviews/_summary.html.erb
|
67
70
|
- app/views/feedback_reviews/create.js.erb
|
68
71
|
- app/views/reviews/_fine_print.html.erb
|
72
|
+
- app/views/reviews/_form.html.erb
|
69
73
|
- app/views/reviews/_stars.html.erb
|
70
|
-
- app/views/reviews/_stars0.html.erb
|
71
|
-
- app/views/reviews/_stars1.html.erb
|
72
|
-
- app/views/reviews/_stars2.html.erb
|
73
|
-
- app/views/reviews/_stars3.html.erb
|
74
|
-
- app/views/reviews/_stars4.html.erb
|
75
|
-
- app/views/reviews/_stars5.html.erb
|
76
74
|
- app/views/reviews/index.html.erb
|
77
75
|
- app/views/reviews/new.html.erb
|
78
76
|
- app/views/reviews/submissionguidelines.html.erb
|
@@ -82,15 +80,16 @@ files:
|
|
82
80
|
- app/views/shared/_review_summary.html.erb
|
83
81
|
- app/views/shared/_reviews.html.erb
|
84
82
|
- app/views/shared/_shortrating.html.erb
|
83
|
+
- config/initializers/constants.rb
|
85
84
|
- config/locales/de.yml
|
86
85
|
- config/locales/en-GB.yml
|
87
86
|
- config/locales/en.yml
|
88
87
|
- config/locales/fr-FR.yml
|
89
88
|
- config/locales/ru.yml
|
90
89
|
- config/routes.rb
|
91
|
-
- db/migrate/20081020220700_create_ratings.rb
|
92
90
|
- db/migrate/20081020220724_create_reviews.rb
|
93
91
|
- db/migrate/20101222083309_create_feedback_reviews.rb
|
92
|
+
- db/migrate/20110406083603_add_rating_to_products.rb
|
94
93
|
- db/sample/ratings.yml
|
95
94
|
- db/sample/reviews.yml
|
96
95
|
- lib/spree/reviews/config.rb
|
@@ -103,14 +102,13 @@ files:
|
|
103
102
|
- public/stylesheets/reviews.css
|
104
103
|
- spec/controllers/reviews_controller_spec.rb
|
105
104
|
- spec/helpers/reviews_helper_spec.rb
|
106
|
-
- spec/models/ratings_spec.rb
|
107
105
|
- spec/models/reviews_spec.rb
|
108
106
|
- spec/spec.opts
|
109
107
|
- spec/spec_helper.rb
|
110
108
|
- spec/views/reviews/submit_view_spec.rb
|
111
109
|
- spree_reviews.gemspec
|
112
110
|
has_rdoc: true
|
113
|
-
homepage:
|
111
|
+
homepage: https://github.com/romul/spree-reviews/
|
114
112
|
licenses: []
|
115
113
|
|
116
114
|
post_install_message:
|
@@ -119,25 +117,29 @@ rdoc_options: []
|
|
119
117
|
require_paths:
|
120
118
|
- lib
|
121
119
|
required_ruby_version: !ruby/object:Gem::Requirement
|
120
|
+
none: false
|
122
121
|
requirements:
|
123
122
|
- - ">="
|
124
123
|
- !ruby/object:Gem::Version
|
124
|
+
hash: 57
|
125
125
|
segments:
|
126
126
|
- 1
|
127
127
|
- 8
|
128
128
|
- 7
|
129
129
|
version: 1.8.7
|
130
130
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
|
+
none: false
|
131
132
|
requirements:
|
132
133
|
- - ">="
|
133
134
|
- !ruby/object:Gem::Version
|
135
|
+
hash: 3
|
134
136
|
segments:
|
135
137
|
- 0
|
136
138
|
version: "0"
|
137
139
|
requirements:
|
138
140
|
- none
|
139
141
|
rubyforge_project:
|
140
|
-
rubygems_version: 1.3.
|
142
|
+
rubygems_version: 1.3.7
|
141
143
|
signing_key:
|
142
144
|
specification_version: 3
|
143
145
|
summary: Basic review and ratings facility for Spree
|
data/app/models/rating.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
class Rating < ActiveRecord::Base
|
2
|
-
belongs_to :product
|
3
|
-
|
4
|
-
NB_STARS=5
|
5
|
-
def self.get_nb_stars
|
6
|
-
NB_STARS
|
7
|
-
end
|
8
|
-
|
9
|
-
def add_rating(n)
|
10
|
-
self.value = value * count + n
|
11
|
-
self.count = count + 1
|
12
|
-
self.value = value / count
|
13
|
-
save
|
14
|
-
end
|
15
|
-
|
16
|
-
def get_stars
|
17
|
-
(self.value + 0.5).floor
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
<span class="unlit"> ✮ </span><span class="unlit"> ✮ </span><span class="unlit"> ✮ </span><span class="unlit"> ✮ </span><span class="unlit"> ✮ </span>
|
@@ -1 +0,0 @@
|
|
1
|
-
<span class="lit"> ✮ </span><span class="unlit"> ✮ </span><span class="unlit"> ✮ </span><span class="unlit"> ✮ </span><span class="unlit"> ✮ </span>
|
@@ -1 +0,0 @@
|
|
1
|
-
<span class="lit"> ✮ </span><span class="lit"> ✮ </span><span class="unlit"> ✮ </span><span class="unlit"> ✮ </span><span class="unlit"> ✮ </span>
|
@@ -1 +0,0 @@
|
|
1
|
-
<span class="lit"> ✮ </span><span class="lit"> ✮ </span><span class="lit"> ✮ </span><span class="unlit"> ✮ </span><span class="unlit"> ✮ </span>
|
@@ -1 +0,0 @@
|
|
1
|
-
<span class="lit"> ✮ </span><span class="lit"> ✮ </span><span class="lit"> ✮ </span><span class="lit"> ✮ </span><span class="unlit"> ✮ </span>
|
@@ -1 +0,0 @@
|
|
1
|
-
<span class="lit"> ✮ </span><span class="lit"> ✮ </span><span class="lit"> ✮ </span><span class="lit"> ✮ </span><span class="lit"> ✮</span>
|