]> git.mxchange.org Git - friendica.git/blobdiff - src/Module/Notifications/Notification.php
Update src/Model/GServer.php
[friendica.git] / src / Module / Notifications / Notification.php
index 2dc008248e703d2d2f5757a9dbe00a212f356807..d72e3c2502709ddad804d67d11d6e2da8dff49af 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2020, Friendica
+ * @copyright Copyright (C) 2010-2022, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
@@ -24,6 +24,7 @@ namespace Friendica\Module\Notifications;
 use Friendica\BaseModule;
 use Friendica\Core\System;
 use Friendica\DI;
+use Friendica\Model\Contact;
 use Friendica\Module\Security\Login;
 use Friendica\Network\HTTPException;
 
@@ -41,23 +42,25 @@ class Notification extends BaseModule
         * @throws \ImagickException
         * @throws \Exception
         */
-       public static function post(array $parameters = [])
+       protected function post(array $request = [])
        {
                if (!local_user()) {
                        throw new HTTPException\UnauthorizedException(DI::l10n()->t('Permission denied.'));
                }
 
-               $request_id = $parameters['id'] ?? false;
+               $request_id = $this->parameters['id'] ?? false;
 
                if ($request_id) {
-                       $intro = DI::intro()->selectFirst(['id' => $request_id, 'uid' => local_user()]);
+                       $intro = DI::intro()->selectOneById($request_id, local_user());
 
                        switch ($_POST['submit']) {
                                case DI::l10n()->t('Discard'):
-                                       $intro->discard();
+                                       Contact\Introduction::discard($intro);
+                                       DI::intro()->delete($intro);
                                        break;
                                case DI::l10n()->t('Ignore'):
                                        $intro->ignore();
+                                       DI::intro()->save($intro);
                                        break;
                        }
 
@@ -70,7 +73,7 @@ class Notification extends BaseModule
         *
         * @throws HTTPException\UnauthorizedException
         */
-       public static function rawContent(array $parameters = [])
+       protected function rawContent(array $request = [])
        {
                if (!local_user()) {
                        throw new HTTPException\UnauthorizedException(DI::l10n()->t('Permission denied.'));
@@ -78,7 +81,8 @@ class Notification extends BaseModule
 
                if (DI::args()->get(1) === 'mark' && DI::args()->get(2) === 'all') {
                        try {
-                               $success = DI::notify()->setSeen();
+                               DI::notification()->setAllSeenForUser(local_user());
+                               $success = DI::notify()->setAllSeenForUser(local_user());
                        } catch (\Exception $e) {
                                DI::logger()->warning('set all seen failed.', ['exception' => $e]);
                                $success = false;
@@ -97,21 +101,34 @@ class Notification extends BaseModule
         * @throws HTTPException\InternalServerErrorException
         * @throws \Exception
         */
-       public static function content(array $parameters = [])
+       protected function content(array $request = []): string
        {
                if (!local_user()) {
                        notice(DI::l10n()->t('You must be logged in to show this page.'));
                        return Login::form();
                }
 
-               $request_id = $parameters['id'] ?? false;
+               $request_id = $this->parameters['id'] ?? false;
 
                if ($request_id) {
-                       $notify = DI::notify()->getByID($request_id, local_user());
-                       DI::notify()->setSeen(true, $notify);
+                       $Notify = DI::notify()->selectOneById($request_id);
+                       if ($Notify->uid !== local_user()) {
+                               throw new HTTPException\ForbiddenException();
+                       }
+
+                       if (DI::pConfig()->get(local_user(), 'system', 'detailed_notif')) {
+                               $Notify->setSeen();
+                               DI::notify()->save($Notify);
+                       } else {
+                               if ($Notify->uriId) {
+                                       DI::notification()->setAllSeenForUser($Notify->uid, ['target-uri-id' => $Notify->uriId]);
+                               }
+
+                               DI::notify()->setAllSeenForRelatedNotify($Notify);
+                       }
 
-                       if (!empty($notify->link)) {
-                               System::externalRedirect($notify->link);
+                       if ((string)$Notify->link) {
+                               System::externalRedirect($Notify->link);
                        }
 
                        DI::baseUrl()->redirect();
@@ -119,6 +136,6 @@ class Notification extends BaseModule
 
                DI::baseUrl()->redirect('notifications/system');
 
-               throw new HTTPException\InternalServerErrorException('Invalid situation.');
+               return '';
        }
 }