<?php
/**
- * @copyright Copyright (C) 2020, Friendica
+ * @copyright Copyright (C) 2010-2021, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
$condition = ['`alias` IN (?, ?, ?) AND `uid` = ? AND NOT `deleted`', $url, Strings::normaliseLink($url), $ssl_url, $uid];
$contact = DBA::selectFirst('contact', $fields, $condition, $options);
}
-
+
if (!DBA::isResult($contact)) {
return [];
}
}
$contact = self::getByURL($url, $update, $fields);
- if (!empty($contact['id'])) {
+ if (!empty($contact['id'])) {
$contact['cid'] = 0;
$contact['zid'] = $contact['id'];
}
return true;
}
- $user = DBA::selectFirst('user', ['uid', 'username', 'nickname', 'pubkey', 'prvkey'], ['uid' => $uid]);
+ $user = DBA::selectFirst('user', ['uid', 'username', 'nickname', 'pubkey', 'prvkey'],
+ ['uid' => $uid, 'account_expired' => false]);
if (!DBA::isResult($user)) {
return false;
}
}
$fields = ['nickname', 'page-flags', 'account-type', 'prvkey', 'pubkey'];
- $user = DBA::selectFirst('user', $fields, ['uid' => $uid]);
+ $user = DBA::selectFirst('user', $fields, ['uid' => $uid, 'account_expired' => false]);
if (!DBA::isResult($user)) {
return;
}
*
* @param string $contact_url Contact URL
* @param bool $thread_mode
- * @param int $update Update mode
+ * @param int $update Update mode
* @param int $parent Item parent ID for the update mode
* @return string posts in HTML
* @throws \Exception
*
* @param int $cid Contact ID
* @param bool $thread_mode
- * @param int $update Update mode
+ * @param int $update Update mode
* @param int $parent Item parent ID for the update mode
* @return string posts in HTML
* @throws \Exception
$o = '';
}
- if ($thread_mode) {
+ if ($thread_mode) {
$items = Post::toArray(Post::selectForUser(local_user(), ['uri-id', 'gravity', 'parent-uri-id', 'thr-parent-id', 'author-id'], $condition, $params));
$o .= conversation($a, $items, 'contacts', $update, false, 'commented', local_user());
$avatar['size'] = 48;
$default = self::DEFAULT_AVATAR_MICRO;
break;
-
+
case Proxy::SIZE_THUMB:
$avatar['size'] = 80;
$default = self::DEFAULT_AVATAR_THUMB;
break;
-
+
case Proxy::SIZE_SMALL:
default:
$avatar['size'] = 300;
$contact['thumb'] ?? '',
$contact['micro'] ?? '',
];
-
+
foreach ($data as $image_uri) {
$image_rid = Photo::ridFromURI($image_uri);
if ($image_rid && !Photo::exists(['resource-id' => $image_rid, 'uid' => $uid])) {
if (Contact\Relation::isDiscoverable($ret['url'])) {
Worker::add(PRIORITY_LOW, 'ContactDiscovery', $ret['url']);
}
-
+
// Update the public contact
if ($uid != 0) {
$contact = self::getByURL($ret['url'], false, ['id']);
return $contact;
}
+ /**
+ * Follow a contact
+ *
+ * @param int $cid Public contact id
+ * @param int $uid User ID
+ *
+ * @return bool "true" if following had been successful
+ */
+ public static function follow(int $cid, int $uid)
+ {
+ $user = User::getById($uid);
+ if (empty($user)) {
+ return false;
+ }
+
+ $contact = self::getById($cid, ['url']);
+
+ $result = self::createFromProbe($user, $contact['url'], false);
+
+ return $result['cid'];
+ }
+
+ /**
+ * Unfollow a contact
+ *
+ * @param int $cid Public contact id
+ * @param int $uid User ID
+ *
+ * @return bool "true" if unfollowing had been successful
+ */
+ public static function unfollow(int $cid, int $uid)
+ {
+ $cdata = self::getPublicAndUserContacID($cid, $uid);
+ if (empty($cdata['user'])) {
+ return false;
+ }
+
+ $contact = self::getById($cdata['user']);
+
+ self::removeSharer([], $contact);
+
+ return true;
+ }
+
/**
* @param array $importer Owner (local user) data
* @param array $contact Existing owner-specific contact data we want to expand the relationship with. Optional.
return null;
}
- public static function removeFollower($importer, $contact, array $datarray = [], $item = "")
+ public static function removeFollower($importer, $contact)
{
if (($contact['rel'] == self::FRIEND) || ($contact['rel'] == self::SHARING)) {
DBA::update('contact', ['rel' => self::SHARING], ['id' => $contact['id']]);
}
}
- public static function removeSharer($importer, $contact, array $datarray = [], $item = "")
+ public static function removeSharer($importer, $contact)
{
if (($contact['rel'] == self::FRIEND) || ($contact['rel'] == self::FOLLOWER)) {
DBA::update('contact', ['rel' => self::FOLLOWER], ['id' => $contact['id']]);
*
* @param string $search Name or nick
* @param string $mode Search mode (e.g. "community")
+ * @param int $uid User ID
*
* @return array with search results
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
- public static function searchByName($search, $mode = '')
+ public static function searchByName(string $search, string $mode = '', int $uid = 0)
{
if (empty($search)) {
return [];
NOT `failed` AND `uid` = ? AND
(`addr` LIKE ? OR `name` LIKE ? OR `nick` LIKE ?) $extra_sql
ORDER BY `nurl` DESC LIMIT 1000",
- Protocol::DFRN, Protocol::ACTIVITYPUB, $ostatus, $diaspora, 0, $search, $search, $search
+ Protocol::DFRN, Protocol::ACTIVITYPUB, $ostatus, $diaspora, $uid, $search, $search, $search
);
$contacts = DBA::toArray($results);
$count = 0;
foreach ($urls as $url) {
+ if (empty($url) || !is_string($url)) {
+ continue;
+ }
$contact = self::getByURL($url, false, ['id', 'updated']);
if (empty($contact['id'])) {
Worker::add(PRIORITY_LOW, 'AddContact', 0, $url);