aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/Contact.php67
-rw-r--r--include/zot.php15
-rw-r--r--mod/connedit.php14
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']);