From eef054dc5eb8836e7864056109f17eb57d3777b6 Mon Sep 17 00:00:00 2001
From: maxwell <maxwell@maxwell-betty.(none)>
Date: Mon, 3 Oct 2011 22:46:34 -0700
Subject: [PATCH] wip

---
 app/helpers/comments_helper.rb             |   8 +++++---
 app/views/comments/_comment.html.haml      |   2 +-
 app/views/comments/_comments.html.haml     |   2 +-
 app/views/people/show.html.haml            |   2 +-
 app/views/posts/show.html.haml             |   2 +-
 app/views/posts/show.mobile.haml           |   2 +-
 app/views/shared/_stream.haml              |   4 +---
 app/views/shared/_stream_element.html.haml |   4 ++--
 diaspora_development                       | Bin 0 -> 140288 bytes
 diaspora_test                              | Bin 0 -> 141312 bytes
 lib/base_stream.rb                         |   4 ++++
 lib/stream/tag_stream.rb                   |  22 +++++++++++++--------
 12 files changed, 31 insertions(+), 21 deletions(-)
 create mode 100644 diaspora_development
 create mode 100644 diaspora_test

diff --git a/app/helpers/comments_helper.rb b/app/helpers/comments_helper.rb
index 1551aa41d4..192b2891aa 100644
--- a/app/helpers/comments_helper.rb
+++ b/app/helpers/comments_helper.rb
@@ -31,11 +31,13 @@ module CommentsHelper
     end
   end
 
-  def commenting_disabled?
+  def commenting_disabled?(post)
     return true unless user_signed_in?
     if defined?(@commenting_disabled)
-      return @commenting_disabled
-    else
+      @commenting_disabled
+    elsif defined?(@stream)
+      !@stream.can_comment?(post)
+    else 
       false
     end
   end
diff --git a/app/views/comments/_comment.html.haml b/app/views/comments/_comment.html.haml
index 365f57c363..fd8a9834ef 100644
--- a/app/views/comments/_comment.html.haml
+++ b/app/views/comments/_comment.html.haml
@@ -22,7 +22,7 @@
         .likes_container
           = render "likes/likes_container", :target_id => comment.id, :likes_count => comment.likes_count, :target_type => "Comment"
 
-      - unless commenting_disabled?
+      - unless commenting_disabled?(post)
         %span.like_action
           = like_action(comment, current_user)
 
diff --git a/app/views/comments/_comments.html.haml b/app/views/comments/_comments.html.haml
index 857c8f796b..b7df16c82c 100644
--- a/app/views/comments/_comments.html.haml
+++ b/app/views/comments/_comments.html.haml
@@ -13,6 +13,6 @@
     -else
       = render :partial => 'comments/comment', :collection => post.comments, :locals => {:post => post}
 
-  - unless commenting_disabled?
+  - unless commenting_disabled?(post)
     .new_comment_form_wrapper{:class => comment_form_wrapper_class(post)}
       = new_comment_form(post.id, current_user)
diff --git a/app/views/people/show.html.haml b/app/views/people/show.html.haml
index 27887dd228..10ccd99375 100644
--- a/app/views/people/show.html.haml
+++ b/app/views/people/show.html.haml
@@ -31,7 +31,7 @@
         = render 'photos/index', :photos => @posts
       - else
         #main_stream.stream
-          = render 'shared/stream', :posts => @posts, :commenting_disabled => commenting_disabled? 
+          = render 'shared/stream', :posts => @posts
           #pagination
             =link_to(t('more'), next_page_path, :class => 'paginate')
 
diff --git a/app/views/posts/show.html.haml b/app/views/posts/show.html.haml
index bed2cdd685..effc52129e 100644
--- a/app/views/posts/show.html.haml
+++ b/app/views/posts/show.html.haml
@@ -8,7 +8,7 @@
     - if @post.is_a?(Photo)
       = render 'posts/photo', :post => @post
     - else
-      = render 'shared/stream_element', :post => @post, :commenting_disabled => commenting_disabled?
+      = render 'shared/stream_element', :post => @post, :commenting_disabled => commenting_disabled?(@post)
   %br
   %br
   %br
diff --git a/app/views/posts/show.mobile.haml b/app/views/posts/show.mobile.haml
index 767952d8df..84d886908f 100644
--- a/app/views/posts/show.mobile.haml
+++ b/app/views/posts/show.mobile.haml
@@ -4,4 +4,4 @@
 
 .stream
   = render :partial => 'shared/stream_element',
-    :locals => {:post => @post, :commenting_disabled => commenting_disabled?, :expanded_info => true}
+    :locals => {:post => @post, :commenting_disabled => commenting_disabled?(@post), :expanded_info => true}
diff --git a/app/views/shared/_stream.haml b/app/views/shared/_stream.haml
index ee849ca112..74a06e827e 100644
--- a/app/views/shared/_stream.haml
+++ b/app/views/shared/_stream.haml
@@ -4,6 +4,4 @@
 
 = render :partial => 'shared/stream_element',
          :collection => posts,
-         :as => :post,
-         :locals => { :commenting_disabled => commenting_disabled?}
-
+         :as => :post
diff --git a/app/views/shared/_stream_element.html.haml b/app/views/shared/_stream_element.html.haml
index 38ddc9079a..e2f3dcb1cc 100644
--- a/app/views/shared/_stream_element.html.haml
+++ b/app/views/shared/_stream_element.html.haml
@@ -68,7 +68,7 @@
           &ndash;
 
 
-        - unless commenting_disabled?
+        - unless commenting_disabled?(post)
           %span.like_action
             = like_action(post, current_user)
 
@@ -84,4 +84,4 @@
         .likes_container
           = render "likes/likes_container", :target_id => post.id, :likes_count => post.likes_count, :current_user => current_user, :target_type => "Post"
 
-      = render "comments/comments", :post => post, :current_user => current_user, :commenting_disabled => commenting_disabled?
+      = render "comments/comments", :post => post, :current_user => current_user, :commenting_disabled => commenting_disabled?(post)
diff --git a/diaspora_development b/diaspora_development
new file mode 100644
index 0000000000000000000000000000000000000000..ae9b55f6705a2a6fb3552d894ef0719d1f9040b5
GIT binary patch
literal 140288
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

literal 0
HcmV?d00001

diff --git a/diaspora_test b/diaspora_test
new file mode 100644
index 0000000000000000000000000000000000000000..9bfaabec20ff7322898ff7923f608589e0875e17
GIT binary patch
literal 141312
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
Y_Idlmd|i$x5wNpt?EhxS;rjpo2egiys{jB1

literal 0
HcmV?d00001

diff --git a/lib/base_stream.rb b/lib/base_stream.rb
index d8c0cefcf5..780ed6e37d 100644
--- a/lib/base_stream.rb
+++ b/lib/base_stream.rb
@@ -14,6 +14,10 @@ class BaseStream
     Rails.application.routes.url_helpers.mentions_path(opts)
   end
 
+  def can_comment?(post)
+    true
+  end
+
   def title
     'a title'
   end
diff --git a/lib/stream/tag_stream.rb b/lib/stream/tag_stream.rb
index 772a933a0f..3a96d82876 100644
--- a/lib/stream/tag_stream.rb
+++ b/lib/stream/tag_stream.rb
@@ -14,16 +14,12 @@ class TagStream < BaseStream
 
   # @return [ActiveRecord::Association<Post>] AR association of posts
   def posts
-    if tag_string.empty?
-      []
-    else
-      @posts ||= StatusMessage.owned_or_visible_by_user(user).
-        joins(:tags).where(:tags => {:name => tag_array}).
-        for_a_stream(@max_time, @order)
-    end
+    return [] if tag_string.empty?
+    @posts ||= StatusMessage.owned_or_visible_by_user(user).
+                joins(:tags).where(:tags => {:name => tag_array}).
+                for_a_stream(@max_time, @order)
   end
 
-  # @return [ActiveRecord::Association<Person>] AR association of people within stream's given aspects
   def people
     @people ||= posts.map{|p| p.author}.uniq 
   end
@@ -32,6 +28,16 @@ class TagStream < BaseStream
     I18n.translate('streams.tags.contacts_title')
   end
 
+  def can_comment_on?(post)
+    @can_comment_cache ||= {}
+    @can_comment_cache[post.id] ||= contacts_in_stream.find{|contact| contact.person_id == post.author.id}.present?
+    @can_comment_cache[post.id]
+  end
+
+  def contacts_in_stream
+    @contacts_in_stream ||= Contact.where(:user => user, :person => people).all
+  end
+
   private
 
   def tag_string
-- 
GitLab