From 14cb128264248a726f12f9d99ad305e76231ea25 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 16 Jun 2018 06:44:19 +0000 Subject: [PATCH] New function for generating item URI --- include/api.php | 2 +- include/text.php | 27 --------------------------- mod/item.php | 2 +- mod/photos.php | 6 +++--- mod/poke.php | 2 +- mod/subthread.php | 2 +- mod/tagger.php | 2 +- src/Model/Event.php | 2 +- src/Model/Item.php | 33 ++++++++++++++++++++++++++++----- src/Protocol/Diaspora.php | 18 ++++++++++++++---- 10 files changed, 51 insertions(+), 45 deletions(-) diff --git a/include/api.php b/include/api.php index 00c2173c38..af71e2f1cf 100644 --- a/include/api.php +++ b/include/api.php @@ -4599,7 +4599,7 @@ function save_media_to_database($mediatype, $media, $type, $album, $allow_cid, $ function post_photo_item($hash, $allow_cid, $deny_cid, $allow_gid, $deny_gid, $filetype, $visibility = false) { // get data about the api authenticated user - $uri = item_new_uri(get_app()->get_hostname(), intval(api_user())); + $uri = Item::newURI(intval(api_user())); $owner_record = q("SELECT * FROM `contact` WHERE `uid`= %d AND `self` LIMIT 1", intval(api_user())); $arr = []; diff --git a/include/text.php b/include/text.php index acc6bec4fb..612100cb67 100644 --- a/include/text.php +++ b/include/text.php @@ -462,33 +462,6 @@ function perms2str($p) { return $ret; } - -/** - * generate a guaranteed unique (for this domain) item ID for ATOM - * safe from birthday paradox - * - * @param string $hostname - * @param int $uid - * @return string - */ -function item_new_uri($hostname, $uid, $guid = "") { - - do { - if ($guid == "") { - $hash = get_guid(32); - } else { - $hash = $guid; - $guid = ""; - } - - $uri = "urn:X-dfrn:" . $hostname . ':' . $uid . ':' . $hash; - - $dups = dba::exists('item', ['uri' => $uri]); - } while ($dups == true); - - return $uri; -} - /** * @deprecated * wrapper to load a view template, checking for alternate diff --git a/mod/item.php b/mod/item.php index 823350874b..f164fb0ae2 100644 --- a/mod/item.php +++ b/mod/item.php @@ -576,7 +576,7 @@ function item_post(App $a) { $notify_type = ($parent ? 'comment-new' : 'wall-new'); - $uri = ($message_id ? $message_id : item_new_uri($a->get_hostname(), $profile_uid, $guid)); + $uri = ($message_id ? $message_id : Item::newURI($profile_uid, $guid)); // Fallback so that we alway have a parent uri if (!$thr_parent_uri || !$parent) { diff --git a/mod/photos.php b/mod/photos.php index 9bc870ca13..f6540c2608 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -454,7 +454,7 @@ function photos_post(App $a) if (!$item_id) { // Create item container $title = ''; - $uri = item_new_uri($a->get_hostname(),$page_owner_uid); + $uri = Item::newURI($page_owner_uid); $arr = []; $arr['guid'] = get_guid(32); @@ -624,7 +624,7 @@ function photos_post(App $a) if (count($taginfo)) { foreach ($taginfo as $tagged) { - $uri = item_new_uri($a->get_hostname(), $page_owner_uid); + $uri = Item::newURI($page_owner_uid); $arr = []; $arr['guid'] = get_guid(32); @@ -848,7 +848,7 @@ function photos_post(App $a) $smallest = 2; } - $uri = item_new_uri($a->get_hostname(), $page_owner_uid); + $uri = Item::newURI($page_owner_uid); // Create item container $lat = $lon = null; diff --git a/mod/poke.php b/mod/poke.php index 73e8e1740d..470f1eb2d6 100644 --- a/mod/poke.php +++ b/mod/poke.php @@ -92,7 +92,7 @@ function poke_init(App $a) { $poster = $a->contact; - $uri = item_new_uri($a->get_hostname(), $uid); + $uri = Item::newURI($uid); $arr = []; diff --git a/mod/subthread.php b/mod/subthread.php index db8b9ba4fe..e2c11d0a3f 100644 --- a/mod/subthread.php +++ b/mod/subthread.php @@ -92,7 +92,7 @@ function subthread_content(App $a) { return; } - $uri = item_new_uri($a->get_hostname(),$owner_uid); + $uri = Item::newURI($owner_uid); $post_type = (($item['resource-id']) ? L10n::t('photo') : L10n::t('status')); $objtype = (($item['resource-id']) ? ACTIVITY_OBJ_IMAGE : ACTIVITY_OBJ_NOTE ); diff --git a/mod/tagger.php b/mod/tagger.php index fa8dc35301..e72061b592 100644 --- a/mod/tagger.php +++ b/mod/tagger.php @@ -65,7 +65,7 @@ function tagger_content(App $a) { return; } - $uri = item_new_uri($a->get_hostname(),$owner_uid); + $uri = Item::newURI($owner_uid); $xterm = xmlify($term); $post_type = (($item['resource-id']) ? L10n::t('photo') : L10n::t('status')); $targettype = (($item['resource-id']) ? ACTIVITY_OBJ_IMAGE : ACTIVITY_OBJ_NOTE ); diff --git a/src/Model/Event.php b/src/Model/Event.php index 1c848dcad7..9b258960e6 100644 --- a/src/Model/Event.php +++ b/src/Model/Event.php @@ -234,7 +234,7 @@ class Event extends BaseObject $event['id'] = intval(defaults($arr, 'id' , 0)); $event['uid'] = intval(defaults($arr, 'uid' , 0)); $event['cid'] = intval(defaults($arr, 'cid' , 0)); - $event['uri'] = defaults($arr, 'uri' , item_new_uri($a->get_hostname(), $event['uid'])); + $event['uri'] = defaults($arr, 'uri' , Item::newURI($event['uid'])); $event['type'] = defaults($arr, 'type' , 'event'); $event['summary'] = defaults($arr, 'summary' , ''); $event['desc'] = defaults($arr, 'desc' , ''); diff --git a/src/Model/Item.php b/src/Model/Item.php index 5fe096c821..a30ed37394 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -675,7 +675,7 @@ class Item extends BaseObject } $item['guid'] = self::guid($item, $notify); - $item['uri'] = notags(trim(defaults($item, 'uri', item_new_uri($a->get_hostname(), $item['uid'], $item['guid'])))); + $item['uri'] = notags(trim(defaults($item, 'uri', self::newURI($item['uid'], $item['guid'])))); // Store conversation data $item = Conversation::insert($item); @@ -853,8 +853,8 @@ class Item extends BaseObject } //unset($item['author-link']); - //unset($item['author-name']); - //unset($item['author-avatar']); + unset($item['author-name']); + unset($item['author-avatar']); //unset($item['owner-link']); unset($item['owner-name']); @@ -1528,6 +1528,29 @@ class Item extends BaseObject return $guid_prefix.$host_hash; } + /** + * generate an unique URI + * + * @param integer $uid User id + * @param string $guid An existing GUID (Otherwise it will be generated) + * + * @return string + */ + public static function newURI($uid, $guid = "") + { + if ($guid == "") { + $guid = get_guid(32); + } + + $hostname = self::getApp()->get_hostname(); + + $user = dba::selectFirst('user', ['nickname'], ['uid' => $uid]); + + $uri = "urn:X-dfrn:" . $hostname . ':' . $user['nickname'] . ':' . $guid; + + return $uri; + } + /** * @brief Set "success_update" and "last-item" to the date of the last time we heard from this contact * @@ -1844,7 +1867,7 @@ class Item extends BaseObject if ($contact['network'] != NETWORK_FEED) { $datarray["guid"] = get_guid(32); unset($datarray["plink"]); - $datarray["uri"] = item_new_uri($a->get_hostname(), $contact['uid'], $datarray["guid"]); + $datarray["uri"] = self::newURI($contact['uid'], $datarray["guid"]); $datarray["parent-uri"] = $datarray["uri"]; $datarray["thr-parent"] = $datarray["uri"]; $datarray["extid"] = NETWORK_DFRN; @@ -2316,7 +2339,7 @@ EOT; $new_item = [ 'guid' => get_guid(32), - 'uri' => item_new_uri(self::getApp()->get_hostname(), $item['uid']), + 'uri' => self::newURI($item['uid']), 'uid' => $item['uid'], 'contact-id' => $item_contact_id, 'type' => 'activity', diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index 2bb8461340..20d1d74fea 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -1602,11 +1602,21 @@ class Diaspora */ private static function getUriFromGuid($author, $guid, $onlyfound = false) { - $r = q("SELECT `uri` FROM `item` WHERE `guid` = '%s' LIMIT 1", dbesc($guid)); - if (DBM::is_result($r)) { - return $r[0]["uri"]; + $item = dba::selectFirst('item', ['uri'], ['guid' => $guid]); + if (DBM::is_result($item)) { + return $item["uri"]; } elseif (!$onlyfound) { - return $author.":".$guid; + $contact = Contact::getDetailsByAddr($author, 0); + if (!empty($contact['network'])) { + $prefix = 'urn:X-' . $contact['network'] . ':'; + } else { + // This fallback should happen most unlikely + $prefix = 'urn:X-dspr:'; + } + + $author_parts = explode('@', $author); + + return $prefix . $author_parts[1] . ':' . $author_parts[0] . ':'. $guid; } return "";