X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FContent%2FWidget%2FTagCloud.php;h=6cee7e719050ab04b1d11277287195131ea88d95;hb=302619a5de7e694acc2d6883af77fa9b051bb974;hp=15ed41a35cfa73196710445c800572cfbb9ef4dc;hpb=b9dba631aadf6c25a97b679808c684276b3dd76a;p=friendica.git diff --git a/src/Content/Widget/TagCloud.php b/src/Content/Widget/TagCloud.php index 15ed41a35c..6cee7e7190 100644 --- a/src/Content/Widget/TagCloud.php +++ b/src/Content/Widget/TagCloud.php @@ -1,16 +1,31 @@ . + * */ namespace Friendica\Content\Widget; -use Friendica\Core\L10n; use Friendica\Core\Renderer; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Item; +use Friendica\Model\Tag; /** * TagCloud widget @@ -22,7 +37,6 @@ class TagCloud /** * Construct a tag/term cloud block for an user. * - * @brief Construct a tag/term cloud block for an user. * @param int $uid The user ID. * @param int $count Max number of displayed tags/terms. * @param int $owner_id The contact ID of the owner of the tagged items. @@ -32,7 +46,7 @@ class TagCloud * @return string HTML formatted output. * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function getHTML($uid, $count = 0, $owner_id = 0, $flags = '', $type = TERM_HASHTAG) + public static function getHTML(int $uid, int $count = 0, int $owner_id = 0, string $flags = '', int $type = Tag::HASHTAG): string { $o = ''; $r = self::tagadelic($uid, $count, $owner_id, $flags, $type); @@ -42,17 +56,17 @@ class TagCloud $tags = []; foreach ($r as $rr) { - $tag['level'] = $rr[2]; - $tag['url'] = $url . '?tag=' . urlencode($rr[0]); - $tag['name'] = $rr[0]; - - $tags[] = $tag; + $tags[] = [ + 'level' => $rr[2], + 'url' => $url . '/conversations?tag=' . urlencode($rr[0]), + 'name' => $rr[0], + ]; } $tpl = Renderer::getMarkupTemplate('widget/tagcloud.tpl'); $o = Renderer::replaceMacros($tpl, [ - '$title' => L10n::t('Tags'), - '$tags' => $tags + '$title' => DI::l10n()->t('Tags'), + '$tags' => $tags ]); } return $o; @@ -62,8 +76,6 @@ class TagCloud * Get alphabetical sorted array of used tags/terms of an user including * a weighting by frequency of use. * - * @brief Get alphabetical sorted array of used tags/terms of an user including - * a weighting by frequency of use. * @param int $uid The user ID. * @param int $count Max number of displayed tags/terms. * @param int $owner_id The contact id of the owner of the tagged items. @@ -73,32 +85,29 @@ class TagCloud * @return array Alphabetical sorted array of used tags of an user. * @throws \Exception */ - private static function tagadelic($uid, $count = 0, $owner_id = 0, $flags = '', $type = TERM_HASHTAG) + private static function tagadelic($uid, $count = 0, $owner_id = 0, $flags = '', $type = Tag::HASHTAG) { - $sql_options = Item::getPermissionsSQLByUserId($uid); + $sql_options = Item::getPermissionsSQLByUserId($uid, 'post-user-view'); $limit = $count ? sprintf('LIMIT %d', intval($count)) : ''; if ($flags) { if ($flags === 'wall') { - $sql_options .= ' AND `item`.`wall` '; + $sql_options .= ' AND `post-user-view`.`wall` '; } } if ($owner_id) { - $sql_options .= ' AND `item`.`owner-id` = ' . intval($owner_id) . ' '; + $sql_options .= ' AND `post-user-view`.`owner-id` = ' . intval($owner_id) . ' '; } // Fetch tags - $tag_stmt = DBA::p("SELECT `term`, COUNT(`term`) AS `total` FROM `term` - LEFT JOIN `item` ON `term`.`oid` = `item`.`id` - WHERE `term`.`uid` = ? AND `term`.`type` = ? - AND `term`.`otype` = ? - AND `item`.`visible` AND NOT `item`.`deleted` AND NOT `item`.`moderated` + $tag_stmt = DBA::p("SELECT `name`, COUNT(`name`) AS `total` FROM `tag-search-view` + LEFT JOIN `post-user-view` ON `tag-search-view`.`uri-id` = `post-user-view`.`uri-id` AND `tag-search-view`.`uid` = `post-user-view`.`uid` + WHERE `tag-search-view`.`uid` = ? + AND `post-user-view`.`visible` AND NOT `post-user-view`.`deleted` $sql_options - GROUP BY `term` ORDER BY `total` DESC $limit", - $uid, - $type, - TERM_OBJ_POST + GROUP BY `name` ORDER BY `total` DESC $limit", + $uid ); if (!DBA::isResult($tag_stmt)) { return []; @@ -112,15 +121,14 @@ class TagCloud /** * Calculate weighting of tags according to the frequency of use. * - * @brief Calculate weighting of tags according to the frequency of use. * @param array $arr Array of tags/terms with tag/term name and total count of use. * @return array Alphabetical sorted array of used tags/terms of an user. */ private static function tagCalc(array $arr) { $tags = []; - $min = 1e9; - $max = -1e9; + $min = 1000000000.0; + $max = -1000000000.0; $x = 0; if (!$arr) { @@ -128,7 +136,7 @@ class TagCloud } foreach ($arr as $rr) { - $tags[$x][0] = $rr['term']; + $tags[$x][0] = $rr['name']; $tags[$x][1] = log($rr['total']); $tags[$x][2] = 0; $min = min($min, $tags[$x][1]); @@ -136,8 +144,8 @@ class TagCloud $x ++; } - usort($tags, 'self::tagsSort'); - $range = max(.01, $max - $min) * 1.0001; + usort($tags, [self::class, 'tagsSort']); + $range = max(0.01, $max - $min) * 1.0001; for ($x = 0; $x < count($tags); $x ++) { $tags[$x][2] = 1 + floor(9 * ($tags[$x][1] - $min) / $range); @@ -149,7 +157,6 @@ class TagCloud /** * Compare function to sort tags/terms alphabetically. * - * @brief Compare function to sort tags/terms alphabetically. * @param string $a * @param string $b *