Commit 763fff1bd6602f39f47784d7204eab131b60db50
1 parent
bf859260
Exists in
master
and in
29 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 | +}); | ... | ... |