clone sync of "unfriend" actions
This commit is contained in:
parent
8b1f9b1425
commit
8da548344b
@ -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