12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
# File 'app/controllers/spree/product_reviews_controller.rb', line 12
def create
@product_review = Spree::ProductReview.new(product_review_params)
@product_review.product = @product
@product_review.purchase_date = spree_current_user.recent_purchase_date_for @product
@product_review.user = spree_current_user
@product_review.ip_address = request.remote_ip
@product_review.locale = I18n.locale.to_s
@product_review.product_name = @product.name
authorize! :create, @product_review
if Spree::ProductReview.exists?(user_id: spree_current_user.id, product_id: @product.id)
flash[:error] = "You have already reviewed this product."
redirect_to spree.product_path(@product) and return
end
default_status = (current_store.preferred_review_status_default rescue 'pending')
should_approve = (default_status == 'approved')
spam_detected = false
if (current_store.preferred_disable_review_links rescue false) && @product_review.review.present?
if @product_review.review.match?(%r{https?://|www\.|[a-zA-Z0-9]+\.(com|net|org|info|biz)})
should_approve = false
spam_detected = true
end
end
if (current_store.preferred_disable_review_emails rescue false) && @product_review.review.present?
if @product_review.review.match?(%r{[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}})
should_approve = false
spam_detected = true
end
end
if (current_store.preferred_block_spam_reviews rescue false) && @product_review.review.present?
custom_words = (current_store.preferred_spam_words || "").split(',').map(&:strip).reject(&:empty?)
custom_words = %w[casino viagra crypto bitcoin lottery loan investment] if custom_words.empty?
full_text = "#{@product_review.title} #{@product_review.review}".downcase
if custom_words.any? { |word| full_text.include?(word.downcase) }
should_approve = false
spam_detected = true
end
end
@product_review.approved = should_approve
@product_review.spam = spam_detected
if @product_review.save
if @product_review.approved?
flash[:success] = Spree.t("product_review.flash_messages.create.approved")
else
flash[:success] = Spree.t("product_review.flash_messages.create.success")
end
redirect_to spree.product_path(@product)
else
flash[:error] = Spree.t("product_review.flash_messages.create.failure")
render :new
end
end
|