Merge pull request #3721 from annando/follow-unfollow

Improvements for following/unfollowing of Diaspora and OStatus
This commit is contained in:
Tobias Diekershoff 2017-09-23 17:40:53 +02:00 committed by GitHub
commit 6fdc524eee
4 changed files with 24 additions and 18 deletions

View file

@ -2018,7 +2018,7 @@ class Diaspora {
$a = get_app(); $a = get_app();
if ($contact["rel"] == CONTACT_IS_FOLLOWER && in_array($importer["page-flags"], array(PAGE_FREELOVE))) { if ($contact["rel"] == CONTACT_IS_SHARING) {
dba::update('contact', array('rel' => CONTACT_IS_FRIEND, 'writable' => true), dba::update('contact', array('rel' => CONTACT_IS_FRIEND, 'writable' => true),
array('id' => $contact["id"], 'uid' => $importer["uid"])); array('id' => $contact["id"], 'uid' => $importer["uid"]));
} }
@ -2129,8 +2129,8 @@ class Diaspora {
// perhaps we were already sharing with this person. Now they're sharing with us. // perhaps we were already sharing with this person. Now they're sharing with us.
// That makes us friends. // That makes us friends.
if ($contact) { if ($contact) {
if ($following && $sharing) { if ($following) {
logger("Author ".$author." (Contact ".$contact["id"].") wants to have a bidirectional conection.", LOGGER_DEBUG); logger("Author ".$author." (Contact ".$contact["id"].") wants to follow us.", LOGGER_DEBUG);
self::receive_request_make_friend($importer, $contact); self::receive_request_make_friend($importer, $contact);
// refetch the contact array // refetch the contact array
@ -2138,7 +2138,7 @@ class Diaspora {
// If we are now friends, we are sending a share message. // If we are now friends, we are sending a share message.
// Normally we needn't to do so, but the first message could have been vanished. // Normally we needn't to do so, but the first message could have been vanished.
if (in_array($contact["rel"], array(CONTACT_IS_FRIEND, CONTACT_IS_FOLLOWER))) { if (in_array($contact["rel"], array(CONTACT_IS_FRIEND))) {
$u = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval($importer["uid"])); $u = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval($importer["uid"]));
if ($u) { if ($u) {
logger("Sending share message to author ".$author." - Contact: ".$contact["id"]." - User: ".$importer["uid"], LOGGER_DEBUG); logger("Sending share message to author ".$author." - Contact: ".$contact["id"]." - User: ".$importer["uid"], LOGGER_DEBUG);
@ -2146,9 +2146,10 @@ class Diaspora {
} }
} }
return true; return true;
} else { /// @todo Handle all possible variations of adding and retracting of permissions } else {
logger("Author ".$author." (Contact ".$contact["id"].") wants to change the relationship: Following: ".$following." - sharing: ".$sharing. "(By now unsupported)", LOGGER_DEBUG); logger("Author ".$author." doesn't want to follow us anymore.", LOGGER_DEBUG);
return false; lose_follower($importer, $contact);
return true;
} }
} }

View file

@ -187,14 +187,10 @@ function new_contact($uid,$url,$interactive = false) {
if (dbm::is_result($r)) { if (dbm::is_result($r)) {
// update contact // update contact
if ($r[0]['rel'] == CONTACT_IS_FOLLOWER || ($network === NETWORK_DIASPORA && $r[0]['rel'] == CONTACT_IS_SHARING)) { $new_relation = (($r[0]['rel'] == CONTACT_IS_FOLLOWER) ? CONTACT_IS_FRIEND : CONTACT_IS_SHARING);
q("UPDATE `contact` SET `rel` = %d , `subhub` = %d, `readonly` = 0 WHERE `id` = %d AND `uid` = %d",
intval(CONTACT_IS_FRIEND), $fields = array('rel' => $new_relation, 'subhub' => $subhub, 'readonly' => false);
intval($subhub), dba::update('contact', $fields, array('id' => $r[0]['id']));
intval($r[0]['id']),
intval($uid)
);
}
} else { } else {
// check service class limits // check service class limits
@ -222,7 +218,7 @@ function new_contact($uid,$url,$interactive = false) {
return $result; return $result;
} }
$new_relation = ((in_array($ret['network'], array(NETWORK_MAIL, NETWORK_DIASPORA))) ? CONTACT_IS_FRIEND : CONTACT_IS_SHARING); $new_relation = ((in_array($ret['network'], array(NETWORK_MAIL))) ? CONTACT_IS_FRIEND : CONTACT_IS_SHARING);
// create contact record // create contact record
$r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `nurl`, `addr`, `alias`, `batch`, `notify`, `poll`, `poco`, `name`, `nick`, `network`, `pubkey`, `rel`, `priority`, $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `nurl`, `addr`, `alias`, `batch`, `notify`, `poll`, `poco`, `name`, `nick`, `network`, `pubkey`, `rel`, `priority`,

View file

@ -348,7 +348,16 @@ function _contact_archive($contact_id, $orig_record) {
function _contact_drop($contact_id, $orig_record) { function _contact_drop($contact_id, $orig_record) {
$a = get_app(); $a = get_app();
terminate_friendship($a->user,$a->contact,$orig_record); $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($a->user['uid'])
);
if (!dbm::is_result($r)) {
return;
}
$self = ""; // Unused parameter
terminate_friendship($r[0], $self, $orig_record);
contact_remove($orig_record['id']); contact_remove($orig_record['id']);
} }

View file

@ -32,7 +32,7 @@ function unfollow_post(App $a) {
if (!dbm::is_result($contact)) { if (!dbm::is_result($contact)) {
notice(t("Contact wasn't found or can't be unfollowed.")); notice(t("Contact wasn't found or can't be unfollowed."));
} else { } else {
if (in_array($contact['network'], array(NETWORK_OSTATUS))) { if (in_array($contact['network'], array(NETWORK_OSTATUS, NETWORK_DIASPORA))) {
$r = q("SELECT `contact`.*, `user`.* FROM `contact` INNER JOIN `user` ON `contact`.`uid` = `user`.`uid` $r = q("SELECT `contact`.*, `user`.* FROM `contact` INNER JOIN `user` ON `contact`.`uid` = `user`.`uid`
WHERE `user`.`uid` = %d AND `contact`.`self` LIMIT 1", WHERE `user`.`uid` = %d AND `contact`.`self` LIMIT 1",
intval($uid) intval($uid)