From 9092cb1beb623966f75a9871e40db8b78a048f4c Mon Sep 17 00:00:00 2001
From: Philipp Holzer <admin+github@philipp.info>
Date: Sat, 18 May 2019 20:02:21 +0200
Subject: [PATCH] Move mod/notice to src/Module/Notice

---
 mod/notice.php                  | 23 ---------------------
 src/App/Router.php              |  1 +
 src/Model/ItemUser.php          | 36 +++++++++++++++++++++++++++++++++
 src/Module/GnuSocial/Notice.php | 34 +++++++++++++++++++++++++++++++
 4 files changed, 71 insertions(+), 23 deletions(-)
 delete mode 100644 mod/notice.php
 create mode 100644 src/Model/ItemUser.php
 create mode 100644 src/Module/GnuSocial/Notice.php

diff --git a/mod/notice.php b/mod/notice.php
deleted file mode 100644
index b0a6a54391..0000000000
--- a/mod/notice.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * @file mod/notice.php
- * GNU Social -> friendica items permanent-url compatibility
- */
-
-use Friendica\App;
-use Friendica\Core\L10n;
-use Friendica\Database\DBA;
-
-function notice_init(App $a)
-{
-	$id = $a->argv[1];
-	$r = q("SELECT `user`.`nickname` FROM `user` LEFT JOIN `item` ON `item`.`uid` = `user`.`uid` WHERE `item`.`id` = %d", intval($id));
-	if (DBA::isResult($r)) {
-		$nick = $r[0]['nickname'];
-		$a->internalRedirect('display/' . $nick . '/' . $id);
-	} else {
-		throw new \Friendica\Network\HTTPException\NotFoundException(L10n::t('Item not found.'));
-	}
-
-	return;
-}
diff --git a/src/App/Router.php b/src/App/Router.php
index 133544c819..87f4d6e874 100644
--- a/src/App/Router.php
+++ b/src/App/Router.php
@@ -169,6 +169,7 @@ class Router
 			$collector->addRoute(['GET'], '/view/{id:\d+}',                      Module\Notifications\Notify::class);
 			$collector->addRoute(['GET'], '/mark/all',                           Module\Notifications\Notify::class);
 		});
+		$this->routeCollector->addRoute(['GET'],         '/notice/{id:\d+}',     Module\GnuSocial\Notice::class);
 		$this->routeCollector->addRoute(['GET'],         '/objects/{guid}',      Module\Objects::class);
 		$this->routeCollector->addGroup('/oembed', function (RouteCollector $collector) {
 			$collector->addRoute(['GET'], '/b2h',                                Module\Oembed::class);
diff --git a/src/Model/ItemUser.php b/src/Model/ItemUser.php
new file mode 100644
index 0000000000..c157150339
--- /dev/null
+++ b/src/Model/ItemUser.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace Friendica\Model;
+
+use Exception;
+use Friendica\Database\DBA;
+
+/**
+ * Model for user specific operations of items
+ */
+class ItemUser
+{
+	/**
+	 * Returns fields of the user for an item
+	 *
+	 * @param int   $id     The item id
+	 * @param array $fields The fields, which should get returned
+	 *
+	 * @return array|bool
+	 * @throws Exception In case of a DB-failure
+	 */
+	public static function getUserForItemId($id, array $fields = [])
+	{
+		$item = DBA::selectFirst('item', ['uid'], ['id' => $id]);
+		if (empty($item)) {
+			return false;
+		}
+
+		$user = DBA::selectFirst('user', $fields, ['uid' => $item['uid']]);
+		if (!empty($user)) {
+			return $user;
+		} else {
+			return false;
+		}
+	}
+}
diff --git a/src/Module/GnuSocial/Notice.php b/src/Module/GnuSocial/Notice.php
new file mode 100644
index 0000000000..ce4a5c5094
--- /dev/null
+++ b/src/Module/GnuSocial/Notice.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace Friendica\Module\GnuSocial;
+
+use Friendica\BaseModule;
+use Friendica\Core\L10n;
+use Friendica\Model\ItemUser;
+use Friendica\Network\HTTPException;
+
+/**
+ * GNU Social -> friendica items permanent-url compatibility
+ */
+class Notice extends BaseModule
+{
+	public static function rawContent()
+	{
+		$a = self::getApp();
+
+		// @TODO: Replace with parameter from router
+		$id = ($a->argc > 1) ? $a->argv[1] : 0;
+
+		if (empty($id)) {
+			throw new HTTPException\NotFoundException(L10n::t('Item not found.'));
+		}
+
+		$user = ItemUser::getUserForItemId($id, ['nickname']);
+
+		if (empty($user)) {
+			throw new HTTPException\NotFoundException(L10n::t('Item not found.'));
+		} else {
+			$a->internalRedirect('display/' . $user['nickname'] . '/' . $id);
+		}
+	}
+}
-- 
2.39.5