Merge pull request #9304 from annando/suggestions
Functionality to add suggestions
This commit is contained in:
commit
178e506917
2 changed files with 89 additions and 7 deletions
|
@ -24,7 +24,10 @@ namespace Friendica\Model;
|
||||||
use Friendica\Core\Logger;
|
use Friendica\Core\Logger;
|
||||||
use Friendica\Core\Protocol;
|
use Friendica\Core\Protocol;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
|
use Friendica\DI;
|
||||||
|
use Friendica\Model\Notify\Type;
|
||||||
use Friendica\Network\Probe;
|
use Friendica\Network\Probe;
|
||||||
|
use Friendica\Protocol\Activity;
|
||||||
use Friendica\Util\DateTimeFormat;
|
use Friendica\Util\DateTimeFormat;
|
||||||
use Friendica\Util\Strings;
|
use Friendica\Util\Strings;
|
||||||
|
|
||||||
|
@ -130,4 +133,80 @@ class FContact
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add suggestions for a given contact
|
||||||
|
*
|
||||||
|
* @param integer $uid
|
||||||
|
* @param integer $cid
|
||||||
|
* @return bool Was the adding successful?
|
||||||
|
*/
|
||||||
|
public static function addSuggestion(int $uid, int $cid)
|
||||||
|
{
|
||||||
|
$owner = User::getOwnerDataById($uid);
|
||||||
|
$contact = Contact::getById($cid);
|
||||||
|
|
||||||
|
if (DBA::exists('contact', ['nurl' => Strings::normaliseLink($contact['url']), 'uid' => $uid])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$suggest = [];
|
||||||
|
$suggest['uid'] = $uid;
|
||||||
|
$suggest['cid'] = $contact['id'];
|
||||||
|
$suggest['url'] = $contact['url'];
|
||||||
|
$suggest['name'] = $contact['name'];
|
||||||
|
$suggest['photo'] = $contact['photo'];
|
||||||
|
$suggest['request'] = $contact['request'];
|
||||||
|
$suggest['title'] = '';
|
||||||
|
$suggest['body'] = '';
|
||||||
|
|
||||||
|
// Do we already have an fcontact record for this person?
|
||||||
|
$fid = 0;
|
||||||
|
$fcontact = DBA::selectFirst('fcontact', ['id'], ['url' => $suggest['url']]);
|
||||||
|
if (DBA::isResult($fcontact)) {
|
||||||
|
$fid = $fcontact['id'];
|
||||||
|
|
||||||
|
$fields = ['name' => $suggest['name'], 'photo' => $suggest['photo'], 'request' => $suggest['request']];
|
||||||
|
DBA::update('fcontact', $fields, ['id' => $fid]);
|
||||||
|
|
||||||
|
// Quit if we already have an introduction for this person
|
||||||
|
if (DBA::exists('intro', ['uid' => $suggest['uid'], 'fid' => $fid])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($fid)) {
|
||||||
|
$fields = ['name' => $suggest['name'], 'url' => $suggest['url'],
|
||||||
|
'photo' => $suggest['photo'], 'request' => $suggest['request']];
|
||||||
|
DBA::insert('fcontact', $fields);
|
||||||
|
$fid = DBA::lastInsertId();
|
||||||
|
if (empty($fid)) {
|
||||||
|
Logger::warning('FContact had not been created', ['fcontact' => $fields]);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$hash = Strings::getRandomHex();
|
||||||
|
$fields = ['uid' => $suggest['uid'], 'fid' => $fid, 'contact-id' => $suggest['cid'],
|
||||||
|
'note' => $suggest['body'], 'hash' => $hash, 'datetime' => DateTimeFormat::utcNow(), 'blocked' => false];
|
||||||
|
DBA::insert('intro', $fields);
|
||||||
|
|
||||||
|
notification([
|
||||||
|
'type' => Type::SUGGEST,
|
||||||
|
'notify_flags' => $owner['notify-flags'],
|
||||||
|
'language' => $owner['language'],
|
||||||
|
'to_name' => $owner['name'],
|
||||||
|
'to_email' => $owner['email'],
|
||||||
|
'uid' => $owner['uid'],
|
||||||
|
'item' => $suggest,
|
||||||
|
'link' => DI::baseUrl().'/notifications/intros',
|
||||||
|
'source_name' => $contact['name'],
|
||||||
|
'source_link' => $contact['url'],
|
||||||
|
'source_photo' => $contact['photo'],
|
||||||
|
'verb' => Activity::REQ_FRIEND,
|
||||||
|
'otype' => 'intro'
|
||||||
|
]);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,6 +81,13 @@ class Introductions extends BaseNotifications
|
||||||
/** @var Introduction $notification */
|
/** @var Introduction $notification */
|
||||||
foreach ($notifications['notifications'] as $notification) {
|
foreach ($notifications['notifications'] as $notification) {
|
||||||
|
|
||||||
|
$helptext = DI::l10n()->t('Shall your connection be bidirectional or not?');
|
||||||
|
$helptext2 = DI::l10n()->t('Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed.', $notification->getName(), $notification->getName());
|
||||||
|
$helptext3 = DI::l10n()->t('Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed.', $notification->getName());
|
||||||
|
|
||||||
|
$friend = ['duplex', DI::l10n()->t('Friend'), '1', $helptext2, true];
|
||||||
|
$follower = ['duplex', DI::l10n()->t('Subscriber'), '0', $helptext3, false];
|
||||||
|
|
||||||
// There are two kind of introduction. Contacts suggested by other contacts and normal connection requests.
|
// There are two kind of introduction. Contacts suggested by other contacts and normal connection requests.
|
||||||
// We have to distinguish between these two because they use different data.
|
// We have to distinguish between these two because they use different data.
|
||||||
switch ($notification->getLabel()) {
|
switch ($notification->getLabel()) {
|
||||||
|
@ -98,6 +105,9 @@ class Introductions extends BaseNotifications
|
||||||
'$contact_id' => $notification->getContactId(),
|
'$contact_id' => $notification->getContactId(),
|
||||||
'$photo' => $notification->getPhoto(),
|
'$photo' => $notification->getPhoto(),
|
||||||
'$fullname' => $notification->getName(),
|
'$fullname' => $notification->getName(),
|
||||||
|
'$lbl_connection_type' => $helptext,
|
||||||
|
'$friend' => $friend,
|
||||||
|
'$follower' => $follower,
|
||||||
'$url' => $notification->getUrl(),
|
'$url' => $notification->getUrl(),
|
||||||
'$zrl' => $notification->getZrl(),
|
'$zrl' => $notification->getZrl(),
|
||||||
'$lbl_url' => DI::l10n()->t('Profile URL'),
|
'$lbl_url' => DI::l10n()->t('Profile URL'),
|
||||||
|
@ -122,13 +132,6 @@ class Introductions extends BaseNotifications
|
||||||
$knowyou = '';
|
$knowyou = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
$helptext = DI::l10n()->t('Shall your connection be bidirectional or not?');
|
|
||||||
$helptext2 = DI::l10n()->t('Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed.', $notification->getName(), $notification->getName());
|
|
||||||
$helptext3 = DI::l10n()->t('Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed.', $notification->getName());
|
|
||||||
|
|
||||||
$friend = ['duplex', DI::l10n()->t('Friend'), '1', $helptext2, true];
|
|
||||||
$follower = ['duplex', DI::l10n()->t('Subscriber'), '0', $helptext3, false];
|
|
||||||
|
|
||||||
$contact = DBA::selectFirst('contact', ['network', 'protocol'], ['id' => $notification->getContactId()]);
|
$contact = DBA::selectFirst('contact', ['network', 'protocol'], ['id' => $notification->getContactId()]);
|
||||||
|
|
||||||
if (($contact['network'] != Protocol::DFRN) || ($contact['protocol'] == Protocol::ACTIVITYPUB)) {
|
if (($contact['network'] != Protocol::DFRN) || ($contact['protocol'] == Protocol::ACTIVITYPUB)) {
|
||||||
|
|
Loading…
Reference in a new issue