From e480da788e7d44f0704441f8879c5ff93d98eaf0 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 30 Aug 2018 08:27:31 -0400 Subject: [PATCH] Fix unfollow for sharing-only contacts - Add removal when unfollowing sharing-only contacts --- mod/unfollow.php | 46 +++++++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/mod/unfollow.php b/mod/unfollow.php index 5c00726e27..5942171247 100644 --- a/mod/unfollow.php +++ b/mod/unfollow.php @@ -27,29 +27,37 @@ function unfollow_post(App $a) $url = notags(trim($_REQUEST['url'])); $return_url = $_SESSION['return_url']; - $condition = ["`uid` = ? AND `rel` = ? AND (`nurl` = ? OR `alias` = ? OR `alias` = ?) AND `network` != ?", - $uid, Contact::FRIEND, normalise_link($url), + $condition = ["`uid` = ? AND (`rel` = ? OR `rel` = ?) AND (`nurl` = ? OR `alias` = ? OR `alias` = ?) AND `network` != ?", + $uid, Contact::SHARING, Contact::FRIEND, normalise_link($url), normalise_link($url), $url, Protocol::STATUSNET]; $contact = DBA::selectFirst('contact', [], $condition); if (!DBA::isResult($contact)) { notice(L10n::t("Contact wasn't found or can't be unfollowed.")); - } else { - if (in_array($contact['network'], [Protocol::OSTATUS, Protocol::DIASPORA, Protocol::DFRN])) { - $r = q("SELECT `contact`.*, `user`.* FROM `contact` INNER JOIN `user` ON `contact`.`uid` = `user`.`uid` - WHERE `user`.`uid` = %d AND `contact`.`self` LIMIT 1", - intval($uid) - ); - if (DBA::isResult($r)) { - Contact::terminateFriendship($r[0], $contact); - } - } - DBA::update('contact', ['rel' => Contact::FOLLOWER], ['id' => $contact['id']]); - - info(L10n::t('Contact unfollowed').EOL); - goaway(System::baseUrl().'/contacts/'.$contact['id']); + goaway($return_url); } - goaway($return_url); + + if (in_array($contact['network'], [Protocol::OSTATUS, Protocol::DIASPORA, Protocol::DFRN])) { + $r = q("SELECT `contact`.*, `user`.* FROM `contact` INNER JOIN `user` ON `contact`.`uid` = `user`.`uid` + WHERE `user`.`uid` = %d AND `contact`.`self` LIMIT 1", + intval($uid) + ); + if (DBA::isResult($r)) { + Contact::terminateFriendship($r[0], $contact); + } + } + + // Sharing-only contacts get deleted as there no relationship any more + if ($contact['rel'] == Contact::SHARING) { + Contact::remove($contact['id']); + $return_path = 'contacts'; + } else { + DBA::update('contact', ['rel' => Contact::FOLLOWER], ['id' => $contact['id']]); + $return_path = 'contacts/' . $contact['id']; + } + + info(L10n::t('Contact unfollowed')); + goaway($return_path); // NOTREACHED } @@ -66,8 +74,8 @@ function unfollow_content(App $a) $submit = L10n::t('Submit Request'); - $condition = ["`uid` = ? AND `rel` = ? AND (`nurl` = ? OR `alias` = ? OR `alias` = ?) AND `network` != ?", - local_user(), Contact::FRIEND, normalise_link($url), + $condition = ["`uid` = ? AND (`rel` = ? OR `rel` = ?) AND (`nurl` = ? OR `alias` = ? OR `alias` = ?) AND `network` != ?", + local_user(), Contact::SHARING, Contact::FRIEND, normalise_link($url), normalise_link($url), $url, Protocol::STATUSNET]; $contact = DBA::selectFirst('contact', ['url', 'network', 'addr', 'name'], $condition);