clone sync of "unfriend" actions
This commit is contained in:
		| @@ -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"); | ||||
|   | ||||
| @@ -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 | ||||
|  | ||||
|   | ||||
| @@ -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']); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user