X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FProtocol%2FDFRN.php;h=125d41fe654c74e6b5e307a0aab452d3e6245760;hb=fc4d1296e3a4d61a78438c94ad1216cd8b642027;hp=ad7658a7641a8fc8737e94bb019bbf51e2461071;hpb=0c0b715c633f78467f82fdb1d69c230aaef765ce;p=friendica.git diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index ad7658a764..125d41fe65 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -63,7 +63,7 @@ class DFRN * @param array $owner Owner record * * @return string DFRN entries - * @todo Add type-hints + * @todo Find proper type-hints */ public static function entries($items, $owner) { @@ -120,8 +120,6 @@ class DFRN } } - - // default permissions - anonymous user $sql_extra = " AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' "; @@ -134,6 +132,7 @@ class DFRN ); if (! DBM::is_result($r)) { + logger(sprintf('No contact found for nickname=%d', $owner_nick), LOGGER_WARNING); killme(); } @@ -169,6 +168,7 @@ class DFRN ); if (! DBM::is_result($r)) { + logger(sprintf('No contact found for uid=%d', $owner_id), LOGGER_WARNING); killme(); } @@ -177,8 +177,10 @@ class DFRN $groups = Group::getIdsByContactId($contact['id']); if (count($groups)) { - for ($x = 0; $x < count($groups); $x ++) + for ($x = 0; $x < count($groups); $x ++) { $groups[$x] = '<' . intval($groups[$x]) . '>' ; + } + $gs = implode('|', $groups); } else { $gs = '<<>>' ; // Impossible to match @@ -397,7 +399,7 @@ class DFRN * @param array $owner Owner record * * @return string DFRN mail - * @todo Add type-hints + * @todo Find proper type-hints */ public static function mail($item, $owner) { @@ -433,7 +435,7 @@ class DFRN * @param array $owner Owner record * * @return string DFRN suggestions - * @todo Add type-hints + * @todo Find proper type-hints */ public static function fsuggest($item, $owner) { @@ -462,7 +464,7 @@ class DFRN * @param int $uid User ID * * @return string DFRN relocations - * @todo Add type-hints + * @todo Find proper type-hints */ public static function relocate($owner, $uid) { @@ -524,7 +526,7 @@ class DFRN * @param bool $public Is it a header for public posts? * * @return object XML root object - * @todo Add type-hints + * @todo Find proper type-hints */ private static function addHeader($doc, $owner, $authorelement, $alternatelink = "", $public = false) { @@ -600,7 +602,7 @@ class DFRN * @param boolean $public boolean * * @return object XML author object - * @todo Add type-hints + * @todo Find proper type-hints */ private static function addAuthor($doc, $owner, $authorelement, $public) { @@ -744,7 +746,7 @@ class DFRN * @param array $item Item elements * * @return object XML author object - * @todo Add type-hints + * @todo Find proper type-hints */ private static function addEntryAuthor($doc, $element, $contact_url, $item) { @@ -785,7 +787,7 @@ class DFRN * @param string $activity activity value * * @return object XML activity object - * @todo Add type-hints + * @todo Find proper type-hints */ private static function createActivity($doc, $element, $activity) { @@ -796,12 +798,15 @@ class DFRN if (!$r) { return false; } + if ($r->type) { XML::addElement($doc, $entry, "activity:object-type", $r->type); } + if ($r->id) { XML::addElement($doc, $entry, "id", $r->id); } + if ($r->title) { XML::addElement($doc, $entry, "title", $r->title); } @@ -848,7 +853,7 @@ class DFRN * @param array $item Item element * * @return object XML attachment object - * @todo Add type-hints + * @todo Find proper type-hints */ private static function getAttachment($doc, $root, $item) { @@ -888,7 +893,7 @@ class DFRN * @param bool $single If set, the entry is created as an XML document with a single "entry" element * * @return object XML entry object - * @todo Add type-hints + * @todo Find proper type-hints */ private static function entry($doc, $type, $item, $owner, $comment = false, $cid = 0, $single = false) { @@ -1289,7 +1294,6 @@ class DFRN $postvars['dissolve'] = '1'; } - if ((($contact['rel']) && ($contact['rel'] != CONTACT_IS_SHARING) && (! $contact['blocked'])) || ($owner['page-flags'] == PAGE_COMMUNITY)) { $postvars['data'] = $atom; $postvars['perm'] = 'rw'; @@ -1426,9 +1430,12 @@ class DFRN Contact::markForArchival($contact); return -22; } + $pubkey = $fcontact['pubkey']; + } else { + $pubkey = ''; } - $envelope = Diaspora::buildMessage($atom, $owner, $contact, $owner['uprvkey'], $fcontact['pubkey'], $public_batch); + $envelope = Diaspora::buildMessage($atom, $owner, $contact, $owner['uprvkey'], $pubkey, $public_batch); // Create the endpoint for public posts. This is some WIP and should later be added to the probing if ($public_batch && empty($contact["batch"])) { @@ -1573,7 +1580,7 @@ class DFRN $href = ""; $width = 0; foreach ($avatar->attributes as $attributes) { - /// @TODO Rewrite these similar if () to one switch + /// @TODO Rewrite these similar if() to one switch if ($attributes->name == "href") { $href = $attributes->textContent; } @@ -2075,94 +2082,31 @@ class DFRN // Update the gcontact entry $relocate["server_url"] = preg_replace("=(https?://)(.*)/profile/(.*)=ism", "$1$2", $relocate["url"]); - $x = q( - "UPDATE `gcontact` SET - `name` = '%s', - `photo` = '%s', - `url` = '%s', - `nurl` = '%s', - `addr` = '%s', - `connect` = '%s', - `notify` = '%s', - `server_url` = '%s' - WHERE `nurl` = '%s';", - dbesc($relocate["name"]), - dbesc($relocate["avatar"]), - dbesc($relocate["url"]), - dbesc(normalise_link($relocate["url"])), - dbesc($relocate["addr"]), - dbesc($relocate["addr"]), - dbesc($relocate["notify"]), - dbesc($relocate["server_url"]), - dbesc(normalise_link($old["url"])) - ); + $fields = ['name' => $relocate["name"], 'photo' => $relocate["avatar"], + 'url' => $relocate["url"], 'nurl' => normalise_link($relocate["url"]), + 'addr' => $relocate["addr"], 'connect' => $relocate["addr"], + 'notify' => $relocate["notify"], 'server_url' => $relocate["server_url"]]; + dba::update('gcontact', $fields, ['nurl' => normalise_link($old["url"])]); // Update the contact table. We try to find every entry. - $x = q( - "UPDATE `contact` SET - `name` = '%s', - `avatar` = '%s', - `url` = '%s', - `nurl` = '%s', - `addr` = '%s', - `request` = '%s', - `confirm` = '%s', - `notify` = '%s', - `poll` = '%s', - `site-pubkey` = '%s' - WHERE (`id` = %d AND `uid` = %d) OR (`nurl` = '%s');", - dbesc($relocate["name"]), - dbesc($relocate["avatar"]), - dbesc($relocate["url"]), - dbesc(normalise_link($relocate["url"])), - dbesc($relocate["addr"]), - dbesc($relocate["request"]), - dbesc($relocate["confirm"]), - dbesc($relocate["notify"]), - dbesc($relocate["poll"]), - dbesc($relocate["sitepubkey"]), - intval($importer["id"]), - intval($importer["importer_uid"]), - dbesc(normalise_link($old["url"])) - ); + $fields = ['name' => $relocate["name"], 'avatar' => $relocate["avatar"], + 'url' => $relocate["url"], 'nurl' => normalise_link($relocate["url"]), + 'addr' => $relocate["addr"], 'request' => $relocate["request"], + 'confirm' => $relocate["confirm"], 'notify' => $relocate["notify"], + 'poll' => $relocate["poll"], 'site-pubkey' => $relocate["sitepubkey"]]; + $condition = ["(`id` = ?) OR (`nurl` = ?)", $importer["id"], normalise_link($old["url"])]; + dba::update('contact', $fields, $condition); Contact::updateAvatar($relocate["avatar"], $importer["importer_uid"], $importer["id"], true); - if ($x === false) { - return false; - } + logger('Contacts are updated.'); // update items - /// @todo This is an extreme performance killer - $fields = [ - 'owner-link' => [$old["url"], $relocate["url"]], - 'author-link' => [$old["url"], $relocate["url"]], - //'owner-avatar' => array($old["photo"], $relocate["photo"]), - //'author-avatar' => array($old["photo"], $relocate["photo"]), - ]; - foreach ($fields as $n => $f) { - $r = q( - "SELECT `id` FROM `item` WHERE `%s` = '%s' AND `uid` = %d LIMIT 1", - $n, - dbesc($f[0]), - intval($importer["importer_uid"]) - ); + // This is an extreme performance killer + Item::update(['owner-link' => $relocate["url"]], ['owner-link' => $old["url"], 'uid' => $importer["importer_uid"]]); + Item::update(['author-link' => $relocate["url"]], ['author-link' => $old["url"], 'uid' => $importer["importer_uid"]]); - if (DBM::is_result($r)) { - $x = q( - "UPDATE `item` SET `%s` = '%s' WHERE `%s` = '%s' AND `uid` = %d", - $n, - dbesc($f[1]), - $n, - dbesc($f[0]), - intval($importer["importer_uid"]) - ); - - if ($x === false) { - return false; - } - } - } + logger('Items are updated.'); /// @TODO /// merge with current record, current contents have priority @@ -2827,6 +2771,10 @@ class DFRN $posted_id = Item::insert($item, false, $notify); + if ($notify) { + $posted_id = $notify; + } + logger("Item was stored with id ".$posted_id, LOGGER_DEBUG); if ($item['uid'] == 0) { @@ -2852,6 +2800,7 @@ class DFRN { logger("Processing deletions"); $uri = null; + foreach ($deletion->attributes as $attributes) { if ($attributes->name == "ref") { $uri = $attributes->textContent;