Merge pull request #4607 from annando/dfrn-relationship
DFRN: The relationship between contacts can now be changed afterwards
This commit is contained in:
commit
3ca2dc70b3
|
@ -579,9 +579,10 @@ function contacts_content(App $a)
|
||||||
$profile_select = ContactSelector::profileAssign($contact['profile-id'], (($contact['network'] !== NETWORK_DFRN) ? true : false));
|
$profile_select = ContactSelector::profileAssign($contact['profile-id'], (($contact['network'] !== NETWORK_DFRN) ? true : false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// @todo Only show the following link with DFRN when the remote version supports it
|
||||||
$follow = '';
|
$follow = '';
|
||||||
$follow_text = '';
|
$follow_text = '';
|
||||||
if (in_array($contact['network'], [NETWORK_DIASPORA, NETWORK_OSTATUS])) {
|
if (in_array($contact['network'], [NETWORK_DIASPORA, NETWORK_OSTATUS, NETWORK_DFRN])) {
|
||||||
if ($contact['rel'] == CONTACT_IS_FOLLOWER) {
|
if ($contact['rel'] == CONTACT_IS_FOLLOWER) {
|
||||||
$follow = System::baseUrl(true) . "/follow?url=" . urlencode($contact["url"]);
|
$follow = System::baseUrl(true) . "/follow?url=" . urlencode($contact["url"]);
|
||||||
$follow_text = L10n::t("Connect/Follow");
|
$follow_text = L10n::t("Connect/Follow");
|
||||||
|
|
|
@ -18,6 +18,12 @@ require_once 'include/event.php';
|
||||||
|
|
||||||
function dfrn_notify_post(App $a) {
|
function dfrn_notify_post(App $a) {
|
||||||
logger(__function__, LOGGER_TRACE);
|
logger(__function__, LOGGER_TRACE);
|
||||||
|
|
||||||
|
if (empty($_POST)) {
|
||||||
|
require_once 'mod/salmon.php';
|
||||||
|
salmon_post($a);
|
||||||
|
}
|
||||||
|
|
||||||
$dfrn_id = ((x($_POST,'dfrn_id')) ? notags(trim($_POST['dfrn_id'])) : '');
|
$dfrn_id = ((x($_POST,'dfrn_id')) ? notags(trim($_POST['dfrn_id'])) : '');
|
||||||
$dfrn_version = ((x($_POST,'dfrn_version')) ? (float) $_POST['dfrn_version'] : 2.0);
|
$dfrn_version = ((x($_POST,'dfrn_version')) ? (float) $_POST['dfrn_version'] : 2.0);
|
||||||
$challenge = ((x($_POST,'challenge')) ? notags(trim($_POST['challenge'])) : '');
|
$challenge = ((x($_POST,'challenge')) ? notags(trim($_POST['challenge'])) : '');
|
||||||
|
|
|
@ -9,6 +9,7 @@ use Friendica\Core\System;
|
||||||
use Friendica\Model\Contact;
|
use Friendica\Model\Contact;
|
||||||
use Friendica\Model\Profile;
|
use Friendica\Model\Profile;
|
||||||
use Friendica\Network\Probe;
|
use Friendica\Network\Probe;
|
||||||
|
use Friendica\Database\DBM;
|
||||||
|
|
||||||
function follow_post(App $a) {
|
function follow_post(App $a) {
|
||||||
|
|
||||||
|
@ -60,19 +61,20 @@ function follow_content(App $a) {
|
||||||
|
|
||||||
$submit = L10n::t('Submit Request');
|
$submit = L10n::t('Submit Request');
|
||||||
|
|
||||||
// There is a current issue. It seems as if you can't start following a Friendica that is following you
|
// Don't try to add a pending contact
|
||||||
// With Diaspora this works - but Friendica is special, it seems ...
|
$r = q("SELECT `pending` FROM `contact` WHERE `uid` = %d AND ((`rel` != %d) OR (`network` = '%s')) AND
|
||||||
$r = q("SELECT `url` FROM `contact` WHERE `uid` = %d AND ((`rel` != %d) OR (`network` = '%s')) AND
|
|
||||||
(`nurl` = '%s' OR `alias` = '%s' OR `alias` = '%s') AND
|
(`nurl` = '%s' OR `alias` = '%s' OR `alias` = '%s') AND
|
||||||
`network` != '%s' LIMIT 1",
|
`network` != '%s' LIMIT 1",
|
||||||
intval(local_user()), dbesc(CONTACT_IS_FOLLOWER), dbesc(NETWORK_DFRN), dbesc(normalise_link($url)),
|
intval(local_user()), dbesc(CONTACT_IS_FOLLOWER), dbesc(NETWORK_DFRN), dbesc(normalise_link($url)),
|
||||||
dbesc(normalise_link($url)), dbesc($url), dbesc(NETWORK_STATUSNET));
|
dbesc(normalise_link($url)), dbesc($url), dbesc(NETWORK_STATUSNET));
|
||||||
|
|
||||||
if ($r) {
|
if ($r) {
|
||||||
notice(L10n::t('You already added this contact.').EOL);
|
if ($r[0]['pending']) {
|
||||||
$submit = "";
|
notice(L10n::t('You already added this contact.').EOL);
|
||||||
//goaway($_SESSION['return_url']);
|
$submit = "";
|
||||||
// NOTREACHED
|
//goaway($_SESSION['return_url']);
|
||||||
|
// NOTREACHED
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$ret = Probe::uri($url);
|
$ret = Probe::uri($url);
|
||||||
|
@ -102,7 +104,7 @@ function follow_content(App $a) {
|
||||||
$ret["url"] = $ret["addr"];
|
$ret["url"] = $ret["addr"];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($ret['network'] === NETWORK_DFRN) {
|
if (($ret['network'] === NETWORK_DFRN) && !DBM::is_result($r)) {
|
||||||
$request = $ret["request"];
|
$request = $ret["request"];
|
||||||
$tpl = get_markup_template('dfrn_request.tpl');
|
$tpl = get_markup_template('dfrn_request.tpl');
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -33,7 +33,7 @@ function unfollow_post(App $a)
|
||||||
if (!DBM::is_result($contact)) {
|
if (!DBM::is_result($contact)) {
|
||||||
notice(L10n::t("Contact wasn't found or can't be unfollowed."));
|
notice(L10n::t("Contact wasn't found or can't be unfollowed."));
|
||||||
} else {
|
} else {
|
||||||
if (in_array($contact['network'], [NETWORK_OSTATUS, NETWORK_DIASPORA])) {
|
if (in_array($contact['network'], [NETWORK_OSTATUS, NETWORK_DIASPORA, NETWORK_DFRN])) {
|
||||||
$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)
|
||||||
|
@ -75,7 +75,7 @@ function unfollow_content(App $a)
|
||||||
// NOTREACHED
|
// NOTREACHED
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!in_array($contact['network'], [NETWORK_DIASPORA, NETWORK_OSTATUS])) {
|
if (!in_array($contact['network'], [NETWORK_DIASPORA, NETWORK_OSTATUS, NETWORK_DFRN])) {
|
||||||
notice(L10n::t("Unfollowing is currently not supported by your network.").EOL);
|
notice(L10n::t("Unfollowing is currently not supported by your network.").EOL);
|
||||||
$submit = "";
|
$submit = "";
|
||||||
// NOTREACHED
|
// NOTREACHED
|
||||||
|
|
|
@ -173,20 +173,18 @@ class Contact extends BaseObject
|
||||||
*/
|
*/
|
||||||
public static function terminateFriendship(array $user, array $contact)
|
public static function terminateFriendship(array $user, array $contact)
|
||||||
{
|
{
|
||||||
if ($contact['network'] === NETWORK_OSTATUS) {
|
if (in_array($contact['network'], [NETWORK_OSTATUS, NETWORK_DFRN])) {
|
||||||
// create an unfollow slap
|
// create an unfollow slap
|
||||||
$item = [];
|
$item = [];
|
||||||
$item['verb'] = NAMESPACE_OSTATUS . "/unfollow";
|
$item['verb'] = NAMESPACE_OSTATUS . "/unfollow";
|
||||||
$item['follow'] = $contact["url"];
|
$item['follow'] = $contact["url"];
|
||||||
$slap = OStatus::salmon($item, $user);
|
$slap = OStatus::salmon($item, $user);
|
||||||
|
|
||||||
if ((x($contact, 'notify')) && (strlen($contact['notify']))) {
|
if (!empty($contact['notify'])) {
|
||||||
Salmon::slapper($user, $contact['notify'], $slap);
|
Salmon::slapper($user, $contact['notify'], $slap);
|
||||||
}
|
}
|
||||||
} elseif ($contact['network'] === NETWORK_DIASPORA) {
|
} elseif ($contact['network'] == NETWORK_DIASPORA) {
|
||||||
Diaspora::sendUnshare($user, $contact);
|
Diaspora::sendUnshare($user, $contact);
|
||||||
} elseif ($contact['network'] === NETWORK_DFRN) {
|
|
||||||
DFRN::deliver($user, $contact, 'placeholder', 1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1168,7 +1166,26 @@ class Contact extends BaseObject
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($ret['network'] === NETWORK_DFRN) {
|
// check if we already have a contact
|
||||||
|
// the poll url is more reliable than the profile url, as we may have
|
||||||
|
// indirect links or webfinger links
|
||||||
|
|
||||||
|
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `poll` IN ('%s', '%s') AND `network` = '%s' AND NOT `pending` LIMIT 1",
|
||||||
|
intval($uid),
|
||||||
|
dbesc($ret['poll']),
|
||||||
|
dbesc(normalise_link($ret['poll'])),
|
||||||
|
dbesc($ret['network'])
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!DBM::is_result($r)) {
|
||||||
|
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' AND `network` = '%s' AND NOT `pending` LIMIT 1",
|
||||||
|
intval($uid),
|
||||||
|
dbesc(normalise_link($url)),
|
||||||
|
dbesc($ret['network'])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (($ret['network'] === NETWORK_DFRN) && !DBM::is_result($r)) {
|
||||||
if ($interactive) {
|
if ($interactive) {
|
||||||
if (strlen($a->path)) {
|
if (strlen($a->path)) {
|
||||||
$myaddr = bin2hex(System::baseUrl() . '/profile/' . $a->user['nickname']);
|
$myaddr = bin2hex(System::baseUrl() . '/profile/' . $a->user['nickname']);
|
||||||
|
@ -1180,7 +1197,7 @@ class Contact extends BaseObject
|
||||||
|
|
||||||
// NOTREACHED
|
// NOTREACHED
|
||||||
}
|
}
|
||||||
} elseif (Config::get('system', 'dfrn_only')) {
|
} elseif (Config::get('system', 'dfrn_only') && ($ret['network'] != NETWORK_DFRN)) {
|
||||||
$result['message'] = L10n::t('This site is not configured to allow communications with other networks.') . EOL;
|
$result['message'] = L10n::t('This site is not configured to allow communications with other networks.') . EOL;
|
||||||
$result['message'] != L10n::t('No compatible communication protocols or feeds were discovered.') . EOL;
|
$result['message'] != L10n::t('No compatible communication protocols or feeds were discovered.') . EOL;
|
||||||
return $result;
|
return $result;
|
||||||
|
@ -1230,25 +1247,6 @@ class Contact extends BaseObject
|
||||||
$writeable = 1;
|
$writeable = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if we already have a contact
|
|
||||||
// the poll url is more reliable than the profile url, as we may have
|
|
||||||
// indirect links or webfinger links
|
|
||||||
|
|
||||||
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `poll` IN ('%s', '%s') AND `network` = '%s' LIMIT 1",
|
|
||||||
intval($uid),
|
|
||||||
dbesc($ret['poll']),
|
|
||||||
dbesc(normalise_link($ret['poll'])),
|
|
||||||
dbesc($ret['network'])
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!DBM::is_result($r)) {
|
|
||||||
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' AND `network` = '%s' LIMIT 1",
|
|
||||||
intval($uid),
|
|
||||||
dbesc(normalise_link($url)),
|
|
||||||
dbesc($ret['network'])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (DBM::is_result($r)) {
|
if (DBM::is_result($r)) {
|
||||||
// update contact
|
// update contact
|
||||||
$new_relation = (($r[0]['rel'] == CONTACT_IS_FOLLOWER) ? CONTACT_IS_FRIEND : CONTACT_IS_SHARING);
|
$new_relation = (($r[0]['rel'] == CONTACT_IS_FOLLOWER) ? CONTACT_IS_FRIEND : CONTACT_IS_SHARING);
|
||||||
|
@ -1309,16 +1307,16 @@ class Contact extends BaseObject
|
||||||
);
|
);
|
||||||
|
|
||||||
if (DBM::is_result($r)) {
|
if (DBM::is_result($r)) {
|
||||||
if (($contact['network'] == NETWORK_OSTATUS) && (strlen($contact['notify']))) {
|
if (in_array($contact['network'], [NETWORK_OSTATUS, NETWORK_DFRN])) {
|
||||||
// create a follow slap
|
// create a follow slap
|
||||||
$item = [];
|
$item = [];
|
||||||
$item['verb'] = ACTIVITY_FOLLOW;
|
$item['verb'] = ACTIVITY_FOLLOW;
|
||||||
$item['follow'] = $contact["url"];
|
$item['follow'] = $contact["url"];
|
||||||
$slap = OStatus::salmon($item, $r[0]);
|
$slap = OStatus::salmon($item, $r[0]);
|
||||||
Salmon::slapper($r[0], $contact['notify'], $slap);
|
if (!empty($contact['notify'])) {
|
||||||
}
|
Salmon::slapper($r[0], $contact['notify'], $slap);
|
||||||
|
}
|
||||||
if ($contact['network'] == NETWORK_DIASPORA) {
|
} elseif ($contact['network'] == NETWORK_DIASPORA) {
|
||||||
$ret = Diaspora::sendShare($a->user, $contact);
|
$ret = Diaspora::sendShare($a->user, $contact);
|
||||||
logger('share returns: ' . $ret);
|
logger('share returns: ' . $ret);
|
||||||
}
|
}
|
||||||
|
@ -1377,7 +1375,7 @@ class Contact extends BaseObject
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_array($contact)) {
|
if (is_array($contact)) {
|
||||||
if (($contact['network'] == NETWORK_OSTATUS && $contact['rel'] == CONTACT_IS_SHARING)
|
if (($contact['rel'] == CONTACT_IS_SHARING)
|
||||||
|| ($sharing && $contact['rel'] == CONTACT_IS_FOLLOWER)) {
|
|| ($sharing && $contact['rel'] == CONTACT_IS_FOLLOWER)) {
|
||||||
dba::update('contact', ['rel' => CONTACT_IS_FRIEND, 'writable' => true],
|
dba::update('contact', ['rel' => CONTACT_IS_FRIEND, 'writable' => true],
|
||||||
['id' => $contact['id'], 'uid' => $importer['uid']]);
|
['id' => $contact['id'], 'uid' => $importer['uid']]);
|
||||||
|
|
Loading…
Reference in a new issue