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() {
|
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");
|
$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();
|
$clean = array();
|
||||||
foreach($arr['abook'] as $abook) {
|
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.
|
// 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
|
// 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') {
|
if($cmd === 'drop') {
|
||||||
|
|
||||||
require_once('include/Contact.php');
|
require_once('include/Contact.php');
|
||||||
|
|
||||||
// FIXME
|
// 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']);
|
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 );
|
info( t('Connection has been removed.') . EOL );
|
||||||
if(x($_SESSION,'return_url'))
|
if(x($_SESSION,'return_url'))
|
||||||
goaway($a->get_baseurl(true) . '/' . $_SESSION['return_url']);
|
goaway($a->get_baseurl(true) . '/' . $_SESSION['return_url']);
|
||||||
|
Reference in New Issue
Block a user