]> git.mxchange.org Git - friendica.git/blobdiff - src/Module/Notifications/Notification.php
Use router parameters in Admin modules
[friendica.git] / src / Module / Notifications / Notification.php
index 2f3f927f9c3b4a83aa0932d8996a512d91b9330a..2dc008248e703d2d2f5757a9dbe00a212f356807 100644 (file)
@@ -1,10 +1,30 @@
 <?php
+/**
+ * @copyright Copyright (C) 2020, Friendica
+ *
+ * @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\Module\Notifications;
 
 use Friendica\BaseModule;
 use Friendica\Core\System;
 use Friendica\DI;
+use Friendica\Module\Security\Login;
 use Friendica\Network\HTTPException;
 
 /**
@@ -12,51 +32,93 @@ use Friendica\Network\HTTPException;
  */
 class Notification extends BaseModule
 {
-       public static function init(array $parameters = [])
+       /**
+        * {@inheritDoc}
+        *
+        * @throws HTTPException\InternalServerErrorException
+        * @throws HTTPException\NotFoundException
+        * @throws HTTPException\UnauthorizedException
+        * @throws \ImagickException
+        * @throws \Exception
+        */
+       public static function post(array $parameters = [])
        {
                if (!local_user()) {
                        throw new HTTPException\UnauthorizedException(DI::l10n()->t('Permission denied.'));
                }
+
+               $request_id = $parameters['id'] ?? false;
+
+               if ($request_id) {
+                       $intro = DI::intro()->selectFirst(['id' => $request_id, 'uid' => local_user()]);
+
+                       switch ($_POST['submit']) {
+                               case DI::l10n()->t('Discard'):
+                                       $intro->discard();
+                                       break;
+                               case DI::l10n()->t('Ignore'):
+                                       $intro->ignore();
+                                       break;
+                       }
+
+                       DI::baseUrl()->redirect('notifications/intros');
+               }
        }
 
+       /**
+        * {@inheritDoc}
+        *
+        * @throws HTTPException\UnauthorizedException
+        */
        public static function rawContent(array $parameters = [])
        {
-               // @TODO: Replace with parameter from router
+               if (!local_user()) {
+                       throw new HTTPException\UnauthorizedException(DI::l10n()->t('Permission denied.'));
+               }
+
                if (DI::args()->get(1) === 'mark' && DI::args()->get(2) === 'all') {
-                       $success = DI::notification()->setAllSeen();
+                       try {
+                               $success = DI::notify()->setSeen();
+                       } catch (\Exception $e) {
+                               DI::logger()->warning('set all seen failed.', ['exception' => $e]);
+                               $success = false;
+                       }
 
-                       header('Content-type: application/json; charset=utf-8');
-                       echo json_encode([
-                               'result' => ($success) ? 'success' : 'fail',
-                       ]);
-                       exit();
+                       System::jsonExit(['result' => (($success) ? 'success' : 'fail')]);
                }
        }
 
        /**
+        * {@inheritDoc}
+        *
         * Redirect to the notifications main page or to the url for the chosen notifications
         *
-        * @return string|void
+        * @throws HTTPException\NotFoundException In case the notification is either not existing or is not for this user
         * @throws HTTPException\InternalServerErrorException
+        * @throws \Exception
         */
        public static function content(array $parameters = [])
        {
-               // @TODO: Replace with parameter from router
-               if (DI::args()->getArgc() > 2 && DI::args()->get(1) === 'view' && intval(DI::args()->get(2))) {
-                       $notificationManager = DI::notification();
-                       // @TODO: Replace with parameter from router
-                       $note = $notificationManager->getByID(DI::args()->get(2));
-                       if (!empty($note)) {
-                               $notificationManager->setSeen($note);
-                               if (!empty($note['link'])) {
-                                       System::externalRedirect($note['link']);
-                               }
+               if (!local_user()) {
+                       notice(DI::l10n()->t('You must be logged in to show this page.'));
+                       return Login::form();
+               }
+
+               $request_id = $parameters['id'] ?? false;
+
+               if ($request_id) {
+                       $notify = DI::notify()->getByID($request_id, local_user());
+                       DI::notify()->setSeen(true, $notify);
+
+                       if (!empty($notify->link)) {
+                               System::externalRedirect($notify->link);
                        }
 
                        DI::baseUrl()->redirect();
                }
 
-               // @TODO: Replace with parameter from router
                DI::baseUrl()->redirect('notifications/system');
+
+               throw new HTTPException\InternalServerErrorException('Invalid situation.');
        }
 }