* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
- public static function getByURL($url, $update = null)
+ public static function getByURL(string $url, $update = null)
{
if (empty($url) || Network::isUrlBlocked($url)) {
Logger::info('Domain is blocked', ['url' => $url]);
*
* @return bool True, if the activity is hidden
*/
- public function isHidden(string $activity)
+ public function isHidden(string $activity): bool
{
foreach (self::HIDDEN_ACTIVITIES as $hiddenActivity) {
if ($this->match($activity, $hiddenActivity)) {
*
* @return boolean
*/
- public function match(string $haystack, string $needle)
+ public function match(string $haystack, string $needle): bool
{
return (($haystack === $needle) ||
((basename($needle) === $haystack) &&
* @return array
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
- public static function fetchContent(string $url, int $uid = 0)
+ public static function fetchContent(string $url, int $uid = 0): array
{
return HTTPSignature::fetch($url, $uid);
}
- private static function getAccountType($apcontact)
+ private static function getAccountType(array $apcontact): int
{
$accounttype = -1;
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
- public static function probeProfile($url, $update = true)
+ public static function probeProfile(string $url, bool $update = true): array
{
$apcontact = APContact::getByURL($url, $update);
if (empty($apcontact)) {
* @param integer $uid User ID
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
- public static function fetchOutbox($url, $uid)
+ public static function fetchOutbox(string $url, int $uid)
{
$data = self::fetchContent($url, $uid);
if (empty($data)) {
* @param integer $uid Optional user id
* @return array Endpoint items
*/
- public static function fetchItems(string $url, int $uid = 0)
+ public static function fetchItems(string $url, int $uid = 0): array
{
$data = self::fetchContent($url, $uid);
if (empty($data)) {
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
- public static function isSupportedByContactUrl($url, $update = null)
+ public static function isSupportedByContactUrl(string $url, $update = null)
{
return !empty(APContact::getByURL($url, $update));
}
*
* @return string with replaced emojis
*/
- private static function replaceEmojis(int $uri_id, string $body, array $emojis)
+ private static function replaceEmojis(int $uri_id, string $body, array $emojis): string
{
$body = strtr($body,
array_combine(
* @param string $url message URL
* @return string with GUID
*/
- private static function getGUIDByURL(string $url)
+ private static function getGUIDByURL(string $url): string
{
$parsed = parse_url($url);
* @param array $item
* @return boolean Is the message wanted?
*/
- private static function isSolicitedMessage(array $activity, array $item)
+ private static function isSolicitedMessage(array $activity, array $item): bool
{
// The checks are split to improve the support when searching why a message was accepted.
if (count($activity['receiver']) != 1) {
* @return int|bool New mail table row id or false on error
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
- private static function postMail($activity, $item)
+ private static function postMail(array $activity, array $item)
{
if (($item['gravity'] != GRAVITY_PARENT) && !DBA::exists('mail', ['uri' => $item['thr-parent'], 'uid' => $item['uid']])) {
Logger::info('Parent not found, mail will be discarded.', ['uid' => $item['uid'], 'uri' => $item['thr-parent']]);
* @return string fetched message URL
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
- public static function fetchMissingActivity(string $url, array $child = [], string $relay_actor = '', int $completion = Receiver::COMPLETION_MANUAL)
+ public static function fetchMissingActivity(string $url, array $child = [], string $relay_actor = '', int $completion = Receiver::COMPLETION_MANUAL): string
{
if (!empty($child['receiver'])) {
$uid = ActivityPub\Receiver::getFirstUserFromReceivers($child['receiver']);
* @param string $id object ID
* @return boolean true if message is accepted
*/
- private static function acceptIncomingMessage(array $activity, string $id)
+ private static function acceptIncomingMessage(array $activity, string $id): bool
{
if (empty($activity['as:object'])) {
Logger::info('No object field in activity - accepted', ['id' => $id]);
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
- public static function followUser($activity)
+ public static function followUser(array $activity)
{
$uid = User::getIdForURL($activity['object_id']);
if (empty($uid)) {
* @param array $activity
* @throws \Exception
*/
- public static function updatePerson($activity)
+ public static function updatePerson(array $activity)
{
if (empty($activity['object_id'])) {
return;
* @param array $activity
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
- public static function deletePerson($activity)
+ public static function deletePerson(array $activity)
{
if (empty($activity['object_id']) || empty($activity['actor'])) {
Logger::info('Empty object id or actor.');
* @param array $activity
* @throws \Exception
*/
- public static function blockAccount($activity)
+ public static function blockAccount(array $activity)
{
$cid = Contact::getIdForURL($activity['actor']);
if (empty($cid)) {
* @param array $activity
* @throws \Exception
*/
- public static function unblockAccount($activity)
+ public static function unblockAccount(array $activity)
{
$cid = Contact::getIdForURL($activity['actor']);
if (empty($cid)) {
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
- public static function acceptFollowUser($activity)
+ public static function acceptFollowUser(array $activity)
{
$uid = User::getIdForURL($activity['object_actor']);
if (empty($uid)) {
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
- public static function rejectFollowUser($activity)
+ public static function rejectFollowUser(array $activity)
{
$uid = User::getIdForURL($activity['object_actor']);
if (empty($uid)) {
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
- public static function undoActivity($activity)
+ public static function undoActivity(array $activity)
{
if (empty($activity['object_id'])) {
return;
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
- public static function undoFollowUser($activity)
+ public static function undoFollowUser(array $activity)
{
$uid = User::getIdForURL($activity['object_object']);
if (empty($uid)) {
* @param integer $cid Contact ID
* @throws \Exception
*/
- private static function switchContact($cid)
+ private static function switchContact(int $cid)
{
$contact = DBA::selectFirst('contact', ['network', 'url'], ['id' => $cid]);
if (!DBA::isResult($contact) || in_array($contact['network'], [Protocol::ACTIVITYPUB, Protocol::DFRN]) || Contact::isLocal($contact['url'])) {
* @return array
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
- private static function getImplicitMentionList(array $parent)
+ private static function getImplicitMentionList(array $parent): array
{
$parent_terms = Tag::getByURIId($parent['uri-id'], [Tag::MENTION, Tag::IMPLICIT_MENTION, Tag::EXCLUSIVE_MENTION]);
* @param array $parent
* @return string
*/
- private static function removeImplicitMentionsFromBody(string $body, array $parent)
+ private static function removeImplicitMentionsFromBody(string $body, array $parent): string
{
if (DI::config()->get('system', 'disable_implicit_mentions')) {
return $body;
* @param $header
* @param integer $uid User ID
* @throws \Exception
+ * @todo Find type for $body/$header
*/
- public static function processInbox($body, $header, $uid)
+ public static function processInbox($body, $header, int $uid)
{
$activity = json_decode($body, true);
if (empty($activity)) {
* @param string $object_id Object ID of the the provided object
* @param integer $uid User ID
*
- * @return string with object type
+ * @return string with object type or NULL
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
- private static function fetchObjectType($activity, $object_id, $uid = 0)
+ private static function fetchObjectType(array $activity, string $object_id, int $uid = 0)
{
if (!empty($activity['as:object'])) {
$object_type = JsonLD::fetchElement($activity['as:object'], '@type');
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
- public static function prepareObjectData($activity, $uid, $push, &$trust_source)
+ public static function prepareObjectData(array $activity, int $uid, bool $push, bool &$trust_source): array
{
$id = JsonLD::fetchElement($activity, '@id');
if (!empty($id) && !$trust_source) {
* @param array $receivers Array with receivers
* @return integer user id;
*/
- public static function getFirstUserFromReceivers($receivers)
+ public static function getFirstUserFromReceivers(array $receivers): int
{
foreach ($receivers as $receiver) {
if (!empty($receiver)) {
* @param array $signer The signer of the post
* @throws \Exception
*/
- public static function processActivity($activity, string $body = '', int $uid = null, bool $trust_source = false, bool $push = false, array $signer = [])
+ public static function processActivity(array $activity, string $body = '', int $uid = null, bool $trust_source = false, bool $push = false, array $signer = [])
{
$type = JsonLD::fetchElement($activity, '@type');
if (!$type) {
*
* @return int user id
*/
- public static function getBestUserForActivity(array $activity)
+ public static function getBestUserForActivity(array $activity): int
{
$uid = 0;
$actor = JsonLD::fetchElement($activity, 'as:actor', '@id') ?? '';
return $uid;
}
- public static function getReceiverURL($activity)
+ // @TODO Missing documentation
+ public static function getReceiverURL(array $activity): array
{
$urls = [];
* @return array with receivers (user id)
* @throws \Exception
*/
- private static function getReceivers($activity, $actor, $tags = [], $fetch_unlisted = false)
+ private static function getReceivers(array $activity, string $actor, array $tags = [], bool $fetch_unlisted = false): array
{
$reply = $receivers = [];
* @return array with receivers (user id)
* @throws \Exception
*/
- private static function getReceiverForActor($actor, $tags, $receivers, $target_type, $profile)
+ private static function getReceiverForActor(string $actor, array $tags, array $receivers, int $target_type, array $profile): array
{
$basecondition = ['rel' => [Contact::SHARING, Contact::FRIEND, Contact::FOLLOWER],
'network' => Protocol::FEDERATED, 'archive' => false, 'pending' => false];
* Tests if the contact is a valid receiver for this actor
*
* @param array $contact
- * @param string $actor
* @param array $tags
*
* @return bool with receivers (user id)
* @throws \Exception
*/
- private static function isValidReceiverForActor($contact, $tags)
+ private static function isValidReceiverForActor(array $contact, string $tags): bool
{
// Are we following the contact? Then this is a valid receiver
if (in_array($contact['rel'], [Contact::SHARING, Contact::FRIEND])) {
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
- public static function switchContact($cid, $uid, $url)
+ public static function switchContact(int $cid, int $uid, string $url)
{
if (DBA::exists('contact', ['id' => $cid, 'network' => Protocol::ACTIVITYPUB])) {
Logger::info('Contact is already ActivityPub', ['id' => $cid, 'uid' => $uid, 'url' => $url]);
}
/**
- *
+ * @TODO Fix documentation and type-hints
*
* @param $receivers
* @param $actor
}
/**
- *
+ * @TODO Fix documentation and type-hints
*
* @param $object_data
* @param array $activity
*
* @return mixed
*/
- private static function addActivityFields($object_data, $activity)
+ private static function addActivityFields($object_data, array $activity)
{
if (!empty($activity['published']) && empty($object_data['published'])) {
$object_data['published'] = JsonLD::fetchElement($activity, 'as:published', '@value');
* @param array $languages
* @return array Languages
*/
- public static function processLanguages(array $languages)
+ public static function processLanguages(array $languages): array
{
if (empty($languages)) {
return [];
*
* @return array with tags in a simplified format
*/
- public static function processTags(array $tags)
+ public static function processTags(array $tags): array
{
$taglist = [];
* @param array $emojis
* @return array with emojis in a simplified format
*/
- private static function processEmojis(array $emojis)
+ private static function processEmojis(array $emojis): array
{
$emojilist = [];
*
* @return array Attachments in a simplified format
*/
- private static function processAttachments(array $attachments)
+ private static function processAttachments(array $attachments): array
{
$attachlist = [];
*
* @return array Questions in a simplified format
*/
- private static function processQuestion(array $object)
+ private static function processQuestion(array $object): array
{
$question = [];
* @param array $object
* @param array $object_data
*
- * @return array
+ * @return array Object data (?)
* @throws \Exception
*/
- private static function getSource($object, $object_data)
+ private static function getSource(array $object, array $object_data): array
{
$object_data['source'] = JsonLD::fetchElement($object, 'as:source', 'as:content', 'as:mediaType', 'text/bbcode');
$object_data['source'] = JsonLD::fetchElement($object_data, 'source', '@value');
*
* @param array $object
*
- * @return array
+ * @return array|bool Object data or FALSE if $object does not contain @id element
* @throws \Exception
*/
- private static function processObject($object)
+ private static function processObject(array $object)
{
if (!JsonLD::fetchElement($object, '@id')) {
return false;
* @param array $inboxes
* @return array inboxes with added relay servers
*/
- public static function addRelayServerInboxes(array $inboxes = [])
+ public static function addRelayServerInboxes(array $inboxes = []): array
{
foreach (Relay::getList(['inbox']) as $contact) {
$inboxes[$contact['inbox']] = $contact['inbox'];
* @param array $inboxes
* @return array inboxes with added relay servers
*/
- public static function addRelayServerInboxesForItem(int $item_id, array $inboxes = [])
+ public static function addRelayServerInboxesForItem(int $item_id, array $inboxes = []): array
{
$item = Post::selectFirst(['uid'], ['id' => $item_id]);
if (empty($item)) {
* @return array importer
* @throws \Exception
*/
- public static function getImporter($cid, $uid = 0)
+ public static function getImporter(int $cid, int $uid = 0): array
{
$condition = ['id' => $cid, 'blocked' => false, 'pending' => false];
$contact = DBA::selectFirst('contact', [], $condition);
* @throws \ImagickException
* @todo Find proper type-hints
*/
- public static function entries($items, $owner)
+ public static function entries(array $items, array $owner): string
{
$doc = new DOMDocument('1.0', 'utf-8');
$doc->formatOutput = true;
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
- public static function itemFeed(int $uri_id, int $uid, bool $conversation = false)
+ public static function itemFeed(int $uri_id, int $uid, bool $conversation = false): string
{
if ($conversation) {
$condition = ['parent-uri-id' => $uri_id];
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @todo Find proper type-hints
*/
- public static function mail(array $mail, array $owner)
+ public static function mail(array $mail, array $owner): string
{
$doc = new DOMDocument('1.0', 'utf-8');
$doc->formatOutput = true;
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @todo Find proper type-hints
*/
- public static function fsuggest($item, $owner)
+ public static function fsuggest(array $item, array $owner): string
{
$doc = new DOMDocument('1.0', 'utf-8');
$doc->formatOutput = true;
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @todo Find proper type-hints
*/
- public static function relocate($owner, $uid)
+ public static function relocate(array $owner, int $uid): string
{
/* get site pubkey. this could be a new installation with no site keys*/
*
* @return object XML root object
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
- * @todo Find proper type-hints
+ * @todo Find proper type-hint for returned type
*/
- private static function addHeader(DOMDocument $doc, $owner, $authorelement, $alternatelink = "", $public = false)
+ private static function addHeader(DOMDocument $doc, array $owner, string $authorelement, string $alternatelink = "", bool $public = false)
{
if ($alternatelink == "") {
* viewer's timezone also, but first we are going to convert it from the birthday
* person's timezone to GMT - so the viewer may find the birthday starting at
* 6:00PM the day before, but that will correspond to midnight to the birthday person.
+ *
+ * @param int $uid User id
+ * @param string $tz Time zone string, like UTC
+ * @return string Formatted birthday string
*/
- private static function determineNextBirthday($uid, $tz)
+ private static function determineNextBirthday(int $uid, string $tz): string
{
$birthday = '';
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @todo Find proper type-hints
*/
- private static function addAuthor(DOMDocument $doc, array $owner, $authorelement, $public)
+ private static function addAuthor(DOMDocument $doc, array $owner, string $authorelement, bool $public)
{
// Should the profile be "unsearchable" in the net? Then add the "hide" element
$hide = DBA::exists('profile', ['uid' => $owner['uid'], 'net-publish' => false]);
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @todo Find proper type-hints
*/
- private static function addEntryAuthor(DOMDocument $doc, $element, $contact_url, $item)
+ private static function addEntryAuthor(DOMDocument $doc, string $element, string $contact_url, array $item)
{
$author = $doc->createElement($element);
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @todo Find proper type-hints
*/
- private static function createActivity(DOMDocument $doc, $element, $activity, $uriid)
+ private static function createActivity(DOMDocument $doc, string $element, string $activity, int $uriid)
{
if ($activity) {
$entry = $doc->createElement($element);
* @return void XML attachment object
* @todo Find proper type-hints
*/
- private static function getAttachment($doc, $root, $item)
+ private static function getAttachment($doc, $root, array $item)
{
foreach (Post\Media::getByURIId($item['uri-id'], [Post\Media::DOCUMENT, Post\Media::TORRENT, Post\Media::UNKNOWN]) as $attachment) {
$attributes = ['rel' => 'enclosure',
* @throws \ImagickException
* @todo Find proper type-hints
*/
- private static function entry(DOMDocument $doc, $type, array $item, array $owner, $comment = false, $cid = 0, $single = false)
+ private static function entry(DOMDocument $doc, string $type, array $item, array $owner, bool $comment = false, int $cid = 0, bool $single = false)
{
$mentioned = [];
* @param array $owner Owner record
* @param array $contact Contact record of the receiver
* @param string $atom Content that will be transmitted
- *
* @param bool $public_batch
* @return int Deliver status. Negative values mean an error.
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
- public static function transmit($owner, $contact, $atom, $public_batch = false)
+ public static function transmit(array $owner, array $contact, string $atom, bool $public_batch = false)
{
if (!$public_batch) {
if (empty($contact['addr'])) {
* @throws \ImagickException
* @todo Find good type-hints for all parameter
*/
- private static function fetchauthor(\DOMXPath $xpath, \DOMNode $context, $importer, $element, $onlyfetch, $xml = "")
+ private static function fetchauthor(\DOMXPath $xpath, \DOMNode $context, array $importer, string $element, bool $onlyfetch, string $xml = ""): array
{
$author = [];
$author["name"] = XML::getFirstNodeValue($xpath, $element."/atom:name/text()", $context);
* @return string XML string
* @todo Find good type-hints for all parameter
*/
- private static function transformActivity($xpath, $activity, $element)
+ private static function transformActivity($xpath, $activity, string $element): string
{
if (!is_object($activity)) {
return "";
* @throws \Exception
* @todo Find good type-hints for all parameter
*/
- private static function processMail($xpath, $mail, $importer)
+ private static function processMail($xpath, $mail, array $importer)
{
Logger::notice("Processing mails");
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @todo Find good type-hints for all parameter
*/
- private static function processSuggestion($xpath, $suggestion, $importer)
+ private static function processSuggestion($xpath, $suggestion, array $importer)
{
Logger::notice('Processing suggestions');
* @param integer $from_cid
* @return bool Was the adding successful?
*/
- private static function addSuggestion(int $uid, int $cid, int $from_cid, string $note = '')
+ private static function addSuggestion(int $uid, int $cid, int $from_cid, string $note = ''): bool
{
$owner = User::getOwnerDataById($uid);
$contact = Contact::getById($cid);
* @throws \ImagickException
* @todo Find good type-hints for all parameter
*/
- private static function processRelocation($xpath, $relocation, $importer)
+ private static function processRelocation($xpath, $relocation, array $importer): bool
{
Logger::notice("Processing relocations");
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @todo set proper type-hints (array?)
*/
- private static function updateContent($current, $item, $importer, $entrytype)
+ private static function updateContent(array $current, array $item, array $importer, int $entrytype)
{
$changed = false;
* @throws \Exception
* @todo set proper type-hints (array?)
*/
- private static function getEntryType($importer, $item)
+ private static function getEntryType(array $importer, array $item): int
{
if ($item["thr-parent"] != $item["uri"]) {
$community = false;
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @todo set proper type-hints (array?)
*/
- private static function processVerbs($entrytype, $importer, &$item, &$is_like)
+ private static function processVerbs(int $entrytype, array $importer, array &$item, bool &$is_like)
{
Logger::info("Process verb ".$item["verb"]." and object-type ".$item["object-type"]." for entrytype ".$entrytype);
* @return void
* @todo set proper type-hints
*/
- private static function parseLinks($links, &$item)
+ private static function parseLinks($links, array &$item)
{
$rel = "";
$href = "";
* @param array $imporer
* @return boolean Is the message wanted?
*/
- private static function isSolicitedMessage(array $item, array $importer)
+ private static function isSolicitedMessage(array $item, array $importer): bool
{
if (DBA::exists('contact', ["`nurl` = ? AND `uid` != ? AND `rel` IN (?, ?)",
Strings::normaliseLink($item["author-link"]), 0, Contact::FRIEND, Contact::SHARING])) {
* @param object $entry entry elements
* @param array $importer Record of the importer user mixed with contact of the content
* @param string $xml xml
+ * @param int $protocol Protocol
* @return void
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
* @todo Add type-hints
*/
- private static function processEntry($header, $xpath, $entry, $importer, $xml, $protocol)
+ private static function processEntry(array $header, $xpath, $entry, array $importer, string $xml, int $protocol)
{
Logger::notice("Processing entries");
* @throws \Exception
* @todo set proper type-hints
*/
- private static function processDeletion($xpath, $deletion, $importer)
+ private static function processDeletion($xpath, $deletion, array $importer)
{
Logger::notice("Processing deletions");
$uri = null;
* @return integer Import status
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
- * @todo set proper type-hints
*/
- public static function import($xml, $importer, $protocol, $direction)
+ public static function import(string $xml, array $importer, int $protocol, int $direction): int
{
if ($xml == "") {
return 400;
*
* @return string activity verb
*/
- private static function constructVerb(array $item)
+ private static function constructVerb(array $item): string
{
if ($item['verb']) {
return $item['verb'];
return Activity::POST;
}
- private static function tgroupCheck($uid, $item)
+ // @TODO Documentation missing
+ private static function tgroupCheck(int $uid, array $item): bool
{
$mention = false;
* item is assumed to be up-to-date. If the timestamps are equal it
* assumes the update has been seen before and should be ignored.
*
- * @param $existing
- * @param $update
+ * @param array $existing
+ * @param array $update
* @return bool
* @throws \Exception
*/
- private static function isEditedTimestampNewer($existing, $update)
+ private static function isEditedTimestampNewer(array $existing, array $update): bool
{
if (empty($existing['edited'])) {
return true;
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
- public static function isSupportedByContactUrl($url)
+ public static function isSupportedByContactUrl(string $url): bool
{
$probe = Probe::uri($url, Protocol::DFRN);
return $probe['network'] == Protocol::DFRN;