3 declare(strict_types
=1);
5 namespace Shaarli\Legacy
;
7 use Shaarli\Feed\FeedBuilder
;
8 use Shaarli\Front\Controller\Visitor\ShaarliVisitorController
;
10 use Slim\Http\Response
;
13 * We use this to maintain legacy routes, and redirect requests to the corresponding Slim route.
14 * Only public routes, and both `?addlink` and `?post` were kept here.
15 * Other routes will just display the linklist.
19 class LegacyController
extends ShaarliVisitorController
21 /** @var string[] Both `?post` and `?addlink` do not use `?do=` format. */
22 public const LEGACY_GET_ROUTES
= [
28 * This method will call `$action` method, which will redirect to corresponding Slim route.
30 public function process(Request
$request, Response
$response, string $action): Response
32 if (!method_exists($this, $action)) {
33 throw new UnknowLegacyRouteException();
36 return $this->{$action
}($request, $response);
39 /** Legacy route: ?post= */
40 public function post(Request
$request, Response
$response): Response
42 $parameters = count($request->getQueryParams()) > 0 ? '?' . http_build_query($request->getQueryParams()) : '';
43 $route = '/admin/shaare';
45 if (!$this->container
->loginManager
->isLoggedIn()) {
46 return $this->redirect($response, '/login?returnurl='. $this->getBasePath() . $route . $parameters);
49 return $this->redirect($response, $route . $parameters);
52 /** Legacy route: ?addlink= */
53 protected function addlink(Request
$request, Response
$response): Response
55 $route = '/admin/add-shaare';
57 if (!$this->container
->loginManager
->isLoggedIn()) {
58 return $this->redirect($response, '/login?returnurl=' . $this->getBasePath() . $route);
61 return $this->redirect($response, $route);
64 /** Legacy route: ?do=login */
65 protected function login(Request
$request, Response
$response): Response
67 $returnUrl = $request->getQueryParam('returnurl');
69 return $this->redirect($response, '/login' . ($returnUrl ? '?returnurl=' . $returnUrl : ''));
72 /** Legacy route: ?do=logout */
73 protected function logout(Request
$request, Response
$response): Response
75 return $this->redirect($response, '/admin/logout');
78 /** Legacy route: ?do=picwall */
79 protected function picwall(Request
$request, Response
$response): Response
81 return $this->redirect($response, '/picture-wall');
84 /** Legacy route: ?do=tagcloud */
85 protected function tagcloud(Request
$request, Response
$response): Response
87 return $this->redirect($response, '/tags/cloud');
90 /** Legacy route: ?do=taglist */
91 protected function taglist(Request
$request, Response
$response): Response
93 return $this->redirect($response, '/tags/list');
96 /** Legacy route: ?do=daily */
97 protected function daily(Request
$request, Response
$response): Response
99 $dayParam = !empty($request->getParam('day')) ? '?day=' . escape($request->getParam('day')) : '';
101 return $this->redirect($response, '/daily' . $dayParam);
104 /** Legacy route: ?do=rss */
105 protected function rss(Request
$request, Response
$response): Response
107 return $this->feed($request, $response, FeedBuilder
::$FEED_RSS);
110 /** Legacy route: ?do=atom */
111 protected function atom(Request
$request, Response
$response): Response
113 return $this->feed($request, $response, FeedBuilder
::$FEED_ATOM);
116 /** Legacy route: ?do=opensearch */
117 protected function opensearch(Request
$request, Response
$response): Response
119 return $this->redirect($response, '/open-search');
122 /** Legacy route: ?do=dailyrss */
123 protected function dailyrss(Request
$request, Response
$response): Response
125 return $this->redirect($response, '/daily-rss');
128 /** Legacy route: ?do=feed */
129 protected function feed(Request
$request, Response
$response, string $feedType): Response
131 $parameters = count($request->getQueryParams()) > 0 ? '?' . http_build_query($request->getQueryParams()) : '';
133 return $this->redirect($response, '/feed/' . $feedType . $parameters);
136 /** Legacy route: ?do=configure */
137 protected function configure(Request
$request, Response
$response): Response
139 $route = '/admin/configure';
141 if (!$this->container
->loginManager
->isLoggedIn()) {
142 return $this->redirect($response, '/login?returnurl=' . $this->getBasePath() . $route);
145 return $this->redirect($response, $route);
148 protected function getBasePath(): string
150 return $this->container
->basePath
?: '';