Merge pull request #10478 from annando/notice

Fix notice "undefined index: uri"
This commit is contained in:
Hypolite Petovan 2021-07-09 19:31:30 -04:00 committed by GitHub
commit f3f890702c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 136 additions and 100 deletions

View file

@ -124,7 +124,7 @@ class APContact
$apcontact = DBA::selectFirst('apcontact', [], ['addr' => $url]); $apcontact = DBA::selectFirst('apcontact', [], ['addr' => $url]);
} }
if (DBA::isResult($apcontact) && ($apcontact['updated'] > $ref_update) && !empty($apcontact['pubkey'])) { if (DBA::isResult($apcontact) && ($apcontact['updated'] > $ref_update) && !empty($apcontact['pubkey']) && !empty($apcontact['uri-id'])) {
return $apcontact; return $apcontact;
} }
@ -352,7 +352,7 @@ class APContact
if (empty($apcontact['uuid'])) { if (empty($apcontact['uuid'])) {
$apcontact['uri-id'] = ItemURI::getIdByURI($apcontact['url']); $apcontact['uri-id'] = ItemURI::getIdByURI($apcontact['url']);
} else { } else {
$apcontact['uri-id'] = ItemURI::insert(['uri' => $apcontact['uri'], 'guid' => $apcontact['uuid']]); $apcontact['uri-id'] = ItemURI::insert(['uri' => $apcontact['url'], 'guid' => $apcontact['uuid']]);
} }
$apcontact['updated'] = DateTimeFormat::utcNow(); $apcontact['updated'] = DateTimeFormat::utcNow();

View file

@ -1072,12 +1072,12 @@ class Contact
return 0; return 0;
} }
$contact = self::getByURL($url, false, ['id', 'network'], $uid); $contact = self::getByURL($url, false, ['id', 'network', 'uri-id'], $uid);
if (!empty($contact)) { if (!empty($contact)) {
$contact_id = $contact["id"]; $contact_id = $contact["id"];
if (empty($update)) { if (empty($update) && (!empty($contact['uri-id']) || is_bool($update))) {
Logger::debug('Contact found', ['url' => $url, 'uid' => $uid, 'update' => $update, 'cid' => $contact_id]); Logger::debug('Contact found', ['url' => $url, 'uid' => $uid, 'update' => $update, 'cid' => $contact_id]);
return $contact_id; return $contact_id;
} }
@ -2157,7 +2157,7 @@ class Contact
if (empty($guid)) { if (empty($guid)) {
$ret['uri-id'] = ItemURI::getIdByURI($ret['url']); $ret['uri-id'] = ItemURI::getIdByURI($ret['url']);
} else { } else {
$ret['uri-id'] = ItemURI::insert(['uri' => $ret['uri'], 'guid' => $guid]); $ret['uri-id'] = ItemURI::insert(['uri' => $ret['url'], 'guid' => $guid]);
} }
$ret['nurl'] = Strings::normaliseLink($ret['url']); $ret['nurl'] = Strings::normaliseLink($ret['url']);

View file

@ -333,7 +333,8 @@ class Receiver
$object_type = self::fetchObjectType($activity, $object_id, $uid); $object_type = self::fetchObjectType($activity, $object_id, $uid);
// Fetch the content only on activities where this matters // Fetch the content only on activities where this matters
if (in_array($type, ['as:Create', 'as:Update', 'as:Announce'])) { // We can receive "#emojiReaction" when fetching content from Hubzilla systems
if (in_array($type, ['as:Create', 'as:Update', 'as:Announce']) || strpos($type, '#emojiReaction')) {
// Always fetch on "Announce" // Always fetch on "Announce"
$object_data = self::fetchObject($object_id, $activity['as:object'], $trust_source && ($type != 'as:Announce'), $uid); $object_data = self::fetchObject($object_id, $activity['as:object'], $trust_source && ($type != 'as:Announce'), $uid);
if (empty($object_data)) { if (empty($object_data)) {
@ -501,7 +502,7 @@ class Receiver
if (!empty($activity['from-relay'])) { if (!empty($activity['from-relay'])) {
$object_data['from-relay'] = $activity['from-relay']; $object_data['from-relay'] = $activity['from-relay'];
} }
switch ($type) { switch ($type) {
case 'as:Create': case 'as:Create':
if (in_array($object_data['object_type'], self::CONTENT_TYPES)) { if (in_array($object_data['object_type'], self::CONTENT_TYPES)) {
@ -627,7 +628,7 @@ class Receiver
* @param array $activity * @param array $activity
* @param string $actor * @param string $actor
* @param array $tags * @param array $tags
* @param boolean $fetch_unlisted * @param boolean $fetch_unlisted
* *
* @return array with receivers (user id) * @return array with receivers (user id)
* @throws \Exception * @throws \Exception
@ -687,7 +688,7 @@ class Receiver
$receivers[0] = ['uid' => 0, 'type' => self::TARGET_GLOBAL]; $receivers[0] = ['uid' => 0, 'type' => self::TARGET_GLOBAL];
} }
// Add receiver "-1" for unlisted posts // Add receiver "-1" for unlisted posts
if ($fetch_unlisted && ($receiver == self::PUBLIC_COLLECTION) && ($element == 'as:cc')) { if ($fetch_unlisted && ($receiver == self::PUBLIC_COLLECTION) && ($element == 'as:cc')) {
$receivers[-1] = ['uid' => -1, 'type' => self::TARGET_GLOBAL]; $receivers[-1] = ['uid' => -1, 'type' => self::TARGET_GLOBAL];
} }
@ -950,7 +951,7 @@ class Receiver
Logger::info('Empty id'); Logger::info('Empty id');
return false; return false;
} }
if ($id != $object_id) { if ($id != $object_id) {
Logger::info('Fetched id differs from provided id', ['provided' => $object_id, 'fetched' => $id]); Logger::info('Fetched id differs from provided id', ['provided' => $object_id, 'fetched' => $id]);
return false; return false;
@ -1232,7 +1233,7 @@ class Receiver
if (empty($object['as:url'])) { if (empty($object['as:url'])) {
return $object_data; return $object_data;
} }
$urls = $object['as:url']; $urls = $object['as:url'];
$keys = array_keys($urls); $keys = array_keys($urls);
if (!is_numeric(array_pop($keys))) { if (!is_numeric(array_pop($keys))) {

View file

@ -71,95 +71,6 @@ return [
'theme' => 'frio', 'theme' => 'frio',
], ],
], ],
'contact' => [
[
'id' => 42,
'uid' => 42,
'name' => 'Self contact',
'nick' => 'selfcontact',
'self' => 1,
'nurl' => 'http://localhost/profile/selfcontact',
'url' => 'http://localhost/profile/selfcontact',
'about' => 'User used in tests',
'pending' => 0,
'blocked' => 0,
'rel' => Contact::FOLLOWER,
'network' => Protocol::DFRN,
'location' => 'DFRN',
],
// Having the same name and nick allows us to test
// the fallback to api_get_nick() in api_get_user()
[
'id' => 43,
'uid' => 0,
'name' => 'othercontact',
'nick' => 'othercontact',
'self' => 0,
'nurl' => 'http://localhost/profile/othercontact',
'url' => 'http://localhost/profile/othercontact',
'pending' => 0,
'blocked' => 0,
'rel' => Contact::NOTHING,
'network' => Protocol::DFRN,
'location' => 'DFRN',
],
[
'id' => 44,
'uid' => 42,
'name' => 'Friend contact',
'nick' => 'friendcontact',
'self' => 0,
'nurl' => 'http://localhost/profile/friendcontact',
'url' => 'http://localhost/profile/friendcontact',
'pending' => 0,
'blocked' => 0,
'rel' => Contact::SHARING,
'network' => Protocol::DFRN,
'location' => 'DFRN',
],
[
'id' => 45,
'uid' => 0,
'name' => 'Friend contact',
'nick' => 'friendcontact',
'self' => 0,
'nurl' => 'http://localhost/profile/friendcontact',
'url' => 'http://localhost/profile/friendcontact',
'pending' => 0,
'blocked' => 0,
'rel' => Contact::SHARING,
'network' => Protocol::DFRN,
'location' => 'DFRN',
],
[
'id' => 46,
'uid' => 42,
'name' => 'Mutual contact',
'nick' => 'mutualcontact',
'self' => 0,
'nurl' => 'http://localhost/profile/mutualcontact',
'url' => 'http://localhost/profile/mutualcontact',
'pending' => 0,
'blocked' => 0,
'rel' => Contact::FRIEND,
'network' => Protocol::DFRN,
'location' => 'DFRN',
],
[
'id' => 47,
'uid' => 0,
'name' => 'Mutual contact',
'nick' => 'mutualcontact',
'self' => 0,
'nurl' => 'http://localhost/profile/mutualcontact',
'url' => 'http://localhost/profile/mutualcontact',
'pending' => 0,
'blocked' => 0,
'rel' => Contact::SHARING,
'network' => Protocol::DFRN,
'location' => 'DFRN',
],
],
'item-uri' => [ 'item-uri' => [
[ [
'id' => 1, 'id' => 1,
@ -191,6 +102,122 @@ return [
'uri' => '6', 'uri' => '6',
'guid' => '6', 'guid' => '6',
], ],
[
'id' => 42,
'uri' => 'http://localhost/profile/selfcontact',
'guid' => '42',
],
[
'id' => 43,
'uri' => 'http://localhost/profile/othercontact',
'guid' => '43',
],
[
'id' => 44,
'uri' => 'http://localhost/profile/friendcontact',
'guid' => '44',
],
[
'id' => 46,
'uri' => 'http://localhost/profile/mutualcontact',
'guid' => '46',
],
],
'contact' => [
[
'id' => 42,
'uid' => 42,
'uri-id' => 42,
'name' => 'Self contact',
'nick' => 'selfcontact',
'self' => 1,
'nurl' => 'http://localhost/profile/selfcontact',
'url' => 'http://localhost/profile/selfcontact',
'about' => 'User used in tests',
'pending' => 0,
'blocked' => 0,
'rel' => Contact::FOLLOWER,
'network' => Protocol::DFRN,
'location' => 'DFRN',
],
// Having the same name and nick allows us to test
// the fallback to api_get_nick() in api_get_user()
[
'id' => 43,
'uid' => 0,
'uri-id' => 43,
'name' => 'othercontact',
'nick' => 'othercontact',
'self' => 0,
'nurl' => 'http://localhost/profile/othercontact',
'url' => 'http://localhost/profile/othercontact',
'pending' => 0,
'blocked' => 0,
'rel' => Contact::NOTHING,
'network' => Protocol::DFRN,
'location' => 'DFRN',
],
[
'id' => 44,
'uid' => 42,
'uri-id' => 44,
'name' => 'Friend contact',
'nick' => 'friendcontact',
'self' => 0,
'nurl' => 'http://localhost/profile/friendcontact',
'url' => 'http://localhost/profile/friendcontact',
'pending' => 0,
'blocked' => 0,
'rel' => Contact::SHARING,
'network' => Protocol::DFRN,
'location' => 'DFRN',
],
[
'id' => 45,
'uid' => 0,
'uri-id' => 44,
'name' => 'Friend contact',
'nick' => 'friendcontact',
'self' => 0,
'nurl' => 'http://localhost/profile/friendcontact',
'url' => 'http://localhost/profile/friendcontact',
'pending' => 0,
'blocked' => 0,
'rel' => Contact::SHARING,
'network' => Protocol::DFRN,
'location' => 'DFRN',
],
[
'id' => 46,
'uid' => 42,
'uri-id' => 46,
'name' => 'Mutual contact',
'nick' => 'mutualcontact',
'self' => 0,
'nurl' => 'http://localhost/profile/mutualcontact',
'url' => 'http://localhost/profile/mutualcontact',
'pending' => 0,
'blocked' => 0,
'rel' => Contact::FRIEND,
'network' => Protocol::DFRN,
'location' => 'DFRN',
],
[
'id' => 47,
'uid' => 0,
'uri-id' => 46,
'name' => 'Mutual contact',
'nick' => 'mutualcontact',
'self' => 0,
'nurl' => 'http://localhost/profile/mutualcontact',
'url' => 'http://localhost/profile/mutualcontact',
'pending' => 0,
'blocked' => 0,
'rel' => Contact::SHARING,
'network' => Protocol::DFRN,
'location' => 'DFRN',
],
], ],
'verb' => [ 'verb' => [
[ [

View file

@ -33,10 +33,18 @@ return [
'theme' => 'frio', 'theme' => 'frio',
], ],
], ],
'item-uri' => [
[
'id' => 42,
'uri' => 'http://localhost/profile/selfcontact',
'guid' => '42',
],
],
'contact' => [ 'contact' => [
[ [
'id' => 42, 'id' => 42,
'uid' => 42, 'uid' => 42,
'uri-id' => 42,
'name' => 'Self contact', 'name' => 'Self contact',
'nick' => 'selfcontact', 'nick' => 'selfcontact',
'self' => 1, 'self' => 1,