Commit 7ace73b8 authored by maxwell's avatar maxwell Committed by zhitomirskiyi

iz ms wip fixing contactController destroy

parent 8c2e6dd8
......@@ -30,6 +30,16 @@ class ContactsController < ApplicationController
end
end
def destroy
contact = current_user.contacts.where(:id => params[:id]).first
if current_user.disconnect(contact)
flash[:notice] = I18n.t('contacts.destroy.success', :name => contact.person.name)
else
flash[:error] = I18n.t('contacts.destroy.failure', :name => contact.person.name)
end
redirect_to contact.person
end
private
def request_to_aspect(aspect, person)
......
......@@ -76,11 +76,6 @@ class PeopleController < ApplicationController
end
end
def destroy
current_user.disconnect(Person.where(:id => params[:id]).first)
redirect_to root_url
end
def retrieve_remote
if params[:diaspora_handle]
webfinger(params[:diaspora_handle], :single_aspect_form => true)
......
......@@ -2,7 +2,7 @@
-# licensed under the Affero General Public License version 3 or later. See
-# the COPYRIGHT file.
.aspect_list#aspects_list{:data=>{:person_id=>person.id}}
.aspect_list#aspects_list(( {:data=>{:contact_id=>contact.id} }) if contact)
%ul
- for aspect in aspects_with_person
= render :partial => 'aspects/aspect_list_item',
......@@ -30,4 +30,4 @@
.right
= link_to t('aspects.aspect_contacts.done_editing'), "#", :class => "button", :onClick => '$.facebox.close();'
- if contact
= link_to t('people.profile_sidebar.remove_contact'), person, :confirm => t('are_you_sure'), :method => :delete
= link_to t('people.profile_sidebar.remove_contact'), contact, :confirm => t('are_you_sure'), :method => :delete
......@@ -7,7 +7,7 @@
= search_field_tag :contact_search, "", :class => 'contact_list_search', :results => 5, :placeholder => t('.all_contacts')
%ul
- for contact in contacts
%li{:data=>{:guid=>contact.person.id}}
%li{:data=>{:contact_id=>contact.id}}
= person_image_tag contact.person
%h4.name
= link_to contact.person.name, contact.person
......
......@@ -39,6 +39,9 @@ en:
one: "1 contact"
few: "%{count} contacts"
other: "%{count} contacts"
destroy:
success: "Successfully disconnected from %{name}"
failure: "Failed to disconnect from %{name}"
new_requests:
zero: "no new requests"
one: "new request!"
......
......@@ -74,18 +74,19 @@ module Diaspora
end
def disconnect(bad_contact)
Rails.logger.info("event=disconnect user=#{diaspora_handle} target=#{bad_contact.diaspora_handle}")
person = bad_contact.person
Rails.logger.info("event=disconnect user=#{diaspora_handle} target=#{person.diaspora_handle}")
retraction = Retraction.for(self)
retraction.subscribers = [bad_contact]#HAX
retraction.subscribers = [person]#HAX
Postzord::Dispatch.new(self, retraction).post
remove_contact(bad_contact)
end
def remove_contact(bad_person)
contact = contact_for(bad_person)
posts = raw_visible_posts.where(:person_id => bad_person.id).all
def remove_contact(contact)
bad_person_id = contact.person_id
posts = raw_visible_posts.where(:person_id => bad_person_id).all
visibilities = PostVisibility.joins(:post, :aspect).where(
:posts => {:person_id => bad_person.id},
:posts => {:person_id => bad_person_id},
:aspects => {:user_id => self.id}
)
visibility_ids = visibilities.map{|v| v.id}
......@@ -95,12 +96,12 @@ module Diaspora
post.destroy
end
end
raise "Contact not deleted" unless contact.destroy
contact.destroy
end
def disconnected_by(bad_contact)
Rails.logger.info("event=disconnected_by user=#{diaspora_handle} target=#{bad_contact.diaspora_handle}")
remove_contact bad_contact
def disconnected_by(person)
Rails.logger.info("event=disconnected_by user=#{diaspora_handle} target=#{person.diaspora_handle}")
remove_contact(self.contact_for(person))
end
def activate_contact(person, aspect)
......
......@@ -4,6 +4,7 @@ namespace :backup do
require 'cloudfiles'
task :mysql do
NUMBER_OF_DAYS = 3
puts("event=backup status=start type=mysql")
db = YAML::load(File.open(File.join(File.dirname(__FILE__), '..','..', 'config', 'database.yml')))
user = db['production']['user']
......@@ -28,6 +29,12 @@ namespace :backup do
puts("event=backup status=success type=mysql")
`rm /tmp/backup/#{tar_name}`
`rm -rf /tmp/backup/mysql/`
files = mysql_container.objects
files.sort!.pop(NUMBER_OF_DAYS * 24)
files.each do |file|
mysql_container.delete_object(file)
end
else
puts("event=backup status=failure type=mysql")
end
......
......@@ -22,13 +22,13 @@ var List = {
});
});
},
disconnectUser: function(person_id){
disconnectUser: function(contact_id){
$.ajax({
url: "/people/" + person_id,
url: "/contacts/" + contact_id,
type: "DELETE",
success: function(){
if( $('.contact_list').length == 1){
$('.contact_list li[data-guid='+person_id+']').fadeOut(200);
$('.contact_list li[data-contact_id='+contact_id+']').fadeOut(200);
} else if($('#aspects_list').length == 1) {
$.facebox.close();
};
......@@ -60,16 +60,16 @@ $(document).ready(function() {
$('.added').live('ajax:failure', function(data, html, xhr) {
if(confirm(Diaspora.widgets.i18n.t('shared.contact_list.cannot_remove'))){
var person_id;
var contact_id;
if( $('.contact_list').length == 1){
person_id = $(this).parents('li').attr("data-guid");
$('.contact_list li[data-guid='+person_id+']').fadeOut(200);
contact_id = $(this).parents('li').attr("data-contact_id");
$('.contact_list li[data-contact_id='+contact_id+']').fadeOut(200);
} else if($('#aspects_list').length == 1) {
person_id = $(this).parents('#aspects_list').attr("data-person_id");
contact_id = $(this).parents('#aspects_list').attr("data-contact_id");
};
List.disconnectUser(person_id);
List.disconnectUser(contact_id);
};
$(this).fadeTo(200,1);
});
......@@ -88,7 +88,11 @@ $(document).ready(function() {
$(".badges").prepend(json.badge_html);
$(this).parent().html(json.button_html);
$('.aspect_list ul').find('.add').each(function(a,b){$(b).attr('href', $(b).attr('href').replace('contacts','aspect_memberships'));})
if($('#aspects_list').length == 1) {
$('.aspect_list').attr('data-contact_id', json.contact_id);
alert('^- TODO');
$('.aspect_list ul').find('.add').each(function(a,b){$(b).attr('href', $(b).attr('href').replace('contacts','aspect_memberships'));})
};
$(this).fadeTo(200,1);
});
......
......@@ -24,7 +24,7 @@ describe ContactsController do
request.env["HTTP_REFERER"] = 'http://' + request.host
end
describe 'new' do
describe '#new' do
it 'succeeds' do
pending "This is going to be new request"
......@@ -33,7 +33,7 @@ describe ContactsController do
end
end
describe 'create' do
describe '#create' do
context 'with an incoming request' do
before do
@user3 = Factory.create(:user)
......@@ -74,4 +74,28 @@ describe ContactsController do
end
end
end
describe '#destroy' do
it 'disconnects from the person' do
@user.should_receive(:disconnect).with(@contact)
delete :destroy, :id => @contact.id
end
it 'flases success if the contact is not destroyed' do
@user.stub!(:disconnect).and_return(true)
delete :destroy, :id => @contact.id
flash[:notice].should_not be_empty
end
it 'flases failure if the contact is not destroyed' do
@user.stub!(:disconnect).and_return(false)
delete :destroy, :id => @contact.id
flash[:error].should_not be_empty
end
it 'redirects back to the person page' do
delete :destroy, :id => @contact.id
response.should redirect_to(@contact.person)
end
end
end
......@@ -20,6 +20,8 @@ describe 'a user receives a post' do
@user3 = eve
@aspect3 = @user3.aspects.first
@contact = @user1.contact_for(@user2.person)
end
it 'streams only one message to the everyone aspect when a multi-aspected contacts posts' do
......@@ -89,7 +91,7 @@ describe 'a user receives a post' do
end
it 'removes posts upon disconnecting' do
@user1.disconnect(@user2.person)
@user1.disconnect(@contact)
@user1.reload
@user1.raw_visible_posts.should_not include @status_message
end
......@@ -128,7 +130,7 @@ describe 'a user receives a post' do
@status_message.reload
@status_message.user_refs.should == 3
@user1.disconnect(@user2.person)
@user1.disconnect(@contact)
@status_message.reload
@status_message.user_refs.should == 2
end
......@@ -146,7 +148,7 @@ describe 'a user receives a post' do
@status_message.post_visibilities.reset
@status_message.user_refs.should == 4
@user1.disconnect(@user2.person)
@user1.disconnect(@contact)
@status_message.post_visibilities.reset
@status_message.user_refs.should == 3
end
......
......@@ -138,14 +138,14 @@ describe Person do
it 'should not delete an orphaned contact' do
@user.activate_contact(@person, @aspect)
lambda {@user.disconnect(@person)}.should_not change(Person, :count)
lambda {@user.disconnect(@user.contact_for(@person))}.should_not change(Person, :count)
end
it 'should not delete an un-orphaned contact' do
@user.activate_contact(@person, @aspect)
@user2.activate_contact(@person, @aspect2)
lambda {@user.disconnect(@person)}.should_not change(Person, :count)
lambda {@user.disconnect(@user.contact_for(@person))}.should_not change(Person, :count)
end
end
......
......@@ -250,7 +250,7 @@ describe Diaspora::UserModules::Connecting do
it 'should disconnect the other user on the same seed' do
lambda {
user2.disconnect user.person }.should change {
user2.disconnect user2.contact_for(user.person) }.should change {
user2.reload.contacts.count }.by(-1)
aspect2.reload.contacts.count.should == 0
end
......@@ -280,14 +280,14 @@ describe Diaspora::UserModules::Connecting do
it "deletes the disconnected user's posts from visible_posts" do
user2.reload.raw_visible_posts.include?(@message).should be_true
user2.disconnect user.person
user2.disconnect user2.contact_for(user.person)
user2.reload.raw_visible_posts.include?(@message).should be_false
end
it "deletes the disconnected user's posts from the aspect's posts" do
Post.count.should == 1
aspect2.reload.posts.include?(@message).should be_true
user2.disconnect user.person
user2.disconnect user2.contact_for(user.person)
aspect2.reload.posts.include?(@message).should be_false
Post.count.should == 1
end
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment