From 706444bdb22b57f18c284044bdbdaeb7610990fe Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 4 Feb 2023 19:14:21 -0500 Subject: [PATCH] Decouple conversation creation from rendering - This allows to separately obtain a list of threads for rendering without having to deal with an already-formed HTML output --- mod/item.php | 4 +- mod/notes.php | 2 +- src/Content/Conversation.php | 519 ++++++++++++++------------ src/Model/Contact.php | 4 +- src/Module/Conversation/Community.php | 14 +- src/Module/Conversation/Network.php | 2 +- src/Module/Item/Display.php | 2 +- src/Module/Profile/Conversations.php | 2 +- src/Module/Search/Filed.php | 2 +- src/Module/Search/Index.php | 2 +- src/Module/Update/Community.php | 2 +- src/Module/Update/Network.php | 2 +- src/Module/Update/Profile.php | 2 +- src/Object/Thread.php | 4 +- 14 files changed, 294 insertions(+), 269 deletions(-) diff --git a/mod/item.php b/mod/item.php index 369b0888a2..cf23df8424 100644 --- a/mod/item.php +++ b/mod/item.php @@ -104,7 +104,7 @@ function item_edit(int $uid, array $request, bool $preview, string $return_path) } $post['edit'] = $post; - $post['file'] = Post\Category::getTextByURIId($post['uri-id'], $post['uid']); + $post['file'] = Post\Category::getTextByURIId($post['uri-id'], $post['uid']); Post\Media::deleteByURIId($post['uri-id'], [Post\Media::AUDIO, Post\Media::VIDEO, Post\Media::IMAGE, Post\Media::HTML]); $post = item_process($post, $request, $preview, $return_path); @@ -274,7 +274,7 @@ function item_process(array $post, array $request, bool $preview, string $return $post['body'] = BBCode::removeSharedData(Item::setHashtags($post['body'])); $post['writable'] = true; - $o = DI::conversation()->create([$post], Conversation::MODE_SEARCH, false, true); + $o = DI::conversation()->render([$post], Conversation::MODE_SEARCH, false, true); System::jsonExit(['preview' => $o]); } diff --git a/mod/notes.php b/mod/notes.php index 360441471f..554429d0ec 100644 --- a/mod/notes.php +++ b/mod/notes.php @@ -85,7 +85,7 @@ function notes_content(App $a, bool $update = false) $count = count($notes); - $o .= DI::conversation()->create($notes, Conversation::MODE_NOTES, $update); + $o .= DI::conversation()->render($notes, Conversation::MODE_NOTES, $update); } $o .= $pager->renderMinimal($count); diff --git a/src/Content/Conversation.php b/src/Content/Conversation.php index 93dad904a2..b645ecf4b2 100644 --- a/src/Content/Conversation.php +++ b/src/Content/Conversation.php @@ -438,17 +438,17 @@ class Conversation * The $mode parameter decides between the various renderings and also * figures out how to determine page owner and other contextual items * that are based on unique features of the calling module. - * @param array $items - * @param string $mode - * @param $update @TODO Which type? - * @param bool $preview - * @param string $order + * @param array $items An array of Posts + * @param string $mode One of self::MODE_* + * @param bool $update Asynchronous update rendering + * @param bool $preview Post preview (no actual database record) + * @param string $order Either "received" or "commented" * @param int $uid * @return string * @throws ImagickException * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public function create(array $items, string $mode, $update, bool $preview = false, string $order = 'commented', int $uid = 0): string + public function render(array $items, string $mode, bool $update = false, bool $preview = false, string $order = 'commented', int $uid = 0): string { $this->profiler->startRecording('rendering'); @@ -459,10 +459,6 @@ class Conversation $live_update_div = ''; - $blocklist = $this->getBlocklist(); - - $previewing = (($preview) ? ' preview ' : ''); - if ($mode === self::MODE_NETWORK) { $items = $this->addChildren($items, false, $order, $uid, $mode); if (!$update) { @@ -556,246 +552,14 @@ class Conversation $items = $cb['items']; - $conv_responses = [ - 'like' => [], - 'dislike' => [], - 'attendyes' => [], - 'attendno' => [], - 'attendmaybe' => [], - 'announce' => [], - ]; - - if ($this->pConfig->get($this->session->getLocalUserId(), 'system', 'hide_dislike')) { - unset($conv_responses['dislike']); - } - - // array with html for each thread (parent+comments) - $threads = []; - $threadsid = -1; - - $page_template = Renderer::getMarkupTemplate("conversation.tpl"); $formSecurityToken = BaseModule::getFormSecurityToken('contact_action'); - if (!empty($items)) { - if (in_array($mode, [self::MODE_COMMUNITY, self::MODE_CONTACTS, self::MODE_PROFILE])) { - $writable = true; - } else { - $writable = $items[0]['writable'] || ($items[0]['uid'] == 0) && in_array($items[0]['network'], Protocol::FEDERATED); - } + $threads = $this->getThreadList($items, $mode, $preview, $page_dropping, $formSecurityToken); - if (!$this->session->getLocalUserId()) { - $writable = false; - } - - if (in_array($mode, [self::MODE_FILED, self::MODE_SEARCH, self::MODE_CONTACT_POSTS])) { - - /* - * "New Item View" on network page or search page results - * - just loop through the items and format them minimally for display - */ - - $tpl = 'search_item.tpl'; - - $uriids = []; - - foreach ($items as $item) { - if (in_array($item['uri-id'], $uriids)) { - continue; - } - - $uriids[] = $item['uri-id']; - - if (!$this->item->isVisibleActivity($item)) { - continue; - } - - if (in_array($item['author-id'], $blocklist)) { - continue; - } - - $threadsid++; - - // prevent private email from leaking. - if ($item['network'] === Protocol::MAIL && $this->session->getLocalUserId() != $item['uid']) { - continue; - } - - $profile_name = $item['author-name']; - if (!empty($item['author-link']) && empty($item['author-name'])) { - $profile_name = $item['author-link']; - } - - $tags = Tag::populateFromItem($item); - - $author = [ - 'uid' => 0, - 'id' => $item['author-id'], - 'network' => $item['author-network'], - 'url' => $item['author-link'], - 'alias' => $item['author-alias'], - ]; - $profile_link = Contact::magicLinkByContact($author); - - $sparkle = ''; - if (strpos($profile_link, 'contact/redir/') === 0) { - $sparkle = ' sparkle'; - } - - $locate = ['location' => $item['location'], 'coord' => $item['coord'], 'html' => '']; - Hook::callAll('render_location', $locate); - $location_html = $locate['html'] ?: Strings::escapeHtml($locate['location'] ?: $locate['coord'] ?: ''); - - $this->item->localize($item); - if ($mode === self::MODE_FILED) { - $dropping = true; - } else { - $dropping = false; - } - - $drop = [ - 'dropping' => $dropping, - 'pagedrop' => $page_dropping, - 'select' => $this->l10n->t('Select'), - 'delete' => $this->l10n->t('Delete'), - ]; - - $likebuttons = [ - 'like' => null, - 'dislike' => null, - 'share' => null, - 'announce' => null, - ]; - - if ($this->pConfig->get($this->session->getLocalUserId(), 'system', 'hide_dislike')) { - unset($likebuttons['dislike']); - } - - $body_html = ItemModel::prepareBody($item, true, $preview); - - [$categories, $folders] = $this->item->determineCategoriesTerms($item, $this->session->getLocalUserId()); - - if (!empty($item['title'])) { - $title = $item['title']; - } elseif (!empty($item['content-warning']) && $this->pConfig->get($this->session->getLocalUserId(), 'system', 'disable_cw', false)) { - $title = ucfirst($item['content-warning']); - } else { - $title = ''; - } - - if (!empty($item['featured'])) { - $pinned = $this->l10n->t('Pinned item'); - } else { - $pinned = ''; - } - - $tmp_item = [ - 'template' => $tpl, - 'id' => ($preview ? 'P0' : $item['id']), - 'guid' => ($preview ? 'Q0' : $item['guid']), - 'commented' => $item['commented'], - 'received' => $item['received'], - 'created_date' => $item['created'], - 'uriid' => $item['uri-id'], - 'network' => $item['network'], - 'network_name' => ContactSelector::networkToName($item['author-network'], $item['author-link'], $item['network'], $item['author-gsid']), - 'network_icon' => ContactSelector::networkToIcon($item['network'], $item['author-link'], $item['author-gsid']), - 'linktitle' => $this->l10n->t('View %s\'s profile @ %s', $profile_name, $item['author-link']), - 'profile_url' => $profile_link, - 'item_photo_menu_html' => $this->item->photoMenu($item, $formSecurityToken), - 'name' => $profile_name, - 'sparkle' => $sparkle, - 'lock' => false, - 'thumb' => $this->baseURL->remove($this->item->getAuthorAvatar($item)), - 'title' => $title, - 'body_html' => $body_html, - 'tags' => $tags['tags'], - 'hashtags' => $tags['hashtags'], - 'mentions' => $tags['mentions'], - 'implicit_mentions' => $tags['implicit_mentions'], - 'txt_cats' => $this->l10n->t('Categories:'), - 'txt_folders' => $this->l10n->t('Filed under:'), - 'has_cats' => ((count($categories)) ? 'true' : ''), - 'has_folders' => ((count($folders)) ? 'true' : ''), - 'categories' => $categories, - 'folders' => $folders, - 'text' => strip_tags($body_html), - 'localtime' => DateTimeFormat::local($item['created'], 'r'), - 'utc' => DateTimeFormat::utc($item['created'], 'c'), - 'ago' => (($item['app']) ? $this->l10n->t('%s from %s', Temporal::getRelativeDate($item['created']), $item['app']) : Temporal::getRelativeDate($item['created'])), - 'location_html' => $location_html, - 'indent' => '', - 'owner_name' => '', - 'owner_url' => '', - 'owner_photo' => $this->baseURL->remove($this->item->getOwnerAvatar($item)), - 'plink' => ItemModel::getPlink($item), - 'edpost' => false, - 'pinned' => $pinned, - 'isstarred' => 'unstarred', - 'star' => false, - 'drop' => $drop, - 'vote' => $likebuttons, - 'like_html' => '', - 'dislike_html ' => '', - 'comment_html' => '', - 'conv' => ($preview ? '' : ['href' => 'display/' . $item['guid'], 'title' => $this->l10n->t('View in context')]), - 'previewing' => $previewing, - 'wait' => $this->l10n->t('Please wait'), - 'thread_level' => 1, - ]; - - $arr = ['item' => $item, 'output' => $tmp_item]; - Hook::callAll('display_item', $arr); - - $threads[$threadsid]['id'] = $item['id']; - $threads[$threadsid]['network'] = $item['network']; - $threads[$threadsid]['items'] = [$arr['output']]; - } - } else { - // Normal View - $page_template = Renderer::getMarkupTemplate("threaded_conversation.tpl"); - - $conv = new Thread($mode, $preview, $writable); - - /* - * get all the topmost parents - * this shouldn't be needed, as we should have only them in our array - * But for now, this array respects the old style, just in case - */ - foreach ($items as $item) { - if (in_array($item['author-id'], $blocklist)) { - continue; - } - - // Can we put this after the visibility check? - $this->builtinActivityPuller($item, $conv_responses); - - // Only add what is visible - if ($item['network'] === Protocol::MAIL && $this->session->getLocalUserId() != $item['uid']) { - continue; - } - - if (!$this->item->isVisibleActivity($item)) { - continue; - } - - /// @todo Check if this call is needed or not - $arr = ['item' => $item]; - Hook::callAll('display_item', $arr); - - $item['pagedrop'] = $page_dropping; - - if ($item['gravity'] == ItemModel::GRAVITY_PARENT) { - $item_object = new PostObject($item); - $conv->addParent($item_object); - } - } - - $threads = $conv->getTemplateData($conv_responses, $formSecurityToken); - if (!$threads) { - $this->logger->info('[ERROR] conversation : Failed to get template data.'); - $threads = []; - } - } + if (in_array($mode, [self::MODE_FILED, self::MODE_SEARCH, self::MODE_CONTACT_POSTS])) { + $page_template = Renderer::getMarkupTemplate('conversation.tpl'); + } else { + $page_template = Renderer::getMarkupTemplate('threaded_conversation.tpl'); } $o = Renderer::replaceMacros($page_template, [ @@ -813,6 +577,91 @@ class Conversation return $o; } + /** + * @param array $items + * @param string $mode One of self::MODE_* + * @param bool $preview + * @param bool $pagedrop Whether to enable the user to select the thread for deletion + * @param string $formSecurityToken A 'contact_action' form security token + * @return array + * @throws InternalServerErrorException + * @throws \ImagickException + */ + public function getThreadList(array $items, string $mode, bool $preview, bool $pagedrop, string $formSecurityToken): array + { + if (in_array($mode, [self::MODE_FILED, self::MODE_SEARCH, self::MODE_CONTACT_POSTS])) { + $threads = $this->getContextLessThreadList($items, $mode, $preview, $pagedrop, $formSecurityToken); + } else { + $conv_responses = [ + 'like' => [], + 'dislike' => [], + 'attendyes' => [], + 'attendno' => [], + 'attendmaybe' => [], + 'announce' => [], + ]; + + if ($this->pConfig->get($this->session->getLocalUserId(), 'system', 'hide_dislike')) { + unset($conv_responses['dislike']); + } + + if (in_array($mode, [self::MODE_COMMUNITY, self::MODE_CONTACTS, self::MODE_PROFILE])) { + $writable = true; + } else { + $writable = $items[0]['writable'] || ($items[0]['uid'] == 0) && in_array($items[0]['network'], Protocol::FEDERATED); + } + + if (!$this->session->getLocalUserId()) { + $writable = false; + } + + // Normal View + $conv = new Thread($mode, $preview, $writable); + + /* + * get all the topmost parents + * this shouldn't be needed, as we should have only them in our array + * But for now, this array respects the old style, just in case + */ + foreach ($items as $item) { + if (in_array($item['author-id'], $this->getBlocklist())) { + continue; + } + + // Can we put this after the visibility check? + $this->builtinActivityPuller($item, $conv_responses); + + // Only add what is visible + if ($item['network'] === Protocol::MAIL && $this->session->getLocalUserId() != $item['uid']) { + continue; + } + + if (!$this->item->isVisibleActivity($item)) { + continue; + } + + /// @todo Check if this call is needed or not + $arr = ['item' => $item]; + Hook::callAll('display_item', $arr); + + $item['pagedrop'] = $pagedrop; + + if ($item['gravity'] == ItemModel::GRAVITY_PARENT) { + $item_object = new PostObject($item); + $conv->addParent($item_object); + } + } + + $threads = $conv->getTemplateData($conv_responses, $formSecurityToken); + if (!$threads) { + $this->logger->info('[ERROR] conversation : Failed to get template data.'); + $threads = []; + } + } + + return $threads; + } + private function getBlocklist(): array { if (!$this->session->getLocalUserId()) { @@ -1494,4 +1343,180 @@ class Conversation { return strcmp($b['created'], $a['created']); } + + /** + * "New Item View" on network page or search page results + * - just loop through the items and format them minimally for display + * + * @param array $items + * @param string $mode One of self::MODE_* + * @param bool $preview Whether the display is a preview + * @param bool $pagedrop Whether the user can select the threads for deletion + * @param string $formSecurityToken A 'contact_action' form security token + * @return array + * @throws InternalServerErrorException + * @throws \ImagickException + */ + public function getContextLessThreadList(array $items, string $mode, bool $preview, bool $pagedrop, string $formSecurityToken): array + { + $threads = []; + $uriids = []; + + foreach ($items as $item) { + if (in_array($item['uri-id'], $uriids)) { + continue; + } + + $uriids[] = $item['uri-id']; + + if (!$this->item->isVisibleActivity($item)) { + continue; + } + + if (in_array($item['author-id'], $this->getBlocklist())) { + continue; + } + + $threadsid++; + + // prevent private email from leaking. + if ($item['network'] === Protocol::MAIL && $this->session->getLocalUserId() != $item['uid']) { + continue; + } + + $profile_name = $item['author-name']; + if (!empty($item['author-link']) && empty($item['author-name'])) { + $profile_name = $item['author-link']; + } + + $tags = Tag::populateFromItem($item); + + $author = [ + 'uid' => 0, + 'id' => $item['author-id'], + 'network' => $item['author-network'], + 'url' => $item['author-link'], + 'alias' => $item['author-alias'], + ]; + $profile_link = Contact::magicLinkByContact($author); + + $sparkle = ''; + if (strpos($profile_link, 'contact/redir/') === 0) { + $sparkle = ' sparkle'; + } + + $locate = ['location' => $item['location'], 'coord' => $item['coord'], 'html' => '']; + Hook::callAll('render_location', $locate); + $location_html = $locate['html'] ?: Strings::escapeHtml($locate['location'] ?: $locate['coord'] ?: ''); + + $this->item->localize($item); + if ($mode === self::MODE_FILED) { + $dropping = true; + } else { + $dropping = false; + } + + $drop = [ + 'dropping' => $dropping, + 'pagedrop' => $pagedrop, + 'select' => $this->l10n->t('Select'), + 'delete' => $this->l10n->t('Delete'), + ]; + + $likebuttons = [ + 'like' => null, + 'dislike' => null, + 'share' => null, + 'announce' => null, + ]; + + if ($this->pConfig->get($this->session->getLocalUserId(), 'system', 'hide_dislike')) { + unset($likebuttons['dislike']); + } + + $body_html = ItemModel::prepareBody($item, true, $preview); + + [$categories, $folders] = $this->item->determineCategoriesTerms($item, $this->session->getLocalUserId()); + + if (!empty($item['title'])) { + $title = $item['title']; + } elseif (!empty($item['content-warning']) && $this->pConfig->get($this->session->getLocalUserId(), 'system', 'disable_cw', false)) { + $title = ucfirst($item['content-warning']); + } else { + $title = ''; + } + + if (!empty($item['featured'])) { + $pinned = $this->l10n->t('Pinned item'); + } else { + $pinned = ''; + } + + $tmp_item = [ + 'template' => 'search_item.tpl', + 'id' => ($preview ? 'P0' : $item['id']), + 'guid' => ($preview ? 'Q0' : $item['guid']), + 'commented' => $item['commented'], + 'received' => $item['received'], + 'created_date' => $item['created'], + 'uriid' => $item['uri-id'], + 'network' => $item['network'], + 'network_name' => ContactSelector::networkToName($item['author-network'], $item['author-link'], $item['network'], $item['author-gsid']), + 'network_icon' => ContactSelector::networkToIcon($item['network'], $item['author-link'], $item['author-gsid']), + 'linktitle' => $this->l10n->t('View %s\'s profile @ %s', $profile_name, $item['author-link']), + 'profile_url' => $profile_link, + 'item_photo_menu_html' => $this->item->photoMenu($item, $formSecurityToken), + 'name' => $profile_name, + 'sparkle' => $sparkle, + 'lock' => false, + 'thumb' => $this->baseURL->remove($this->item->getAuthorAvatar($item)), + 'title' => $title, + 'body_html' => $body_html, + 'tags' => $tags['tags'], + 'hashtags' => $tags['hashtags'], + 'mentions' => $tags['mentions'], + 'implicit_mentions' => $tags['implicit_mentions'], + 'txt_cats' => $this->l10n->t('Categories:'), + 'txt_folders' => $this->l10n->t('Filed under:'), + 'has_cats' => ((count($categories)) ? 'true' : ''), + 'has_folders' => ((count($folders)) ? 'true' : ''), + 'categories' => $categories, + 'folders' => $folders, + 'text' => strip_tags($body_html), + 'localtime' => DateTimeFormat::local($item['created'], 'r'), + 'utc' => DateTimeFormat::utc($item['created'], 'c'), + 'ago' => (($item['app']) ? $this->l10n->t('%s from %s', Temporal::getRelativeDate($item['created']), $item['app']) : Temporal::getRelativeDate($item['created'])), + 'location_html' => $location_html, + 'indent' => '', + 'owner_name' => '', + 'owner_url' => '', + 'owner_photo' => $this->baseURL->remove($this->item->getOwnerAvatar($item)), + 'plink' => ItemModel::getPlink($item), + 'edpost' => false, + 'pinned' => $pinned, + 'isstarred' => 'unstarred', + 'star' => false, + 'drop' => $drop, + 'vote' => $likebuttons, + 'like_html' => '', + 'dislike_html ' => '', + 'comment_html' => '', + 'conv' => $preview ? '' : ['href' => 'display/' . $item['guid'], 'title' => $this->l10n->t('View in context')], + 'previewing' => $preview ? ' preview ' : '', + 'wait' => $this->l10n->t('Please wait'), + 'thread_level' => 1, + ]; + + $arr = ['item' => $item, 'output' => $tmp_item]; + Hook::callAll('display_item', $arr); + + $threads[] = [ + 'id' => $item['id'], + 'network' => $item['network'], + 'items' => [$arr['output']], + ]; + } + + return $threads; + } } diff --git a/src/Model/Contact.php b/src/Model/Contact.php index d519fe97a0..3ca84515a9 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -1626,7 +1626,7 @@ class Contact } } - $o .= DI::conversation()->create($items, ConversationContent::MODE_CONTACTS, $update, false, 'pinned_commented', DI::userSession()->getLocalUserId()); + $o .= DI::conversation()->render($items, ConversationContent::MODE_CONTACTS, $update, false, 'pinned_commented', DI::userSession()->getLocalUserId()); } else { $fields = array_merge(Item::DISPLAY_FIELDLIST, ['featured']); $items = Post::toArray(Post::selectForUser(DI::userSession()->getLocalUserId(), $fields, $condition, $params)); @@ -1643,7 +1643,7 @@ class Contact } } - $o .= DI::conversation()->create($items, ConversationContent::MODE_CONTACT_POSTS, $update); + $o .= DI::conversation()->render($items, ConversationContent::MODE_CONTACT_POSTS, $update); } if (!$update) { diff --git a/src/Module/Conversation/Community.php b/src/Module/Conversation/Community.php index ae6297e484..7525ba1c16 100644 --- a/src/Module/Conversation/Community.php +++ b/src/Module/Conversation/Community.php @@ -92,7 +92,7 @@ class Community extends BaseModule 'accesskey' => 'l' ]; } - + if (DI::userSession()->isAuthenticated() || in_array(self::$page_style, [self::LOCAL_AND_GLOBAL, self::GLOBAL])) { $tabs[] = [ 'label' => DI::l10n()->t('Global Community'), @@ -110,14 +110,14 @@ class Community extends BaseModule Nav::setSelected('community'); DI::page()['aside'] .= Widget::accountTypes('community/' . self::$content, self::$accountTypeString); - + if (DI::userSession()->getLocalUserId() && DI::config()->get('system', 'community_no_sharer')) { $path = self::$content; if (!empty($this->parameters['accounttype'])) { $path .= '/' . $this->parameters['accounttype']; } $query_parameters = []; - + if (!empty($_GET['min_id'])) { $query_parameters['min_id'] = $_GET['min_id']; } @@ -127,7 +127,7 @@ class Community extends BaseModule if (!empty($_GET['last_commented'])) { $query_parameters['max_id'] = $_GET['last_commented']; } - + $path_all = $path . (!empty($query_parameters) ? '?' . http_build_query($query_parameters) : ''); $path_no_sharer = $path . '?' . http_build_query(array_merge($query_parameters, ['no_sharer' => true])); DI::page()['aside'] .= Renderer::replaceMacros(Renderer::getMarkupTemplate('widget/community_sharer.tpl'), [ @@ -139,7 +139,7 @@ class Community extends BaseModule '$no_sharer_label' => DI::l10n()->t('Hide'), ]); } - + if (Feature::isEnabled(DI::userSession()->getLocalUserId(), 'trending_tags')) { DI::page()['aside'] .= TrendingTags::getHTML(self::$content); } @@ -157,7 +157,7 @@ class Community extends BaseModule return $o; } - $o .= DI::conversation()->create($items, Conversation::MODE_COMMUNITY, false, false, 'commented', DI::userSession()->getLocalUserId()); + $o .= DI::conversation()->render($items, Conversation::MODE_COMMUNITY, false, false, 'commented', DI::userSession()->getLocalUserId()); $pager = new BoundariesPager( DI::l10n(), @@ -339,7 +339,7 @@ class Community extends BaseModule $condition[0] .= " AND NOT `uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `post-user`.`uid` = ? AND `post-user`.`uri-id` = `post-thread-user-view`.`uri-id`)"; $condition[] = DI::userSession()->getLocalUserId(); } - + if (isset($max_id)) { $condition[0] .= " AND `commented` < ?"; $condition[] = $max_id; diff --git a/src/Module/Conversation/Network.php b/src/Module/Conversation/Network.php index f1f8a6860d..ed53f7d233 100644 --- a/src/Module/Conversation/Network.php +++ b/src/Module/Conversation/Network.php @@ -201,7 +201,7 @@ class Network extends BaseModule $ordering = '`commented`'; } - $o .= DI::conversation()->create($items, Conversation::MODE_NETWORK, false, false, $ordering, DI::userSession()->getLocalUserId()); + $o .= DI::conversation()->render($items, Conversation::MODE_NETWORK, false, false, $ordering, DI::userSession()->getLocalUserId()); if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'infinite_scroll')) { $o .= HTML::scrollLoader(); diff --git a/src/Module/Item/Display.php b/src/Module/Item/Display.php index a0d1ecbf56..f8e2d337bb 100644 --- a/src/Module/Item/Display.php +++ b/src/Module/Item/Display.php @@ -275,7 +275,7 @@ class Display extends BaseModule $output .= $this->conversation->statusEditor([], 0, true); } - $output .= $this->conversation->create([$item], Conversation::MODE_DISPLAY, $updateUid, false, 'commented', $itemUid); + $output .= $this->conversation->render([$item], Conversation::MODE_DISPLAY, $updateUid, false, 'commented', $itemUid); return $output; } diff --git a/src/Module/Profile/Conversations.php b/src/Module/Profile/Conversations.php index 9d5fea0a6e..b53c2d1ab8 100644 --- a/src/Module/Profile/Conversations.php +++ b/src/Module/Profile/Conversations.php @@ -240,7 +240,7 @@ class Conversations extends BaseProfile $items = array_merge($items, $pinned); } - $o .= $this->conversation->create($items, Conversation::MODE_PROFILE, false, false, 'pinned_received', $profile['uid']); + $o .= $this->conversation->render($items, Conversation::MODE_PROFILE, false, false, 'pinned_received', $profile['uid']); $o .= $pager->renderMinimal(count($items)); diff --git a/src/Module/Search/Filed.php b/src/Module/Search/Filed.php index 4661a58664..5f519b60c2 100644 --- a/src/Module/Search/Filed.php +++ b/src/Module/Search/Filed.php @@ -99,7 +99,7 @@ class Filed extends BaseSearch $items = Post::toArray(Post::selectForUser(DI::userSession()->getLocalUserId(), Item::DISPLAY_FIELDLIST, $item_condition, $item_params)); - $o .= DI::conversation()->create($items, Conversation::MODE_FILED, false, false, '', DI::userSession()->getLocalUserId()); + $o .= DI::conversation()->render($items, Conversation::MODE_FILED, false, false, '', DI::userSession()->getLocalUserId()); if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'infinite_scroll')) { $o .= HTML::scrollLoader(); diff --git a/src/Module/Search/Index.php b/src/Module/Search/Index.php index b08857a739..9ec8c9dd6d 100644 --- a/src/Module/Search/Index.php +++ b/src/Module/Search/Index.php @@ -213,7 +213,7 @@ class Index extends BaseSearch Logger::info('Start Conversation.', ['q' => $search]); - $o .= DI::conversation()->create($items, Conversation::MODE_SEARCH, false, false, 'commented', DI::userSession()->getLocalUserId()); + $o .= DI::conversation()->render($items, Conversation::MODE_SEARCH, false, false, 'commented', DI::userSession()->getLocalUserId()); if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'infinite_scroll')) { $o .= HTML::scrollLoader(); diff --git a/src/Module/Update/Community.php b/src/Module/Update/Community.php index 1ac241e55a..7edb2949bb 100644 --- a/src/Module/Update/Community.php +++ b/src/Module/Update/Community.php @@ -40,7 +40,7 @@ class Community extends CommunityModule $o = ''; if (!empty($request['force'])) { - $o = DI::conversation()->create(self::getItems(), Conversation::MODE_COMMUNITY, true, false, 'commented', DI::userSession()->getLocalUserId()); + $o = DI::conversation()->render(self::getItems(), Conversation::MODE_COMMUNITY, true, false, 'commented', DI::userSession()->getLocalUserId()); } System::htmlUpdateExit($o); diff --git a/src/Module/Update/Network.php b/src/Module/Update/Network.php index 052ae040f0..7c9a07f362 100644 --- a/src/Module/Update/Network.php +++ b/src/Module/Update/Network.php @@ -79,7 +79,7 @@ class Network extends NetworkModule $ordering = '`commented`'; } - $o = DI::conversation()->create($items, Conversation::MODE_NETWORK, $profile_uid, false, $ordering, DI::userSession()->getLocalUserId()); + $o = DI::conversation()->render($items, Conversation::MODE_NETWORK, $profile_uid, false, $ordering, DI::userSession()->getLocalUserId()); System::htmlUpdateExit($o); } diff --git a/src/Module/Update/Profile.php b/src/Module/Update/Profile.php index bdbe573204..4712cc3f5b 100644 --- a/src/Module/Update/Profile.php +++ b/src/Module/Update/Profile.php @@ -116,7 +116,7 @@ class Profile extends BaseModule } } - $o .= DI::conversation()->create($items, Conversation::MODE_PROFILE, $a->getProfileOwner(), false, 'received', $a->getProfileOwner()); + $o .= DI::conversation()->render($items, Conversation::MODE_PROFILE, $a->getProfileOwner(), false, 'received', $a->getProfileOwner()); System::htmlUpdateExit($o); } diff --git a/src/Object/Thread.php b/src/Object/Thread.php index 84245ab6a7..adc822b6ad 100644 --- a/src/Object/Thread.php +++ b/src/Object/Thread.php @@ -190,13 +190,13 @@ class Thread * We should find a way to avoid using those arguments (at least most of them) * * @param array $conv_responses data - * @param string $formSecurityToken A security Token to avoid CSF attacks + * @param string $formSecurityToken A 'contact_action' form security token * * @return mixed The data requested on success * false on failure * @throws \Exception */ - public function getTemplateData($conv_responses, string $formSecurityToken) + public function getTemplateData(array $conv_responses, string $formSecurityToken) { $result = [];