X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FContact.php;h=becc80c0c3c6e09e557e77778aaf37cc59882b80;hb=c141a3eb7951a7b171e700ebfdaba83a154f6f40;hp=e4f142e3a2d93d06bfb74ef3d6fad368de333489;hpb=d6ed0068e6c8bf513e40a5d29b73d100f664261b;p=friendica.git diff --git a/src/Model/Contact.php b/src/Model/Contact.php index e4f142e3a2..becc80c0c3 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -32,6 +32,7 @@ use Friendica\Core\Worker; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Notify\Type; +use Friendica\Network\HTTPException; use Friendica\Network\Probe; use Friendica\Protocol\Activity; use Friendica\Protocol\ActivityPub; @@ -196,7 +197,7 @@ class Contact * @param int $uid User ID * * @return boolean is the contact id a follower? - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ public static function isFollower($cid, $uid) @@ -221,7 +222,7 @@ class Contact * @param int $uid User ID * * @return boolean is the contact id a follower? - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ public static function isFollowerByURL($url, $uid) @@ -242,7 +243,7 @@ class Contact * @param int $uid User ID * * @return boolean is the contact url being followed? - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ public static function isSharing($cid, $uid) @@ -267,7 +268,7 @@ class Contact * @param int $uid User ID * * @return boolean is the contact url being followed? - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ public static function isSharingByURL($url, $uid) @@ -288,7 +289,7 @@ class Contact * @param boolean $dont_update Don't update the contact * * @return string basepath - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ public static function getBasepath($url, $dont_update = false) @@ -377,7 +378,7 @@ class Contact * @param int $uid User ID * * @return array with public and user's contact id - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ public static function getPublicAndUserContacID($cid, $uid) @@ -583,7 +584,7 @@ class Contact * @param int $uid User ID * * @return boolean is the contact id blocked for the given user? - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ public static function isCollapsedByUser($cid, $uid) @@ -645,7 +646,7 @@ class Contact * * @param int $uid * @return bool Operation success - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException */ public static function createSelfFromUserId($uid) { @@ -692,7 +693,7 @@ class Contact * * @param int $uid * @param boolean $update_avatar Force the avatar update - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException */ public static function updateSelfFromUserID($uid, $update_avatar = false) { @@ -798,7 +799,7 @@ class Contact * * @param int $id contact id * @return null - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException */ public static function remove($id) { @@ -822,7 +823,7 @@ class Contact * @param array $contact Contact unfriended * @param boolean $dissolve Remove the contact on the remote side * @return void - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ public static function terminateFriendship(array $user, array $contact, $dissolve = false) @@ -875,7 +876,7 @@ class Contact * * @param array $contact contact to mark for archival * @return null - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException */ public static function markForArchival(array $contact) { @@ -976,7 +977,7 @@ class Contact * @param array $default If not data was found take this data as default value * * @return array Contact data - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException */ public static function getDetailsByURL($url, $uid = -1, array $default = []) { @@ -1126,7 +1127,7 @@ class Contact * @param int $uid User id * * @return array Contact data - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ public static function getDetailsByAddr($addr, $uid = -1) @@ -1141,7 +1142,7 @@ class Contact // Fetch contact data from the contact table for the given user $r = q("SELECT `id`, `id` AS `cid`, 0 AS `gid`, 0 AS `zid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, `xmpp`, - `keywords`, `photo`, `thumb`, `micro`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `contact-type`, `bd` AS `birthday`, `self`, `rel`, `pending` + `keywords`, `photo`, `thumb`, `micro`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `contact-type`, `bd` AS `birthday`, `self`, `rel`, `pending`,`baseurl` FROM `contact` WHERE `addr` = '%s' AND `uid` = %d AND NOT `deleted`", DBA::escape($addr), intval($uid) @@ -1149,7 +1150,7 @@ class Contact // Fetch the data from the contact table with "uid=0" (which is filled automatically) if (!DBA::isResult($r)) { $r = q("SELECT `id`, 0 AS `cid`, `id` AS `zid`, 0 AS `gid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, `xmpp`, - `keywords`, `photo`, `thumb`, `micro`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `contact-type`, `bd` AS `birthday`, 0 AS `self`, `rel`, `pending` + `keywords`, `photo`, `thumb`, `micro`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `contact-type`, `bd` AS `birthday`, 0 AS `self`, `rel`, `pending`, `baseurl` FROM `contact` WHERE `addr` = '%s' AND `uid` = 0 AND NOT `deleted`", DBA::escape($addr) ); @@ -1158,7 +1159,7 @@ class Contact // Fetch the data from the gcontact table if (!DBA::isResult($r)) { $r = q("SELECT 0 AS `id`, 0 AS `cid`, `id` AS `gid`, 0 AS `zid`, 0 AS `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, '' AS `xmpp`, - `keywords`, `photo`, `photo` AS `thumb`, `photo` AS `micro`, `community` AS `forum`, 0 AS `prv`, `community`, `contact-type`, `birthday`, 0 AS `self`, 2 AS `rel`, 0 AS `pending` + `keywords`, `photo`, `photo` AS `thumb`, `photo` AS `micro`, `community` AS `forum`, 0 AS `prv`, `community`, `contact-type`, `birthday`, 0 AS `self`, 2 AS `rel`, 0 AS `pending`, `server_url` AS `baseurl` FROM `gcontact` WHERE `addr` = '%s'", DBA::escape($addr) ); @@ -1181,7 +1182,7 @@ class Contact * @param array $contact contact * @param int $uid optional, default 0 * @return array - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ public static function photoMenu(array $contact, $uid = 0) @@ -1234,7 +1235,7 @@ class Contact } if (($contact['network'] == Protocol::DFRN) && !$contact['self'] && empty($contact['pending'])) { - $poke_link = DI::baseUrl() . '/poke/?c=' . $contact['id']; + $poke_link = 'contact/' . $contact['id'] . '/poke'; } $contact_url = DI::baseUrl() . '/contact/' . $contact['id']; @@ -1444,7 +1445,7 @@ class Contact * @param boolean $in_loop Internally used variable to prevent an endless loop * * @return integer Contact ID - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ public static function getIdForURL($url, $uid = 0, $no_update = false, $default = [], $in_loop = false) @@ -1620,6 +1621,9 @@ class Contact // Update the gcontact entry if ($uid == 0) { GContact::updateFromPublicContactID($contact_id); + if (($data['network'] == Protocol::ACTIVITYPUB) && in_array(DI::config()->get('system', 'gcontact_discovery'), [GContact::DISCOVERY_DIRECT, GContact::DISCOVERY_RECURSIVE])) { + GContact::discoverFollowers($data['url']); + } } } } else { @@ -1663,7 +1667,7 @@ class Contact * @param int $cid contact id * * @return boolean Is the contact archived? - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException */ public static function isArchived(int $cid) { @@ -1707,7 +1711,7 @@ class Contact * @param int $cid contact id * * @return boolean Is the contact blocked? - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException */ public static function isBlocked($cid) { @@ -1910,19 +1914,24 @@ class Contact * @param int $cid Contact id * @param bool $force force picture update * - * @return array Returns array of the different avatar sizes - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @return void + * @throws HTTPException\InternalServerErrorException + * @throws HTTPException\NotFoundException * @throws \ImagickException */ public static function updateAvatar($avatar, $uid, $cid, $force = false) { $contact = DBA::selectFirst('contact', ['avatar', 'photo', 'thumb', 'micro', 'nurl'], ['id' => $cid, 'self' => false]); if (!DBA::isResult($contact)) { - return false; - } else { - $data = [$contact["photo"], $contact["thumb"], $contact["micro"]]; + return; } + $data = [ + $contact['photo'] ?? '', + $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])) { @@ -1945,12 +1954,8 @@ class Contact DBA::update('contact', $fields, ['id' => $pcontact['id']]); } } - - return $photos; } } - - return $data; } /** @@ -2052,6 +2057,7 @@ class Contact Worker::add(PRIORITY_HIGH, 'MergeContact', $first, $duplicate['id'], $uid); } + DBA::close($duplicates); Logger::info('Duplicates handled', ['uid' => $uid, 'nurl' => $nurl]); return true; } @@ -2061,7 +2067,7 @@ class Contact * @param string $network Optional network we are probing for * @param boolean $force Optional forcing of network probing (otherwise we use the cached data) * @return boolean - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ public static function updateFromProbe($id, $network = '', $force = false) @@ -2255,7 +2261,7 @@ class Contact * @param bool $interactive * @param string $network * @return array - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ public static function createFromProbe($uid, $url, $interactive = false, $network = '') @@ -2527,7 +2533,7 @@ class Contact * @param bool $sharing True: Contact is now sharing with Owner; False: Contact is now following Owner (default) * @param string $note Introduction additional message * @return bool|null True: follow request is accepted; False: relationship is rejected; Null: relationship is pending - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ public static function addRelationship(array $importer, array $contact, array $datarray, $sharing = false, $note = '') @@ -2727,6 +2733,7 @@ class Contact ); } } + DBA::close($contacts); } /** @@ -2761,7 +2768,7 @@ class Contact * @param string $url An url that we will be redirected to after the authentication * * @return string with "redir" link - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ public static function magicLink($contact_url, $url = '') @@ -2788,7 +2795,7 @@ class Contact * @param string $url An url that we will be redirected to after the authentication * * @return string with "redir" link - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ public static function magicLinkbyId($cid, $url = '') @@ -2805,7 +2812,7 @@ class Contact * @param string $url An url that we will be redirected to after the authentication * * @return string with "redir" link - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ public static function magicLinkByContact($contact, $url = '')