diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index c3b74a861..291246750 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -19,7 +19,6 @@ class ApplicationController < ActionController::Base if current_user @groups = current_user.groups @friends = current_user.friends - @latest_status_message = StatusMessage.newest_for(current_user.person) @group = params[:group] ? current_user.group_by_id(params[:group]) : current_user.groups.first end end diff --git a/app/controllers/status_messages_controller.rb b/app/controllers/status_messages_controller.rb index f941389a5..9b363032e 100644 --- a/app/controllers/status_messages_controller.rb +++ b/app/controllers/status_messages_controller.rb @@ -3,12 +3,9 @@ class StatusMessagesController < ApplicationController def index @status_messages = StatusMessage.paginate :page => params[:page], :order => 'created_at DESC' - - respond_to do |format| format.html end - end def create diff --git a/app/models/group.rb b/app/models/group.rb index 0ff534bea..275bbf3a5 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -6,9 +6,11 @@ class Group key :person_ids, Array key :request_ids, Array + key :post_ids, Array many :people, :in => :person_ids, :class_name => 'Person' many :requests, :in => :request_ids, :class_name => 'Request' + many :posts, :in => :post_ids, :class_name => 'Post' belongs_to :user, :class_name => 'User' diff --git a/app/models/user.rb b/app/models/user.rb index 71936d688..e4406c0a6 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -41,6 +41,10 @@ class User ######## Posting ######## def post(class_name, options = {}) options[:person] = self.person + + group_id = options[:group_id] + options.delete(:group_id) + model_class = class_name.to_s.camelize.constantize post = model_class.instantiate(options) post.creator_signature = post.sign_with_key(encryption_key) @@ -51,6 +55,12 @@ class User self.raw_visible_posts << post self.save + + if group_id + group = self.groups.find_by_id(group_id) + group.posts << post + group.save + end post end @@ -58,7 +68,7 @@ class User def visible_posts( opts = {} ) if opts[:by_members_of] group = self.groups.find_by_id( opts[:by_members_of].id ) - self.raw_visible_posts.find_all_by_person_id( (group.person_ids + [self.person.id] ), :order => "created_at desc") + group.posts end end @@ -258,16 +268,18 @@ class User self.raw_visible_posts << object self.save + groups = self.groups_with_person(object.person) + groups.each{ |group| group.posts << object + group.save + } + + groups = groups_with_person(object.person) + object.socket_to_uid(id, :group_id => group.id) if (object.respond_to?(:socket_to_uid) && !self.owns?(object)) end - socket(object) if (object.respond_to?(:socket_to_uid) && !self.owns?(object)) end ###Helpers############ - def socket( object ) - groups = groups_with_person(object.person) - object.socket_to_uid(id, :group_id => group.id) - end def self.instantiate( opts = {} ) opts[:person][:email] = opts[:email] diff --git a/app/views/groups/index.html.haml b/app/views/groups/index.html.haml index e4d1ecca2..4ed9db19e 100644 --- a/app/views/groups/index.html.haml +++ b/app/views/groups/index.html.haml @@ -2,7 +2,7 @@ welcome home, = current_user.profile.first_name -= render "shared/publisher" += render "shared/publisher", :group_id => @group.id %ul#stream - for post in @posts diff --git a/app/views/groups/show.html.haml b/app/views/groups/show.html.haml index daaaaaabc..73f799c72 100644 --- a/app/views/groups/show.html.haml +++ b/app/views/groups/show.html.haml @@ -1,4 +1,4 @@ -= render "shared/publisher" += render "shared/publisher", :group_id => @group.id %ul#stream - for post in @posts = render type_partial(post), :post => post diff --git a/app/views/shared/_group_nav.haml b/app/views/shared/_group_nav.haml index 66f4fa0bd..455d90bb4 100644 --- a/app/views/shared/_group_nav.haml +++ b/app/views/shared/_group_nav.haml @@ -14,7 +14,12 @@ #friend_pictures - for friend in @group.people = person_image_link(friend) - = link_to "+", "#add_request_pane", :id => 'add_request_button', :class => "add_new" + = link_to (image_tag 'add_friend_button.png'), "#add_request_pane", :id => 'add_request_button' + + - if @group.people.count == 0 + %span.add_new_description + << click the plus to add friends to this group + .yo{:style => 'display:none'} #add_request_pane diff --git a/app/views/shared/_publisher.haml b/app/views/shared/_publisher.haml index 4d2f8640b..fe52ac354 100644 --- a/app/views/shared/_publisher.haml +++ b/app/views/shared/_publisher.haml @@ -3,6 +3,9 @@ #publisher_form = form_for StatusMessage.new, :remote => true do |f| = f.error_messages + + = f.hidden_field :group_id, :value => group_id + %p %label{:for => "status_message_message"} Message = f.text_area :message, :rows => 2 diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index 18289b738..a5b4b5fc6 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -430,24 +430,21 @@ h1.big_text { #group ul > li.selected, #group ul > li.selected a { color: white; font-weight: bold; - font-size: 18px; - text-shadow: 0 2px 0px black; } + font-size: 18px; } #group a { color: #aaaaaa; font-weight: normal; } - #group #friend_pictures .add_new { + #group #friend_pictures .add_new_description { position: relative; - display: inline-block; height: 40px; - width: 40px; - background-color: black; - text-align: center; - font-size: 40px; + display: inline-block; + background-color: #222222; + color: #999999; + top: -16px; line-height: 40px; - top: -6px; } - #group #friend_pictures .add_new:hover { - background: #999999; - color: black; } + padding: 0 1em; + margin-bottom: -20px; + font-style: italic; } #group #friend_pictures img { height: 40px; } diff --git a/public/stylesheets/sass/application.sass b/public/stylesheets/sass/application.sass index 0ac9dbfce..b41a1120a 100644 --- a/public/stylesheets/sass/application.sass +++ b/public/stylesheets/sass/application.sass @@ -546,21 +546,22 @@ h1.big_text :weight normal #friend_pictures - .add_new - :position relative - :display inline-block - :height 40px - :width 40px - :background - :color #000 - :text-align center - :font-size 40px - :line-height 40px - :top -6px - &:hover - :background #999 - :color #000 + .add_new_description + :position relative + :height 40px + :display inline-block + :background + :color #222 + :color #999 + :top -16px + :line + :height 40px + :padding 0 1em + :margin + :bottom -20px + :font + :style italic img :height 40px diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb index 1d0f400d5..26f3397d4 100644 --- a/spec/models/group_spec.rb +++ b/spec/models/group_spec.rb @@ -33,7 +33,6 @@ describe Group do group.people.include?(@friend_2).should be true group.people.size.should == 2 end - end describe 'querying' do @@ -52,4 +51,31 @@ describe Group do @group.people.size.should == 1 end end + + describe 'posting' do + + it 'should add post to group via post method' do + @group = @user.group(:name => 'losers', :people => [@friend]) + + status_message = @user.post( :status_message, :message => "hey", :group_id => @group.id ) + + @group.reload + @group.posts.include?(status_message).should be true + end + + it 'should add post to group via receive method' do + group = @user.group(:name => 'losers') + group2 = @user2.group(:name => 'winners') + friend_users(@user, group, @user2, group2) + + message = @user2.post(:status_message, :message => "Hey Dude") + + @user.receive message.to_diaspora_xml + + group.reload + group.posts.include?(message).should be true + @user.visible_posts(:by_members_of => group).include?(message).should be true + end + + end end