From 8b3ab4e6bbc8487eb97a68a91ef8c095131666b9 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 21 Nov 2020 11:08:44 -0500 Subject: [PATCH 1/2] Refactor builtin_activity_puller() and format_like() - Simplify output array - Rename format_like() to format_activity() - Remove duplicate parameters in format_activity() --- include/conversation.php | 111 +++++++++++++++++++-------------------- mod/photos.php | 4 +- src/Object/Post.php | 4 +- 3 files changed, 57 insertions(+), 62 deletions(-) diff --git a/include/conversation.php b/include/conversation.php index 22cd71957b..0d21f877ad 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -256,7 +256,7 @@ function localize_item(&$item) // add zrl's to public images $photo_pattern = "/\[url=(.*?)\/photos\/(.*?)\/image\/(.*?)\]\[img(.*?)\]h(.*?)\[\/img\]\[\/url\]/is"; if (preg_match($photo_pattern, $item['body'])) { - $photo_replace = '[url=' . Profile::zrl('$1' . '/photos/' . '$2' . '/image/' . '$3' ,true) . '][img' . '$4' . ']h' . '$5' . '[/img][/url]'; + $photo_replace = '[url=' . Profile::zrl('$1' . '/photos/' . '$2' . '/image/' . '$3' , true) . '][img' . '$4' . ']h' . '$5' . '[/img][/url]'; $item['body'] = BBCode::pregReplaceInTag($photo_pattern, $photo_replace, 'url', $item['body']); } @@ -467,7 +467,7 @@ function conversation(App $a, array $items, $mode, $update, $preview = false, $o } $cb = ['items' => $items, 'mode' => $mode, 'update' => $update, 'preview' => $preview]; - Hook::callAll('conversation_start',$cb); + Hook::callAll('conversation_start', $cb); $items = $cb['items']; @@ -544,7 +544,7 @@ function conversation(App $a, array $items, $mode, $update, $preview = false, $o } $locate = ['location' => $item['location'], 'coord' => $item['coord'], 'html' => '']; - Hook::callAll('render_location',$locate); + Hook::callAll('render_location', $locate); $location_html = $locate['html'] ?: Strings::escapeHtml($locate['location'] ?: $locate['coord'] ?: ''); localize_item($item); @@ -614,7 +614,7 @@ function conversation(App $a, array $items, $mode, $update, $preview = false, $o 'folders' => $folders, 'text' => strip_tags($body_html), 'localtime' => DateTimeFormat::local($item['created'], 'r'), - 'ago' => (($item['app']) ? DI::l10n()->t('%s from %s', Temporal::getRelativeDate($item['created']),$item['app']) : Temporal::getRelativeDate($item['created'])), + 'ago' => (($item['app']) ? DI::l10n()->t('%s from %s', Temporal::getRelativeDate($item['created']), $item['app']) : Temporal::getRelativeDate($item['created'])), 'location_html' => $location_html, 'indent' => '', 'owner_name' => '', @@ -982,13 +982,14 @@ function item_photo_menu($item) { * * Increments the count of each matching activity and adds a link to the author as needed. * - * @param array $item + * @param array $activity * @param array &$conv_responses (already created with builtin activity structure) * @return void * @throws ImagickException * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ -function builtin_activity_puller($item, &$conv_responses) { +function builtin_activity_puller(array $activity, array &$conv_responses) +{ foreach ($conv_responses as $mode => $v) { $sparkle = ''; @@ -1015,47 +1016,47 @@ function builtin_activity_puller($item, &$conv_responses) { return; } - if (!empty($item['verb']) && DI::activity()->match($item['verb'], $verb) && ($item['gravity'] != GRAVITY_PARENT)) { - $author = ['uid' => 0, 'id' => $item['author-id'], - 'network' => $item['author-network'], 'url' => $item['author-link']]; + if (!empty($activity['verb']) && DI::activity()->match($activity['verb'], $verb) && ($activity['gravity'] != GRAVITY_PARENT)) { + $author = [ + 'uid' => 0, + 'id' => $activity['author-id'], + 'network' => $activity['author-network'], + 'url' => $activity['author-link'] + ]; $url = Contact::magicLinkByContact($author); if (strpos($url, 'redir/') === 0) { $sparkle = ' class="sparkle" '; } - $url = '' . htmlentities($item['author-name']) . ''; + $link = '' . htmlentities($activity['author-name']) . ''; - if (empty($item['thr-parent'])) { - $item['thr-parent'] = $item['parent-uri']; - } - - if (!(isset($conv_responses[$mode][$item['thr-parent'] . '-l']) - && is_array($conv_responses[$mode][$item['thr-parent'] . '-l']))) { - $conv_responses[$mode][$item['thr-parent'] . '-l'] = []; + if (empty($activity['thr-parent'])) { + $activity['thr-parent'] = $activity['parent-uri']; } // only list each unique author once - if (in_array($url,$conv_responses[$mode][$item['thr-parent'] . '-l'])) { + if (in_array($link, $conv_responses[$mode][$activity['thr-parent']]['links'])) { continue; } // Skip when the causer of the parent is the same than the author of the announce - if (($verb == Activity::ANNOUNCE) && Item::exists(['uri' => $item['thr-parent'], - 'uid' => $item['uid'], 'causer-id' => $item['author-id'], 'gravity' => GRAVITY_PARENT])) { + if (($verb == Activity::ANNOUNCE) && Item::exists(['uri' => $activity['thr-parent'], + 'uid' => $activity['uid'], 'causer-id' => $activity['author-id'], 'gravity' => GRAVITY_PARENT])) { continue; } - if (!isset($conv_responses[$mode][$item['thr-parent']])) { - $conv_responses[$mode][$item['thr-parent']] = 1; - } else { - $conv_responses[$mode][$item['thr-parent']] ++; + if (!isset($conv_responses[$mode][$activity['thr-parent']])) { + $conv_responses[$mode][$activity['thr-parent']] = [ + 'links' => [], + 'self' => 0, + ]; } - if (public_contact() == $item['author-id']) { - $conv_responses[$mode][$item['thr-parent'] . '-self'] = 1; + if (public_contact() == $activity['author-id']) { + $conv_responses[$mode][$activity['thr-parent']]['self'] = 1; } - $conv_responses[$mode][$item['thr-parent'] . '-l'][] = $url; + $conv_responses[$mode][$activity['thr-parent']]['links'][] = $link; // there can only be one activity verb per item so if we found anything, we can stop looking return; @@ -1064,26 +1065,26 @@ function builtin_activity_puller($item, &$conv_responses) { } /** - * Format the vote text for a profile item + * Format the activity text for an item/photo/video * - * @param int $cnt = number of people who vote the item - * @param array $arr = array of pre-linked names of likers/dislikers - * @param string $type = one of 'like, 'dislike', 'attendyes', 'attendno', 'attendmaybe' - * @param int $id = item id + * @param array $links = array of pre-linked names of actors + * @param string $verb = one of 'like, 'dislike', 'attendyes', 'attendno', 'attendmaybe' + * @param int $id = item id * @return string formatted text * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ -function format_like($cnt, array $arr, $type, $id) { +function format_activity(array $links, $verb, $id) { $o = ''; $expanded = ''; $phrase = ''; - if ($cnt == 1) { - $likers = $arr[0]; + $total = count($links); + if ($total == 1) { + $likers = $links[0]; // Phrase if there is only one liker. In other cases it will be uses for the expanded // list which show all likers - switch ($type) { + switch ($verb) { case 'like' : $phrase = DI::l10n()->t('%s likes this.', $likers); break; @@ -1103,56 +1104,51 @@ function format_like($cnt, array $arr, $type, $id) { $phrase = DI::l10n()->t('%s reshared this.', $likers); break; } - } - - if ($cnt > 1) { - $total = count($arr); + } elseif ($total > 1) { if ($total < MAX_LIKERS) { - $last = DI::l10n()->t('and') . ' ' . $arr[count($arr)-1]; - $arr2 = array_slice($arr, 0, -1); - $likers = implode(', ', $arr2) . ' ' . $last; + $likers = implode(', ', array_slice($links, 0, -1)); + $likers .= ' ' . DI::l10n()->t('and') . ' ' . $links[count($links)-1]; } else { - $arr = array_slice($arr, 0, MAX_LIKERS - 1); - $likers = implode(', ', $arr); - $likers .= DI::l10n()->t('and %d other people', $total - MAX_LIKERS); + $likers = implode(', ', array_slice($links, 0, MAX_LIKERS - 1)); + $likers .= ' ' . DI::l10n()->t('and %d other people', $total - MAX_LIKERS); } - $spanatts = "class=\"fakelink\" onclick=\"openClose('{$type}list-$id');\""; + $spanatts = "class=\"fakelink\" onclick=\"openClose('{$verb}list-$id');\""; $explikers = ''; - switch ($type) { + switch ($verb) { case 'like': - $phrase = DI::l10n()->t('%2$d people like this', $spanatts, $cnt); + $phrase = DI::l10n()->t('%2$d people like this', $spanatts, $total); $explikers = DI::l10n()->t('%s like this.', $likers); break; case 'dislike': - $phrase = DI::l10n()->t('%2$d people don\'t like this', $spanatts, $cnt); + $phrase = DI::l10n()->t('%2$d people don\'t like this', $spanatts, $total); $explikers = DI::l10n()->t('%s don\'t like this.', $likers); break; case 'attendyes': - $phrase = DI::l10n()->t('%2$d people attend', $spanatts, $cnt); + $phrase = DI::l10n()->t('%2$d people attend', $spanatts, $total); $explikers = DI::l10n()->t('%s attend.', $likers); break; case 'attendno': - $phrase = DI::l10n()->t('%2$d people don\'t attend', $spanatts, $cnt); + $phrase = DI::l10n()->t('%2$d people don\'t attend', $spanatts, $total); $explikers = DI::l10n()->t('%s don\'t attend.', $likers); break; case 'attendmaybe': - $phrase = DI::l10n()->t('%2$d people attend maybe', $spanatts, $cnt); + $phrase = DI::l10n()->t('%2$d people attend maybe', $spanatts, $total); $explikers = DI::l10n()->t('%s attend maybe.', $likers); break; case 'announce': - $phrase = DI::l10n()->t('%2$d people reshared this', $spanatts, $cnt); + $phrase = DI::l10n()->t('%2$d people reshared this', $spanatts, $total); $explikers = DI::l10n()->t('%s reshared this.', $likers); break; } - $expanded .= "\t" . ''; + $expanded .= "\t" . ''; } $o .= Renderer::replaceMacros(Renderer::getMarkupTemplate('voting_fakelink.tpl'), [ '$phrase' => $phrase, - '$type' => $type, + '$type' => $verb, '$id' => $id ]); $o .= $expanded; @@ -1183,10 +1179,9 @@ function status_editor(App $a, $x, $notes_cid = 0, $popup = false) $jotplugins = ''; Hook::callAll('jot_tool', $jotplugins); - // $tpl = Renderer::replaceMacros($tpl,array('$jotplugins' => $jotplugins)); $tpl = Renderer::getMarkupTemplate("jot.tpl"); - $o .= Renderer::replaceMacros($tpl,[ + $o .= Renderer::replaceMacros($tpl, [ '$new_post' => DI::l10n()->t('New Post'), '$return_path' => DI::args()->getQueryString(), '$action' => 'item', diff --git a/mod/photos.php b/mod/photos.php index e94a3ed8d3..fd831d5e2e 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -1423,11 +1423,11 @@ function photos_content(App $a) } if (!empty($conv_responses['like'][$link_item['uri']])) { - $like = format_like($conv_responses['like'][$link_item['uri']], $conv_responses['like'][$link_item['uri'] . '-l'], 'like', $link_item['id']); + $like = format_activity($conv_responses['like'][$link_item['uri']]['links'], 'like', $link_item['id']); } if (!empty($conv_responses['dislike'][$link_item['uri']])) { - $dislike = format_like($conv_responses['dislike'][$link_item['uri']], $conv_responses['dislike'][$link_item['uri'] . '-l'], 'dislike', $link_item['id']); + $dislike = format_activity($conv_responses['dislike'][$link_item['uri']]['links'], 'dislike', $link_item['id']); } if (($can_post || Security::canWriteToUserWall($owner_uid))) { diff --git a/src/Object/Post.php b/src/Object/Post.php index 83dc0c0944..12d8067423 100644 --- a/src/Object/Post.php +++ b/src/Object/Post.php @@ -280,8 +280,8 @@ class Post $responses = []; foreach ($response_verbs as $value => $verb) { $responses[$verb] = [ - 'self' => $conv_responses[$verb][$item['uri'] . '-self'] ?? 0, - 'output' => !empty($conv_responses[$verb][$item['uri']]) ? format_like($conv_responses[$verb][$item['uri']], $conv_responses[$verb][$item['uri'] . '-l'], $verb, $item['uri']) : '', + 'self' => $conv_responses[$verb][$item['uri']]['self'] ?? 0, + 'output' => !empty($conv_responses[$verb][$item['uri']]) ? format_activity($conv_responses[$verb][$item['uri']]['links'], $verb, $item['uri']) : '', ]; } From 4370d0b96751a9b91521dfa75f580a920cda592a Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 21 Nov 2020 11:10:04 -0500 Subject: [PATCH 2/2] Add missing activity toggle capability to photos --- mod/photos.php | 33 ++++++++++++++-------- view/templates/like_noshare.tpl | 4 +-- view/theme/frio/templates/like_noshare.tpl | 20 +++++++++---- 3 files changed, 38 insertions(+), 19 deletions(-) diff --git a/mod/photos.php b/mod/photos.php index fd831d5e2e..1a16f68026 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -1361,17 +1361,6 @@ function photos_content(App $a) $tpl = Renderer::getMarkupTemplate('photo_item.tpl'); $return_path = DI::args()->getCommand(); - if ($cmd === 'view' && ($can_post || Security::canWriteToUserWall($owner_uid))) { - $like_tpl = Renderer::getMarkupTemplate('like_noshare.tpl'); - $likebuttons = Renderer::replaceMacros($like_tpl, [ - '$id' => $link_item['id'], - '$likethis' => DI::l10n()->t("I like this \x28toggle\x29"), - '$dislike' => DI::pConfig()->get(local_user(), 'system', 'hide_dislike') ? '' : DI::l10n()->t("I don't like this \x28toggle\x29"), - '$wait' => DI::l10n()->t('Please wait'), - '$return_path' => DI::args()->getQueryString(), - ]); - } - if (!DBA::isResult($items)) { if (($can_post || Security::canWriteToUserWall($owner_uid))) { /* @@ -1534,6 +1523,28 @@ function photos_content(App $a) } } + $responses = []; + foreach ($conv_responses as $verb => $activity) { + if (isset($activity[$link_item['uri']])) { + $responses[$verb] = $activity[$link_item['uri']]; + } + } + + if ($cmd === 'view' && ($can_post || Security::canWriteToUserWall($owner_uid))) { + $like_tpl = Renderer::getMarkupTemplate('like_noshare.tpl'); + $likebuttons = Renderer::replaceMacros($like_tpl, [ + '$id' => $link_item['id'], + '$like' => DI::l10n()->t('Like'), + '$like_title' => DI::l10n()->t('I like this (toggle)'), + '$dislike' => DI::l10n()->t('Dislike'), + '$wait' => DI::l10n()->t('Please wait'), + '$dislike_title' => DI::l10n()->t('I don\'t like this (toggle)'), + '$hide_dislike' => DI::pConfig()->get(local_user(), 'system', 'hide_dislike'), + '$responses' => $responses, + '$return_path' => DI::args()->getQueryString(), + ]); + } + $paginate = $pager->renderFull($total); } diff --git a/view/templates/like_noshare.tpl b/view/templates/like_noshare.tpl index 3df365e727..4419a5b97a 100644 --- a/view/templates/like_noshare.tpl +++ b/view/templates/like_noshare.tpl @@ -1,8 +1,8 @@ diff --git a/view/theme/frio/templates/like_noshare.tpl b/view/theme/frio/templates/like_noshare.tpl index b2a56292c7..dd3fa2e5f6 100644 --- a/view/theme/frio/templates/like_noshare.tpl +++ b/view/theme/frio/templates/like_noshare.tpl @@ -1,12 +1,20 @@
- - {{if $dislike}} - - {{/if}}