Commit 763fff1bd6602f39f47784d7204eab131b60db50
1 parent
bf859260
Exists in
master
and in
28 other branches
Conflicts:
app/controllers/public/profile_controller.rb
Showing
9 changed files
with
143 additions
and
31 deletions
Show diff stats
app/controllers/public/profile_controller.rb
... | ... | @@ -185,7 +185,9 @@ class ProfileController < PublicController |
185 | 185 | def leave_comment_on_activity |
186 | 186 | @comment = Comment.new(params[:comment]) |
187 | 187 | @comment.author = user |
188 | - @activity = ActionTracker::Record.find(params[:comment][:source_id]) | |
188 | + @activity = ActionTracker::Record.find(params[:source_id]) | |
189 | + #FIXME pq n colocar source direto? | |
190 | + #@comment.source = ActionTracker::Record.find(params[:source_id]) | |
189 | 191 | @comment.source_type, @comment.source_id = (@activity.target_type == 'Article' ? ['Article', @activity.target_id] : [@activity.class.to_s, @activity.id]) |
190 | 192 | @tab_action = params[:tab_action] |
191 | 193 | @message = @comment.save ? _("Comment successfully added.") : _("You can't leave an empty comment.") | ... | ... |
app/models/community.rb
... | ... | @@ -79,4 +79,8 @@ class Community < Organization |
79 | 79 | {:title => __('Community Info and settings'), :icon => 'edit-profile-group'} |
80 | 80 | end |
81 | 81 | |
82 | + def activities | |
83 | + Scrap.find_by_sql("SELECT id, updated_at, '#{Scrap.to_s}' AS klass FROM #{Scrap.table_name} WHERE scraps.receiver_id = #{self.id} AND scraps.scrap_id IS NULL UNION SELECT id, updated_at, '#{ActionTracker::Record.to_s}' AS klass FROM #{ActionTracker::Record.table_name} WHERE action_tracker.target_id = #{self.id} ORDER BY updated_at DESC") | |
84 | + end | |
85 | + | |
82 | 86 | end | ... | ... |
app/models/scrap.rb
... | ... | @@ -11,10 +11,6 @@ class Scrap < ActiveRecord::Base |
11 | 11 | |
12 | 12 | named_scope :not_replies, :conditions => {:scrap_id => nil} |
13 | 13 | |
14 | -######### COMO OS AMIGOS VÃO SABER Q O AMIGO RECEBEU COMENTÁRIO? ACHO QUE TEM QUE TER AÇÃO | |
15 | -# track_actions :leave_scrap, :after_create, :keep_params => ['sender.name', 'content', 'receiver.name', 'receiver.url'], :if => Proc.new{|s| s.receiver != s.sender}, :custom_target => :action_tracker_target | |
16 | -# track_actions :leave_scrap_to_self, :after_create, :keep_params => ['sender.name', 'content'], :if => Proc.new{|s| s.receiver == s.sender} | |
17 | - | |
18 | 14 | after_create do |scrap| |
19 | 15 | scrap.root.update_attribute('updated_at', DateTime.now) unless scrap.root.nil? |
20 | 16 | Scrap::Notifier.deliver_mail(scrap) if scrap.send_notification? | ... | ... |
app/views/profile/_profile_activities_scraps.rhtml
1 | 1 | <% activities.each do |a| %> |
2 | 2 | <% activity = a.klass.constantize.find(a.id) %> |
3 | - <% if activity.kind_of?(ActionTracker::Record) && @profile.person? %> | |
3 | + <% if activity.kind_of?(ActionTracker::Record) %> | |
4 | 4 | <%= render :partial => 'profile_activity', :locals => {:activity => activity} %> |
5 | 5 | <% else %> |
6 | 6 | <%= render :partial => 'profile_scrap', :locals => {:scrap => activity } %> | ... | ... |
app/views/profile/_profile_activity.rhtml
... | ... | @@ -10,18 +10,6 @@ |
10 | 10 | <%= render :partial => 'comment', :collection => activity.comments %> |
11 | 11 | </ul> |
12 | 12 | |
13 | - <div id='profile-wall-reply-<%= activity.id%>' style='display:none;width:auto;'> | |
14 | - <div id='profile-wall-reply-form-<%= activity.id%>' style='display:none;'> | |
15 | - <p class='profile-wall-reply'> | |
16 | - <% form_remote_tag :url => {:controller => 'profile', :action => 'leave_comment_on_activity'}, :update => "profile_activities", :success =>"hide_and_show(['#profile-wall-reply-form-#{activity.id}'],['#profile-wall-reply-response-#{activity.id}'])" do %> | |
17 | - <%= limited_text_area :comment, :body, 420, "reply_content_#{activity.id}", :cols => 50, :rows => 2 %> | |
18 | - <%= hidden_field :comment, :source_id, :id => "activity_id_#{activity.id}" %> | |
19 | - <%= submit_button :add, _('Leave a comment') %> | |
20 | - <%= button_to_function :cancel, _('Cancel'), "hide_and_show(['#profile-wall-reply-#{activity.id}'],[]);return false" %> | |
21 | - <% end %> | |
22 | - </p> | |
23 | - </div> | |
24 | - <div id='profile-wall-message-response-<%=activity.id%>' class='profile-wall-message-response'></div> | |
25 | - </div> | |
13 | + <%= render :partial => 'profile_comment_form', :locals => { :activity => activity } %> | |
26 | 14 | |
27 | 15 | </li> | ... | ... |
... | ... | @@ -0,0 +1,11 @@ |
1 | +<div id='profile-wall-reply-<%= activity.id%>'> | |
2 | + <div id='profile-wall-reply-form-<%= activity.id%>'> | |
3 | + <p class='profile-wall-reply'> | |
4 | + <% form_tag :url => {:controller => 'profile', :action => 'leave_comment_on_activity'}, :update => 'profile_activities' do %> | |
5 | + <%= text_area :comment, :body, {:id => "reply_content_#{activity.id}", :cols => 50, :rows => 1, :class => 'submit-with-keypress'} %> | |
6 | + <%= hidden_field_tag :source_id, activity.id, :id => "activity_id_#{activity.id}" %> | |
7 | + <% end %> | |
8 | + </p> | |
9 | + </div> | |
10 | + <div id='profile-wall-message-response-<%=activity.id%>' class='profile-wall-message-response'></div> | |
11 | +</div> | ... | ... |
config/environments/development.rb
1 | 1 | # Settings specified here will take precedence over those in config/environment.rb |
2 | 2 | |
3 | -# In the development environment your application's code is reloaded on | |
4 | -# every request. This slows down response time but is perfect for development | |
5 | -# since you don't have to restart the webserver when you make code changes. | |
6 | -config.cache_classes = false | |
3 | +# The production environment is meant for finished, "live" apps. | |
4 | +# Code is not reloaded between requests | |
5 | +config.cache_classes = true | |
7 | 6 | |
8 | -# Log error messages when you accidentally call methods on nil. | |
9 | -config.whiny_nils = true | |
7 | +# Use a different logger for distributed setups | |
8 | +# config.logger = SyslogLogger.new | |
10 | 9 | |
11 | -# Show full error reports and disable caching | |
12 | -config.action_controller.consider_all_requests_local = true | |
13 | -config.action_view.debug_rjs = true | |
14 | -config.action_controller.perform_caching = false | |
10 | +# Full error reports are disabled and caching is turned on | |
11 | +config.action_controller.consider_all_requests_local = false | |
12 | +config.action_controller.perform_caching = true | |
13 | +config.action_view.cache_template_loading = true | |
15 | 14 | |
16 | -# Don't care if the mailer can't send | |
17 | -config.action_mailer.raise_delivery_errors = false | |
15 | +# Enable serving of images, stylesheets, and javascripts from an asset server | |
16 | +# config.action_controller.asset_host = "http://assets.example.com" | |
17 | + | |
18 | +# Disable delivery errors, bad email addresses will be ignored | |
19 | +# config.action_mailer.raise_delivery_errors = false | |
20 | + | |
21 | +config.cache_store = :mem_cache_store, "localhost" | ... | ... |
... | ... | @@ -0,0 +1,86 @@ |
1 | +Feature: list activities of a profile | |
2 | + As a visitor | |
3 | + I want to see the activities of a profile | |
4 | + | |
5 | + Background: | |
6 | + Given the following users | |
7 | + | login | name | | |
8 | + | joaosilva | Joao Silva | | |
9 | + And the following articles | |
10 | + | owner | name | body | | |
11 | + | booking | article to comment | first paragraph | | |
12 | + And the following comments | |
13 | + | article | author | title | body | | |
14 | + | article with comment | booking | hi | how are you? | | |
15 | + | |
16 | + Scenario: see the activity of a profile | |
17 | + Given I am logged in as "joaosilva" | |
18 | + When I go to Jose Silva's homepage | |
19 | + Then I should see "first paragraph" within ".profile-activity-item" | |
20 | + And I should see "how are you?" within ".profile-wall-activities-comments" | |
21 | + | |
22 | + @selenium | |
23 | + Scenario: post a comment while not authenticated | |
24 | + Given I am on /booking/article-to-comment | |
25 | + And I fill in "Name" with "Joey Ramone" | |
26 | + And I fill in "e-mail" with "joey@ramones.com" | |
27 | + And I fill in "Title" with "Hey ho, let's go!" | |
28 | + And I fill in "Enter your comment" with "Hey ho, let's go!" | |
29 | + When I press "Post comment" | |
30 | + Then I should see "Hey ho, let's go" | |
31 | + | |
32 | + @selenium | |
33 | + Scenario: post comment while authenticated | |
34 | + Given I am logged in as "booking" | |
35 | + And I am on /booking/article-to-comment | |
36 | + And I fill in "Title" with "Hey ho, let's go!" | |
37 | + And I fill in "Enter your comment" with "Hey ho, let's go!" | |
38 | + When I press "Post comment" | |
39 | + Then I should see "Hey ho, let's go" | |
40 | + | |
41 | + @selenium | |
42 | + Scenario: redirect to right place after comment a picture | |
43 | + Given the following files | |
44 | + | owner | file | mime | | |
45 | + | booking | rails.png | image/png | | |
46 | + Given I am logged in as "booking" | |
47 | + And I am on /booking/rails.png?view=true | |
48 | + And I fill in "Title" with "Hey ho, let's go!" | |
49 | + And I fill in "Enter your comment" with "Hey ho, let's go!" | |
50 | + When I press "Post comment" | |
51 | + Then I should be exactly on /booking/rails.png?view=true | |
52 | + | |
53 | + @selenium | |
54 | + Scenario: show error messages when make a blank comment | |
55 | + Given I am logged in as "booking" | |
56 | + And I am on /booking/article-to-comment | |
57 | + When I press "Post comment" | |
58 | + Then I should see "Title can't be blank" | |
59 | + And I should see "Body can't be blank" | |
60 | + | |
61 | + @selenium | |
62 | + Scenario: disable post comment button | |
63 | + Given I am on /booking/article-to-comment | |
64 | + And I fill in "Name" with "Joey Ramone" | |
65 | + And I fill in "e-mail" with "joey@ramones.com" | |
66 | + And I fill in "Title" with "Hey ho, let's go!" | |
67 | + And I fill in "Enter your comment" with "Hey ho, let's go!" | |
68 | + When I press "Post comment" | |
69 | + Then the "value.Post comment" button should not be enabled | |
70 | + And I should see "Hey ho, let's go" | |
71 | + | |
72 | + @selenium | |
73 | + Scenario: render comment form and go to bottom | |
74 | + Given I am on /booking/article-with-comment | |
75 | + When I follow "Post a comment" within ".post-comment-button" | |
76 | + Then I should see "Enter your comment" within "div#page-comment-form div.post_comment_box.opened" | |
77 | + And I should be exactly on /booking/article-with-comment | |
78 | + And I should be moved to anchor "comment_form" | |
79 | + | |
80 | + @selenium | |
81 | + Scenario: keep comments field filled while trying to do a comment | |
82 | + Given I am on /booking/article-with-comment | |
83 | + And I fill in "Name" with "Joey Ramone" | |
84 | + When I press "Post comment" | |
85 | + Then the "Name" field should contain "Joey Ramone" | |
86 | + And I should see "errors prohibited" | ... | ... |
public/javascripts/application.js
... | ... | @@ -711,3 +711,24 @@ Array.min = function(array) { |
711 | 711 | return Math.min.apply(Math, array); |
712 | 712 | }; |
713 | 713 | |
714 | +jQuery(function($){ | |
715 | + $('.submit-with-keypress').live('keydown', function(e) { | |
716 | + field = this; | |
717 | + if (e.keyCode == 13) { | |
718 | + e.preventDefault(); | |
719 | + var form = $(field).closest("form"); | |
720 | + $.ajax({ | |
721 | + url: form.attr("action"), | |
722 | + data: form.serialize(), | |
723 | + beforeSend: function() { | |
724 | + loading_for_button($(field)); | |
725 | + }, | |
726 | + success: function(data) { | |
727 | + $('#profile_activities').html(data); | |
728 | + $('.submit-with-keypress').val(''); | |
729 | + } | |
730 | + }); | |
731 | + return false; | |
732 | + } | |
733 | + }); | |
734 | +}); | ... | ... |