]> git.mxchange.org Git - friendica.git/blobdiff - src/Content/Widget.php
Merge pull request #13218 from anubis2814/develop
[friendica.git] / src / Content / Widget.php
index 3f97e9f259e50a4c37d6fcef472f755884cfce64..c18a3041b0568c799a35d10c15954e66a7e1b84d 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2010-2021, the Friendica project
+ * @copyright Copyright (C) 2010-2023, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
 namespace Friendica\Content;
 
 use Friendica\Core\Addon;
-use Friendica\Core\Cache\Duration;
+use Friendica\Core\Cache\Enum\Duration;
 use Friendica\Core\Protocol;
 use Friendica\Core\Renderer;
+use Friendica\Core\Search;
 use Friendica\Database\DBA;
 use Friendica\DI;
 use Friendica\Model\Contact;
-use Friendica\Model\Group;
+use Friendica\Model\Circle;
 use Friendica\Model\Item;
 use Friendica\Model\Post;
+use Friendica\Model\Profile;
 use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Temporal;
 
@@ -43,7 +45,7 @@ class Widget
         * @return string
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
-       public static function follow($value = "")
+       public static function follow(string $value = ''): string
        {
                return Renderer::replaceMacros(Renderer::getMarkupTemplate('widget/follow.tpl'), array(
                        '$connect' => DI::l10n()->t('Add New Contact'),
@@ -56,14 +58,16 @@ class Widget
 
        /**
         * Return Find People widget
+        *
+        * @return string HTML code representing "People Widget"
         */
-       public static function findPeople()
+       public static function findPeople(): string
        {
-               $global_dir = DI::config()->get('system', 'directory');
+               $global_dir = Search::getGlobalDirectory();
 
                if (DI::config()->get('system', 'invitation_only')) {
-                       $x = intval(DI::pConfig()->get(local_user(), 'system', 'invites_remaining'));
-                       if ($x || is_site_admin()) {
+                       $x = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'invites_remaining'));
+                       if ($x || DI::app()->isSiteAdmin()) {
                                DI::page()['aside'] .= '<div class="side-link widget" id="side-invite-remain">'
                                        . DI::l10n()->tt('%d invitation available', '%d invitations available', $x)
                                        . '</div>';
@@ -81,7 +85,7 @@ class Widget
                $nv['random'] = DI::l10n()->t('Random Profile');
                $nv['inv'] = DI::l10n()->t('Invite Friends');
                $nv['directory'] = DI::l10n()->t('Global Directory');
-               $nv['global_dir'] = $global_dir;
+               $nv['global_dir'] = Profile::zrl($global_dir, true);
                $nv['local_directory'] = DI::l10n()->t('Local Directory');
 
                $aside = [];
@@ -95,7 +99,7 @@ class Widget
         *
         * @return array Unsupported networks
         */
-       public static function unavailableNetworks()
+       public static function unavailableNetworks(): array
        {
                // Always hide content from these networks
                $networks = [Protocol::PHANTOM, Protocol::FACEBOOK, Protocol::APPNET, Protocol::ZOT];
@@ -116,6 +120,10 @@ class Widget
                        $networks[] = Protocol::TWITTER;
                }
 
+               if (!Addon::isEnabled("tumblr")) {
+                       $networks[] = Protocol::TUMBLR;
+               }
+
                if (DI::config()->get("system", "ostatus_disabled")) {
                        $networks[] = Protocol::OSTATUS;
                }
@@ -152,7 +160,7 @@ class Widget
         * @return string
         * @throws \Exception
         */
-       private static function filter($type, $title, $desc, $all, $baseUrl, array $options, $selected = null)
+       private static function filter(string $type, string $title, string $desc, string $all, string $baseUrl, array $options, string $selected = null): string
        {
                $queryString = parse_url($baseUrl, PHP_URL_QUERY);
                $queryArray = [];
@@ -170,6 +178,10 @@ class Widget
                        $baseUrl = trim($baseUrl, '?') . '?';
                }
 
+               array_walk($options, function (&$value) {
+                       $value['ref'] = rawurlencode($value['ref']);
+               });
+
                return Renderer::replaceMacros(Renderer::getMarkupTemplate('widget/filter.tpl'), [
                        '$type'      => $type,
                        '$title'     => $title,
@@ -182,29 +194,29 @@ class Widget
        }
 
        /**
-        * Return group membership widget
+        * Return circle membership widget
         *
         * @param string $baseurl
         * @param string $selected
         * @return string
         * @throws \Exception
         */
-       public static function groups($baseurl, $selected = '')
+       public static function circles(string $baseurl, string $selected = ''): string
        {
-               if (!local_user()) {
+               if (!DI::userSession()->getLocalUserId()) {
                        return '';
                }
 
-               $options = array_map(function ($group) {
+               $options = array_map(function ($circle) {
                        return [
-                               'ref'  => $group['id'],
-                               'name' => $group['name']
+                               'ref'  => $circle['id'],
+                               'name' => $circle['name']
                        ];
-               }, Group::getByUserId(local_user()));
+               }, Circle::getByUserId(DI::userSession()->getLocalUserId()));
 
                return self::filter(
-                       'group',
-                       DI::l10n()->t('Groups'),
+                       'circle',
+                       DI::l10n()->t('Circles'),
                        '',
                        DI::l10n()->t('Everyone'),
                        $baseurl,
@@ -221,9 +233,9 @@ class Widget
         * @return string
         * @throws \Exception
         */
-       public static function contactRels($baseurl, $selected = '')
+       public static function contactRels(string $baseurl, string $selected = ''): string
        {
-               if (!local_user()) {
+               if (!DI::userSession()->getLocalUserId()) {
                        return '';
                }
 
@@ -231,6 +243,7 @@ class Widget
                        ['ref' => 'followers', 'name' => DI::l10n()->t('Followers')],
                        ['ref' => 'following', 'name' => DI::l10n()->t('Following')],
                        ['ref' => 'mutuals', 'name' => DI::l10n()->t('Mutual friends')],
+                       ['ref' => 'nothing', 'name' => DI::l10n()->t('No relationship')],
                ];
 
                return self::filter(
@@ -252,21 +265,19 @@ class Widget
         * @return string
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
-       public static function networks($baseurl, $selected = '')
+       public static function networks(string $baseurl, string $selected = ''): string
        {
-               if (!local_user()) {
+               if (!DI::userSession()->getLocalUserId()) {
                        return '';
                }
 
                $networks = self::unavailableNetworks();
-               $extra_sql = " AND NOT `network` IN (" . substr(str_repeat("?, ", count($networks)), 0, -2) . ")";
-               $sql_values = array_merge([local_user()], $networks);
+               $query = "`uid` = ? AND NOT `deleted` AND `network` != '' AND NOT `network` IN (" . substr(str_repeat("?, ", count($networks)), 0, -2) . ")";
+               $condition = array_merge([$query], array_merge([DI::userSession()->getLocalUserId()], $networks));
 
-               $r = DBA::p("SELECT `network` FROM `contact` WHERE `uid` = ? AND NOT `deleted` AND `network` != '' $extra_sql GROUP BY `network` ORDER BY `network`",
-                       $sql_values
-               );
+               $r = DBA::select('contact', ['network'], $condition, ['group_by' => ['network'], 'order' => ['network']]);
 
-               $nets = array();
+               $nets = [];
                while ($rr = DBA::fetch($r)) {
                        $nets[] = ['ref' => $rr['network'], 'name' => ContactSelector::networkToName($rr['network'])];
                }
@@ -292,17 +303,17 @@ class Widget
         *
         * @param string $baseurl  baseurl
         * @param string $selected optional, default empty
-        * @return string|void
+        * @return string
         * @throws \Exception
         */
-       public static function fileAs($baseurl, $selected = '')
+       public static function fileAs(string $baseurl, string $selected = ''): string
        {
-               if (!local_user()) {
+               if (!DI::userSession()->getLocalUserId()) {
                        return '';
                }
 
                $terms = [];
-               foreach (Post\Category::getArray(local_user(), Post\Category::FILE) as $savedFolderName) {
+               foreach (Post\Category::getArray(DI::userSession()->getLocalUserId(), Post\Category::FILE) as $savedFolderName) {
                        $terms[] = ['ref' => $savedFolderName, 'name' => $savedFolderName];
                }
 
@@ -320,23 +331,20 @@ class Widget
        /**
         * Return categories widget
         *
-        * @param string $baseurl  baseurl
-        * @param string $selected optional, default empty
-        * @return string|void
+        * @param int    $uid      Id of the user owning the categories
+        * @param string $baseurl  Base page URL
+        * @param string $selected Selected category
+        * @return string
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
-       public static function categories($baseurl, $selected = '')
+       public static function categories(int $uid, string $baseurl, string $selected = ''): string
        {
-               $a = DI::app();
-
-               $uid = intval($a->getProfileOwner());
-
                if (!Feature::isEnabled($uid, 'categories')) {
                        return '';
                }
 
-               $terms = array();
-               foreach (Post\Category::getArray(local_user(), Post\Category::CATEGORY) as $savedFolderName) {
+               $terms = [];
+               foreach (Post\Category::getArray($uid, Post\Category::CATEGORY) as $savedFolderName) {
                        $terms[] = ['ref' => $savedFolderName, 'name' => $savedFolderName];
                }
 
@@ -356,17 +364,17 @@ class Widget
         *
         * @param int    $uid      Viewed profile user ID
         * @param string $nickname Viewed profile user nickname
-        * @return string|void
+        * @return string
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         * @throws \ImagickException
         */
-       public static function commonFriendsVisitor(int $uid, string $nickname)
+       public static function commonFriendsVisitor(int $uid, string $nickname): string
        {
-               if (local_user() == $uid) {
+               if (DI::userSession()->getLocalUserId() == $uid) {
                        return '';
                }
 
-               $visitorPCid = local_user() ? Contact::getPublicIdByUserId(local_user()) : remote_user();
+               $visitorPCid = DI::userSession()->getPublicContactId() ?: DI::userSession()->getRemoteUserId();
                if (!$visitorPCid) {
                        return '';
                }
@@ -417,7 +425,7 @@ class Widget
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         * @throws \ImagickException
         */
-       public static function tagCloud(int $uid, int $limit = 50)
+       public static function tagCloud(int $uid, int $limit = 50): string
        {
                if (empty($uid)) {
                        return '';
@@ -442,7 +450,7 @@ class Widget
         * @return string
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
-       public static function postedByYear(string $url, int $uid, bool $wall)
+       public static function postedByYear(string $url, int $uid, bool $wall): string
        {
                $o = '';
 
@@ -462,8 +470,13 @@ class Widget
 
                if ($dthen) {
                        // Set the start and end date to the beginning of the month
+                       $cutoffday = $dthen;
+                       $thisday = substr($dnow, 4);
+                       $nextday = date('Y-m-d', strtotime($dnow . ' + 1 day'));
+                       $nextday = substr($nextday, 4);
                        $dnow = substr($dnow, 0, 8) . '01';
                        $dthen = substr($dthen, 0, 8) . '01';
+                       
 
                        /*
                         * Starting with the current month, get the first and last days of every
@@ -483,6 +496,7 @@ class Widget
 
                                $ret[$dyear][] = [$str, $end_month, $start_month];
                                $dnow = DateTimeFormat::utc($dnow . ' -1 month', 'Y-m-d');
+                               
                        }
                }
 
@@ -502,7 +516,11 @@ class Widget
                        '$url' => $url,
                        '$dates' => $ret,
                        '$showless' => DI::l10n()->t('show less'),
-                       '$showmore' => DI::l10n()->t('show more')
+                       '$showmore' => DI::l10n()->t('show more'),
+                       '$onthisdate' => DI::l10n()->t('On this date'),
+                       '$thisday' => $thisday,
+                       '$nextday' => $nextday,
+                       '$cutoffday' => $cutoffday
                ]);
 
                return $o;
@@ -513,16 +531,16 @@ class Widget
         * The account type value is added as a parameter to the url
         *
         * @param string $base        Basepath
-        * @param int    $accounttype Acount type
+        * @param string $accounttype Account type
         * @return string
         */
-       public static function accounttypes(string $base, $accounttype)
+       public static function accountTypes(string $base, string $accounttype): string
        {
                $accounts = [
                        ['ref' => 'person', 'name' => DI::l10n()->t('Persons')],
                        ['ref' => 'organisation', 'name' => DI::l10n()->t('Organisations')],
                        ['ref' => 'news', 'name' => DI::l10n()->t('News')],
-                       ['ref' => 'community', 'name' => DI::l10n()->t('Forums')],
+                       ['ref' => 'community', 'name' => DI::l10n()->t('Groups')],
                ];
 
                return self::filter('accounttype', DI::l10n()->t('Account Types'), '',