diff options
-rw-r--r-- | include/Contact.php | 67 | ||||
-rw-r--r-- | include/zot.php | 15 | ||||
-rw-r--r-- | mod/connedit.php | 14 |
3 files changed, 27 insertions, 69 deletions
diff --git a/include/Contact.php b/include/Contact.php index 787612c83..100854f0d 100644 --- a/include/Contact.php +++ b/include/Contact.php @@ -506,73 +506,6 @@ function contact_remove($channel_id, $abook_id) { } -// sends an unfriend message. Does not remove the contact - -function terminate_friendship($user,$self,$contact) { - - - $a = get_app(); - - require_once('include/datetime.php'); - - if($contact['network'] === NETWORK_DFRN) { - require_once('include/items.php'); - dfrn_deliver($user,$contact,'placeholder', 1); - } - -} - - -// Contact has refused to recognise us as a friend. We will start a countdown. -// If they still don't recognise us in 32 days, the relationship is over, -// and we won't waste any more time trying to communicate with them. -// This provides for the possibility that their database is temporarily messed -// up or some other transient event and that there's a possibility we could recover from it. - -if(! function_exists('mark_for_death')) { -function mark_for_death($contact) { - - if($contact['archive']) - return; - - if($contact['term_date'] == '0000-00-00 00:00:00') { - q("UPDATE `contact` SET `term_date` = '%s' WHERE `id` = %d LIMIT 1", - dbesc(datetime_convert()), - intval($contact['id']) - ); - } - else { - - // TODO: We really should send a notification to the owner after 2-3 weeks - // so they won't be surprised when the contact vanishes and can take - // remedial action if this was a serious mistake or glitch - - $expiry = $contact['term_date'] . ' + 32 days '; - if(datetime_convert() > datetime_convert('UTC','UTC',$expiry)) { - - // relationship is really truly dead. - // archive them rather than delete - // though if the owner tries to unarchive them we'll start the whole process over again - - q("update contact set `archive` = 1 where id = %d limit 1", - intval($contact['id']) - ); - - //contact_remove($contact['id']); - - } - } - -}} - -if(! function_exists('unmark_for_death')) { -function unmark_for_death($contact) { - // It's a miracle. Our dead contact has inexplicably come back to life. - q("UPDATE `contact` SET `term_date` = '%s' WHERE `id` = %d LIMIT 1", - dbesc('0000-00-00 00:00:00'), - intval($contact['id']) - ); -}} function random_profile() { $r = q("select xchan_url from xchan left join hubloc on hubloc_hash = xchan_hash where hubloc_connected > UTC_TIMESTAMP() - interval 30 day order by rand() limit 1"); diff --git a/include/zot.php b/include/zot.php index 5df217c03..971f91a3c 100644 --- a/include/zot.php +++ b/include/zot.php @@ -2230,6 +2230,21 @@ function process_channel_sync_delivery($sender,$arr,$deliveries) { $clean = array(); foreach($arr['abook'] as $abook) { + if($abook['abook_xchan'] && $abook['entry_deleted']) { + logger('process_channel_sync_delivery: removing abook entry for ' . $abook['abook_xchan']); + require_once('include/Contact.php'); + + $r = q("select abook_id from abook where abook_xchan = '%s' and abook_channel = %d and not ( abook_flags & %d ) limit 1", + dbesc($abook['abook_xchan']), + intval($channel['channel_id']), + intval(ABOOK_FLAG_SELF) + ); + if($r) + contact_remove($channel['channel_id'],$r[0]['abook_id']); + + continue; + } + // Perform discovery if the referenced xchan hasn't ever been seen on this hub. // This relies on the undocumented behaviour that red sites send xchan info with the abook diff --git a/mod/connedit.php b/mod/connedit.php index 30780180e..7d20890fa 100644 --- a/mod/connedit.php +++ b/mod/connedit.php @@ -359,11 +359,21 @@ function connedit_content(&$a) { if($cmd === 'drop') { require_once('include/Contact.php'); + // FIXME -// terminate_friendship($a->get_channel(),$orig_record[0]); +// We need to send either a purge or a refresh packet to the other side (the channel being unfriended). +// The issue is that the abook DB record _may_ get destroyed when we call contact_remove. As the notifier runs +// in the background there could be a race condition preventing this packet from being sent in all cases. +// PLACEHOLDER contact_remove(local_user(), $orig_record[0]['abook_id']); -// FIXME - send to clones + build_sync_packet(0 /* use the current local_user */, + array('abook' => array( + 'abook_xchan' => $orig_record[0]['abook_xchan'], + 'entry_deleted' => true) + ) + ); + info( t('Connection has been removed.') . EOL ); if(x($_SESSION,'return_url')) goaway($a->get_baseurl(true) . '/' . $_SESSION['return_url']); |