Commit bad2d9fee69d536dab5d1bcd9e9ea96e8dec861f

Authored by Caio Almeida
1 parent fc7e02f2

Captcha for comment reply and title is not mandatory for comment anymore

app/controllers/public/content_viewer_controller.rb
... ... @@ -119,7 +119,7 @@ class ContentViewerController < ApplicationController
119 119 def add_comment
120 120 @comment.author = user if logged_in?
121 121 @comment.article = @page
122   - if (logged_in? || @comment.reply_of_id || verify_recaptcha(:model => @comment, :message => _('Please type the words correctly'))) && @comment.save
  122 + if (logged_in? || verify_recaptcha(:model => @comment, :message => _('Please type the words correctly'))) && @comment.save
123 123 @page.touch
124 124 @comment = nil # clear the comment form
125 125 redirect_to :action => 'view_page', :profile => params[:profile], :page => @page.explode_path, :view => params[:view]
... ...
app/models/comment.rb
... ... @@ -2,7 +2,7 @@ class Comment < ActiveRecord::Base
2 2  
3 3 track_actions :leave_comment, :after_create, :keep_params => ["article.title", "article.url", "title", "url", "body"], :custom_target => :action_tracker_target
4 4  
5   - validates_presence_of :title, :body
  5 + validates_presence_of :body
6 6 belongs_to :article, :counter_cache => true
7 7 belongs_to :author, :class_name => 'Person', :foreign_key => 'author_id'
8 8 has_many :children, :class_name => 'Comment', :foreign_key => 'reply_of_id', :dependent => :destroy
... ...
app/views/content_viewer/_comment_form.rhtml
  1 +<script type="text/javascript">
  2 +function submit_comment_form(button) {
  3 + <% if logged_in? %>
  4 + button.form.confirm.value = 'true';
  5 + button.disabled = true;
  6 + button.form.submit();
  7 + return true;
  8 + <% else %>
  9 + jQuery('#recaptcha-container').show();
  10 + jQuery.colorbox({ inline : true, href : '#recaptcha-container', maxWidth : '600px', maxHeight : '300px' });
  11 + jQuery('#confirm-captcha').unbind('click');
  12 + jQuery('#confirm-captcha').bind('click', function() {
  13 + jQuery.colorbox.close();
  14 + button.form.recaptcha_response_field.value = jQuery('#recaptcha_response_field').val();
  15 + button.form.recaptcha_challenge_field.value = jQuery('#recaptcha_challenge_field').val();
  16 + button.form.confirm.value = 'true';
  17 + button.disabled = true;
  18 + button.form.submit();
  19 + });
  20 + <% end %>
  21 +}
  22 +</script>
  23 +
1 24 <% focus_on = logged_in? ? 'title' : 'name' %>
2 25  
3 26 <% if @comment && @comment.errors.any? && @comment.reply_of_id.blank? %>
... ... @@ -19,6 +42,23 @@
19 42 <%= content_tag('a', '', :name => 'comment_form') + _('Post a comment') %>
20 43 </h4>
21 44  
  45 +<% unless logged_in? %>
  46 + <div id="recaptcha-container" style="display: none">
  47 + <h3><%= _('Please type the two words below') %></h3>
  48 + <%= recaptcha_tags(:display => { :theme => 'clean' }, :ajax => true) %>
  49 + <% button_bar do %>
  50 + <%= button_to_function :add, _('Confirm'), "return false", :id => "confirm-captcha" %>
  51 + <%= button_to_function :cancel, _('Cancel'), "jQuery.colorbox.close()" %>
  52 + <% end %>
  53 + </div>
  54 +
  55 + <script type="text/javascript">
  56 + jQuery(document).bind('cbox_cleanup', function() {
  57 + jQuery('#recaptcha-container').hide();
  58 + });
  59 + </script>
  60 +<% end %>
  61 +
22 62 <% form_tag( url_for(@page.view_url.merge({:only_path => true})), { :class => 'comment_form' } ) do %>
23 63 <%= hidden_field_tag(:confirm, 'false') %>
24 64  
... ... @@ -32,15 +72,16 @@
32 72 <%= _('If you are a registered user, you can login and be automatically recognized.') %>
33 73 </p>
34 74  
  75 + <%= hidden_field_tag(:recaptcha_response_field, nil, :id => nil) %>
  76 + <%= hidden_field_tag(:recaptcha_challenge_field, nil, :id => nil) %>
  77 +
35 78 <% end %>
36 79  
37   - <%= required labelled_form_field(_('Title'), text_field(:comment, :title)) %>
  80 + <%= labelled_form_field(_('Title'), text_field(:comment, :title)) %>
38 81 <%= required labelled_form_field(_('Enter your comment'), text_area(:comment, :body, :rows => 5)) %>
39 82  
40   - <%= recaptcha_tags(:display => { :theme => 'clean' }, :ajax => true) unless logged_in? %>
41   -
42 83 <% button_bar do %>
43   - <%= submit_button('add', _('Post comment'), :onclick => "this.form.confirm.value = 'true'; this.disabled = true; this.form.submit(); return true;") %>
  84 + <%= submit_button('add', _('Post comment'), :onclick => "submit_comment_form(this); return false") %>
44 85 <%= button_to_function :cancel, _('Cancel'), "f=jQuery(this).parents('.post_comment_box'); f.removeClass('opened'); f.addClass('closed'); return false" %>
45 86 <% end %>
46 87 <% end %>
... ...
public/javascripts/application.js
... ... @@ -662,7 +662,6 @@ function add_comment_reply_form(button, comment_id) {
662 662 var f = container.find('.comment_form');
663 663 if (f.length == 0) {
664 664 f = jQuery('#page-comment-form .comment_form').clone();
665   - f.find('#dynamic_recaptcha').remove();
666 665 f.find('.fieldWithErrors').map(function() { jQuery(this).replaceWith(jQuery(this).contents()); });
667 666 f.prepend('<input type="hidden" name="comment[reply_of_id]" value="' + comment_id + '" />');
668 667 container.append(f);
... ...
public/stylesheets/application.css
... ... @@ -6173,31 +6173,6 @@ h1#agenda-title {
6173 6173  
6174 6174 /* Captcha */
6175 6175  
6176   -.comment_reply #recaptcha_area {
6177   - margin-bottom: 3px !important;
6178   -}
6179   -
6180   -.comment_reply .recaptchatable tr td + td + td {
6181   - display: none !important;
6182   -}
6183   -
6184   -.comment_reply .recaptcha-container {
6185   - width: 100%;
6186   - overflow: hidden;
6187   -}
6188   -
6189   -.comment_reply .recaptcha-container:hover {
6190   - overflow: visible;
6191   -}
6192   -
6193   -.comment_reply .recaptcha-container tr:hover td {
6194   - background: transparent;
6195   -}
6196   -
6197   -.comment_reply .recaptcha_image_cell {
6198   - background: transparent !important;
6199   -}
6200   -
6201 6176 /* Colorbox */
6202 6177  
6203 6178 #cboxClose {
... ...
test/unit/comment_test.rb
... ... @@ -5,8 +5,8 @@ class CommentTest &lt; Test::Unit::TestCase
5 5 def setup
6 6 end
7 7  
8   - should 'have a name and require it' do
9   - assert_mandatory(Comment.new, :title)
  8 + should 'have a name but not require it' do
  9 + assert_optional(Comment.new, :title)
10 10 end
11 11  
12 12 should 'have a body and require it' do
... ... @@ -197,7 +197,6 @@ class CommentTest &lt; Test::Unit::TestCase
197 197 comment.valid?
198 198  
199 199 assert comment.errors.invalid?(:name)
200   - assert comment.errors.invalid?(:title)
201 200 assert comment.errors.invalid?(:body)
202 201 end
203 202  
... ...