+++ /dev/null
-<?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;
-}
$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);
--- /dev/null
+<?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;
+ }
+ }
+}
--- /dev/null
+<?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);
+ }
+ }
+}