]> git.mxchange.org Git - friendica.git/blobdiff - src/Content/Widget/TagCloud.php
Merge pull request #13238 from annando/issue-13221
[friendica.git] / src / Content / Widget / TagCloud.php
index b29e62780e8559b8b2976eff26345e5e64418640..6cee7e719050ab04b1d11277287195131ea88d95 100644 (file)
@@ -1,16 +1,31 @@
 <?php
-
-/*
- * @file src/Content/Widget/TagCloud.php
+/**
+ * @copyright Copyright (C) 2010-2023, the Friendica project
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
  */
 
 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
@@ -31,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);
@@ -41,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;
@@ -70,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 [];
@@ -115,8 +127,8 @@ class TagCloud
        private static function tagCalc(array $arr)
        {
                $tags = [];
-               $min = 1e9;
-               $max = -1e9;
+               $min = 1000000000.0;
+               $max = -1000000000.0;
                $x = 0;
 
                if (!$arr) {
@@ -124,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]);
@@ -132,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);