X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FContent%2FConversation.php;h=8fb078fce355eba6321f41cd1d1a91db7baef5e4;hb=4208535c16f0e8196effe230cc34141551a7be18;hp=1dca3216439b4930e07690d21061c2c4956188ff;hpb=26fa5e8b3fd91a6cc8cebfd895d0080660aa28f5;p=friendica.git diff --git a/src/Content/Conversation.php b/src/Content/Conversation.php index 1dca321643..8fb078fce3 100644 --- a/src/Content/Conversation.php +++ b/src/Content/Conversation.php @@ -25,14 +25,11 @@ use Friendica\App; use Friendica\App\Arguments; use Friendica\App\BaseURL; use Friendica\BaseModule; -use Friendica\Content\ContactSelector; -use Friendica\Content\Feature; -use Friendica\Content\Item; use Friendica\Core\ACL; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Hook; use Friendica\Core\L10n; -use Friendica\Core\PConfig\IPConfig; +use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; use Friendica\Core\Protocol; use Friendica\Core\Renderer; use Friendica\Core\Session; @@ -69,11 +66,11 @@ class Conversation private $item; /** @var App\Arguments */ private $args; - /** @var IPConfig */ + /** @var IManagePersonalConfigValues */ private $pConfig; /** @var BaseURL */ private $baseURL; - /** @var IConfig */ + /** @var IManageConfigValues */ private $config; /** @var App */ private $app; @@ -82,7 +79,7 @@ class Conversation /** @var App\Mode */ private $mode; - public function __construct(LoggerInterface $logger, Profiler $profiler, Activity $activity, L10n $l10n, Item $item, Arguments $args, BaseURL $baseURL, IConfig $config, IPConfig $pConfig, App\Page $page, App\Mode $mode, App $app) + public function __construct(LoggerInterface $logger, Profiler $profiler, Activity $activity, L10n $l10n, Item $item, Arguments $args, BaseURL $baseURL, IManageConfigValues $config, IManagePersonalConfigValues $pConfig, App\Page $page, App\Mode $mode, App $app) { $this->activity = $activity; $this->item = $item; @@ -139,10 +136,10 @@ class Conversation if (!empty($activity['verb']) && $this->activity->match($activity['verb'], $verb) && ($activity['gravity'] != GRAVITY_PARENT)) { $author = [ - 'uid' => 0, - 'id' => $activity['author-id'], + 'uid' => 0, + 'id' => $activity['author-id'], 'network' => $activity['author-network'], - 'url' => $activity['author-link'] + 'url' => $activity['author-link'] ]; $url = Contact::magicLinkByContact($author); if (strpos($url, 'redir/') === 0) { @@ -164,7 +161,7 @@ class Conversation if (!isset($conv_responses[$mode][$activity['thr-parent-id']])) { $conv_responses[$mode][$activity['thr-parent-id']] = [ 'links' => [], - 'self' => 0, + 'self' => 0, ]; } elseif (in_array($link, $conv_responses[$mode][$activity['thr-parent-id']]['links'])) { // only list each unique author once @@ -192,11 +189,12 @@ class Conversation * @return string formatted text * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public function formatActivity(array $links, $verb, $id) { + public function formatActivity(array $links, $verb, $id) + { $this->profiler->startRecording('rendering'); - $o = ''; + $o = ''; $expanded = ''; - $phrase = ''; + $phrase = ''; $total = count($links); if ($total == 1) { @@ -205,32 +203,32 @@ class Conversation // Phrase if there is only one liker. In other cases it will be uses for the expanded // list which show all likers switch ($verb) { - case 'like' : + case 'like': $phrase = $this->l10n->t('%s likes this.', $likers); break; - case 'dislike' : + case 'dislike': $phrase = $this->l10n->t('%s doesn\'t like this.', $likers); break; - case 'attendyes' : + case 'attendyes': $phrase = $this->l10n->t('%s attends.', $likers); break; - case 'attendno' : + case 'attendno': $phrase = $this->l10n->t('%s doesn\'t attend.', $likers); break; - case 'attendmaybe' : + case 'attendmaybe': $phrase = $this->l10n->t('%s attends maybe.', $likers); break; - case 'announce' : + case 'announce': $phrase = $this->l10n->t('%s reshared this.', $likers); break; } } elseif ($total > 1) { - if ($total < MAX_LIKERS) { + if ($total < $this->config->get('system', 'max_likers')) { $likers = implode(', ', array_slice($links, 0, -1)); - $likers .= ' ' . $this->l10n->t('and') . ' ' . $links[count($links)-1]; - } else { - $likers = implode(', ', array_slice($links, 0, MAX_LIKERS - 1)); - $likers .= ' ' . $this->l10n->t('and %d other people', $total - MAX_LIKERS); + $likers .= ' ' . $this->l10n->t('and') . ' ' . $links[count($links) - 1]; + } else { + $likers = implode(', ', array_slice($links, 0, $this->config->get('system', 'max_likers') - 1)); + $likers .= ' ' . $this->l10n->t('and %d other people', $total - $this->config->get('system', 'max_likers')); } $spanatts = "class=\"fakelink\" onclick=\"openClose('{$verb}list-$id');\""; @@ -238,27 +236,27 @@ class Conversation $explikers = ''; switch ($verb) { case 'like': - $phrase = $this->l10n->t('%2$d people like this', $spanatts, $total); + $phrase = $this->l10n->t('%2$d people like this', $spanatts, $total); $explikers = $this->l10n->t('%s like this.', $likers); break; case 'dislike': - $phrase = $this->l10n->t('%2$d people don\'t like this', $spanatts, $total); + $phrase = $this->l10n->t('%2$d people don\'t like this', $spanatts, $total); $explikers = $this->l10n->t('%s don\'t like this.', $likers); break; case 'attendyes': - $phrase = $this->l10n->t('%2$d people attend', $spanatts, $total); + $phrase = $this->l10n->t('%2$d people attend', $spanatts, $total); $explikers = $this->l10n->t('%s attend.', $likers); break; case 'attendno': - $phrase = $this->l10n->t('%2$d people don\'t attend', $spanatts, $total); + $phrase = $this->l10n->t('%2$d people don\'t attend', $spanatts, $total); $explikers = $this->l10n->t('%s don\'t attend.', $likers); break; case 'attendmaybe': - $phrase = $this->l10n->t('%2$d people attend maybe', $spanatts, $total); + $phrase = $this->l10n->t('%2$d people attend maybe', $spanatts, $total); $explikers = $this->l10n->t('%s attend maybe.', $likers); break; case 'announce': - $phrase = $this->l10n->t('%2$d people reshared this', $spanatts, $total); + $phrase = $this->l10n->t('%2$d people reshared this', $spanatts, $total); $explikers = $this->l10n->t('%s reshared this.', $likers); break; } @@ -268,8 +266,8 @@ class Conversation $o .= Renderer::replaceMacros(Renderer::getMarkupTemplate('voting_fakelink.tpl'), [ '$phrase' => $phrase, - '$type' => $verb, - '$id' => $id + '$type' => $verb, + '$id' => $id ]); $o .= $expanded; @@ -321,33 +319,33 @@ class Conversation $tpl = Renderer::getMarkupTemplate("jot.tpl"); $o .= Renderer::replaceMacros($tpl, [ - '$new_post' => $this->l10n->t('New Post'), - '$return_path' => $this->args->getQueryString(), - '$action' => 'item', - '$share' => ($x['button'] ?? '') ?: $this->l10n->t('Share'), - '$loading' => $this->l10n->t('Loading...'), - '$upload' => $this->l10n->t('Upload photo'), - '$shortupload' => $this->l10n->t('upload photo'), - '$attach' => $this->l10n->t('Attach file'), - '$shortattach' => $this->l10n->t('attach file'), - '$edbold' => $this->l10n->t('Bold'), - '$editalic' => $this->l10n->t('Italic'), - '$eduline' => $this->l10n->t('Underline'), - '$edquote' => $this->l10n->t('Quote'), - '$edcode' => $this->l10n->t('Code'), - '$edimg' => $this->l10n->t('Image'), - '$edurl' => $this->l10n->t('Link'), - '$edattach' => $this->l10n->t('Link or Media'), - '$edvideo' => $this->l10n->t('Video'), - '$setloc' => $this->l10n->t('Set your location'), - '$shortsetloc' => $this->l10n->t('set location'), - '$noloc' => $this->l10n->t('Clear browser location'), - '$shortnoloc' => $this->l10n->t('clear location'), - '$title' => $x['title'] ?? '', - '$placeholdertitle' => $this->l10n->t('Set title'), - '$category' => $x['category'] ?? '', + '$new_post' => $this->l10n->t('New Post'), + '$return_path' => $this->args->getQueryString(), + '$action' => 'item', + '$share' => ($x['button'] ?? '') ?: $this->l10n->t('Share'), + '$loading' => $this->l10n->t('Loading...'), + '$upload' => $this->l10n->t('Upload photo'), + '$shortupload' => $this->l10n->t('upload photo'), + '$attach' => $this->l10n->t('Attach file'), + '$shortattach' => $this->l10n->t('attach file'), + '$edbold' => $this->l10n->t('Bold'), + '$editalic' => $this->l10n->t('Italic'), + '$eduline' => $this->l10n->t('Underline'), + '$edquote' => $this->l10n->t('Quote'), + '$edcode' => $this->l10n->t('Code'), + '$edimg' => $this->l10n->t('Image'), + '$edurl' => $this->l10n->t('Link'), + '$edattach' => $this->l10n->t('Link or Media'), + '$edvideo' => $this->l10n->t('Video'), + '$setloc' => $this->l10n->t('Set your location'), + '$shortsetloc' => $this->l10n->t('set location'), + '$noloc' => $this->l10n->t('Clear browser location'), + '$shortnoloc' => $this->l10n->t('clear location'), + '$title' => $x['title'] ?? '', + '$placeholdertitle' => $this->l10n->t('Set title'), + '$category' => $x['category'] ?? '', '$placeholdercategory' => Feature::isEnabled(local_user(), 'categories') ? $this->l10n->t("Categories \x28comma-separated list\x29") : '', - '$scheduled_at' => Temporal::getDateTimeField( + '$scheduled_at' => Temporal::getDateTimeField( new \DateTime(), new \DateTime('now + 6 months'), null, @@ -376,7 +374,7 @@ class Conversation '$rand_num' => Crypto::randomDigits(12), // ACL permissions box - '$acl' => $x['acl'], + '$acl' => $x['acl'], //jot nav tab (used in some themes) '$message' => $this->l10n->t('Message'), @@ -535,10 +533,10 @@ class Conversation } // array with html for each thread (parent+comments) - $threads = []; + $threads = []; $threadsid = -1; - $page_template = Renderer::getMarkupTemplate("conversation.tpl"); + $page_template = Renderer::getMarkupTemplate("conversation.tpl"); $formSecurityToken = BaseModule::getFormSecurityToken('contact_action'); if (!empty($items)) { @@ -592,8 +590,7 @@ class Conversation $tags = Tag::populateFromItem($item); - $author = ['uid' => 0, 'id' => $item['author-id'], - 'network' => $item['author-network'], 'url' => $item['author-link']]; + $author = ['uid' => 0, 'id' => $item['author-id'], 'network' => $item['author-network'], 'url' => $item['author-link']]; $profile_link = Contact::magicLinkByContact($author); $sparkle = ''; @@ -615,8 +612,8 @@ class Conversation $drop = [ 'dropping' => $dropping, 'pagedrop' => $page_dropping, - 'select' => $this->l10n->t('Select'), - 'delete' => $this->l10n->t('Delete'), + 'select' => $this->l10n->t('Select'), + 'delete' => $this->l10n->t('Delete'), ]; $likebuttons = [ @@ -632,7 +629,7 @@ class Conversation $body_html = ItemModel::prepareBody($item, true, $preview); - list($categories, $folders) = $this->item->determineCategoriesTerms($item, local_user()); + [$categories, $folders] = $this->item->determineCategoriesTerms($item, local_user()); if (!empty($item['content-warning']) && $this->pConfig->get(local_user(), 'system', 'disable_cw', false)) { $title = ucfirst($item['content-warning']); @@ -641,65 +638,65 @@ class Conversation } $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']), - 'network_icon' => ContactSelector::networkToIcon($item['network'], $item['author-link']), - 'linktitle' => $this->l10n->t('View %s\'s profile @ %s', $profile_name, $item['author-link']), - 'profile_url' => $profile_link, + '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']), + 'network_icon' => ContactSelector::networkToIcon($item['network'], $item['author-link']), + '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(Contact::getAvatarUrlForUrl($item['author-link'], $item['uid'], Proxy::SIZE_THUMB)), - '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'), - '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(Contact::getAvatarUrlForUrl($item['owner-link'], $item['uid'], Proxy::SIZE_THUMB)), - 'plink' => ItemModel::getPlink($item), - 'edpost' => false, - '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, + 'name' => $profile_name, + 'sparkle' => $sparkle, + 'lock' => false, + 'thumb' => $this->baseURL->remove(Contact::getAvatarUrlForUrl($item['author-link'], $item['uid'], Proxy::SIZE_THUMB)), + '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(Contact::getAvatarUrlForUrl($item['owner-link'], $item['uid'], Proxy::SIZE_THUMB)), + 'plink' => ItemModel::getPlink($item), + 'edpost' => false, + '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]['id'] = $item['id']; $threads[$threadsid]['network'] = $item['network']; - $threads[$threadsid]['items'] = [$arr['output']]; - + $threads[$threadsid]['items'] = [$arr['output']]; } } else { // Normal View @@ -750,14 +747,14 @@ class Conversation } $o = Renderer::replaceMacros($page_template, [ - '$baseurl' => $this->baseURL->get($ssl_state), + '$baseurl' => $this->baseURL->get($ssl_state), '$return_path' => $this->args->getQueryString(), '$live_update' => $live_update_div, - '$remove' => $this->l10n->t('remove'), - '$mode' => $mode, - '$update' => $update, - '$threads' => $threads, - '$dropping' => ($page_dropping ? $this->l10n->t('Delete Selected Items') : False), + '$remove' => $this->l10n->t('remove'), + '$mode' => $mode, + '$update' => $update, + '$threads' => $threads, + '$dropping' => ($page_dropping ? $this->l10n->t('Delete Selected Items') : false), ]); $this->profiler->stopRecording(); @@ -795,7 +792,8 @@ class Conversation * * @return array items with parents and comments */ - private function addRowInformation(array $row, array $activity) { + private function addRowInformation(array $row, array $activity) + { $this->profiler->startRecording('rendering'); if ($row['uid'] == 0) { @@ -805,11 +803,13 @@ class Conversation if (!empty($activity)) { if (($row['gravity'] == GRAVITY_PARENT)) { $row['post-reason'] = ItemModel::PR_ANNOUNCEMENT; - $row = array_merge($row, $activity); + + $row = array_merge($row, $activity); $contact = Contact::getById($activity['causer-id'], ['url', 'name', 'thumb']); - $row['causer-link'] = $contact['url']; + + $row['causer-link'] = $contact['url']; $row['causer-avatar'] = $contact['thumb']; - $row['causer-name'] = $contact['name']; + $row['causer-name'] = $contact['name']; } elseif (($row['gravity'] == GRAVITY_ACTIVITY) && ($row['verb'] == Activity::ANNOUNCE) && ($row['author-id'] == $activity['causer-id'])) { return $row; @@ -837,15 +837,15 @@ class Conversation break; case ItemModel::PR_ANNOUNCEMENT: if (!empty($row['causer-id']) && $this->pConfig->get(local_user(), 'system', 'display_resharer')) { - $row['owner-id'] = $row['causer-id']; - $row['owner-link'] = $row['causer-link']; + $row['owner-id'] = $row['causer-id']; + $row['owner-link'] = $row['causer-link']; $row['owner-avatar'] = $row['causer-avatar']; - $row['owner-name'] = $row['causer-name']; + $row['owner-name'] = $row['causer-name']; } if (($row['gravity'] == GRAVITY_PARENT) && !empty($row['causer-id'])) { - $causer = ['uid' => 0, 'id' => $row['causer-id'], - 'network' => $row['causer-network'], 'url' => $row['causer-link']]; + $causer = ['uid' => 0, 'id' => $row['causer-id'], 'network' => $row['causer-network'], 'url' => $row['causer-link']]; + $row['reshared'] = $this->l10n->t('%s reshared this.', '' . htmlentities($row['causer-name']) . ''); } $row['direction'] = ['direction' => 3, 'title' => (empty($row['causer-id']) ? $this->l10n->t('Reshared') : $this->l10n->t('Reshared by %s <%s>', $row['causer-name'], $row['causer-link']))]; @@ -885,7 +885,8 @@ class Conversation * @return array items with parents and comments * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - private function addChildren(array $parents, $block_authors, $order, $uid) { + private function addChildren(array $parents, $block_authors, $order, $uid) + { $this->profiler->startRecording('rendering'); if (count($parents) > 1) { $max_comments = $this->config->get('system', 'max_comments', 100); @@ -900,7 +901,7 @@ class Conversation $commentcounter = []; $activitycounter = []; - foreach ($parents AS $parent) { + foreach ($parents as $parent) { if (!empty($parent['thr-parent-id']) && !empty($parent['gravity']) && ($parent['gravity'] == GRAVITY_ACTIVITY)) { $uriid = $parent['thr-parent-id']; if (!empty($parent['author-id'])) { @@ -979,6 +980,7 @@ class Conversation if ($thr_parent == $parent['uri-id']) { $item['children'] = $this->getItemChildren($item_list, $item); + $children[] = $item; unset($item_list[$i]); } @@ -1058,7 +1060,7 @@ class Conversation if (isset($child['children']) && count($child['children'])) { // This helps counting only the regular posts - $count_post_closure = function($var) { + $count_post_closure = function ($var) { $this->profiler->stopRecording(); return $var['verb'] === Activity::POST; }; @@ -1072,7 +1074,7 @@ class Conversation // Searches the post item in the children $j = 0; - while($child['children'][$j]['verb'] !== Activity::POST && $j < count($child['children'])) { + while ($child['children'][$j]['verb'] !== Activity::POST && $j < count($child['children'])) { $j ++; } @@ -1143,9 +1145,8 @@ class Conversation * items and add them as children of their top-level post. */ foreach ($parents as $i => $parent) { - $parents[$i]['children'] = - array_merge($this->getItemChildren($item_array, $parent, true), - $this->getItemChildren($item_array, $parent, false)); + $parents[$i]['children'] = array_merge($this->getItemChildren($item_array, $parent, true), + $this->getItemChildren($item_array, $parent, false)); } foreach ($parents as $i => $parent) {