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 $route = '/admin/shaare';
43 $buildParameters = function (?array $parameters, bool $encode) {
45 $parameters = array_map('urlencode', $parameters);
48 return count($parameters) > 0 ? '?' . http_build_query($parameters) : '';
52 if (!$this->container
->loginManager
->isLoggedIn()) {
53 $parameters = $buildParameters($request->getQueryParams(), true);
54 return $this->redirect($response, '/login?returnurl='. $this->getBasePath() . $route . $parameters);
57 $parameters = $buildParameters($request->getQueryParams(), false);
59 return $this->redirect($response, $route . $parameters);
62 /** Legacy route: ?addlink= */
63 protected function addlink(Request
$request, Response
$response): Response
65 $route = '/admin/add-shaare';
67 if (!$this->container
->loginManager
->isLoggedIn()) {
68 return $this->redirect($response, '/login?returnurl=' . $this->getBasePath() . $route);
71 return $this->redirect($response, $route);
74 /** Legacy route: ?do=login */
75 protected function login(Request
$request, Response
$response): Response
77 $returnUrl = $request->getQueryParam('returnurl');
79 return $this->redirect($response, '/login' . ($returnUrl ? '?returnurl=' . $returnUrl : ''));
82 /** Legacy route: ?do=logout */
83 protected function logout(Request
$request, Response
$response): Response
85 return $this->redirect($response, '/admin/logout');
88 /** Legacy route: ?do=picwall */
89 protected function picwall(Request
$request, Response
$response): Response
91 return $this->redirect($response, '/picture-wall');
94 /** Legacy route: ?do=tagcloud */
95 protected function tagcloud(Request
$request, Response
$response): Response
97 return $this->redirect($response, '/tags/cloud');
100 /** Legacy route: ?do=taglist */
101 protected function taglist(Request
$request, Response
$response): Response
103 return $this->redirect($response, '/tags/list');
106 /** Legacy route: ?do=daily */
107 protected function daily(Request
$request, Response
$response): Response
109 $dayParam = !empty($request->getParam('day')) ? '?day=' . escape($request->getParam('day')) : '';
111 return $this->redirect($response, '/daily' . $dayParam);
114 /** Legacy route: ?do=rss */
115 protected function rss(Request
$request, Response
$response): Response
117 return $this->feed($request, $response, FeedBuilder
::$FEED_RSS);
120 /** Legacy route: ?do=atom */
121 protected function atom(Request
$request, Response
$response): Response
123 return $this->feed($request, $response, FeedBuilder
::$FEED_ATOM);
126 /** Legacy route: ?do=opensearch */
127 protected function opensearch(Request
$request, Response
$response): Response
129 return $this->redirect($response, '/open-search');
132 /** Legacy route: ?do=dailyrss */
133 protected function dailyrss(Request
$request, Response
$response): Response
135 return $this->redirect($response, '/daily-rss');
138 /** Legacy route: ?do=feed */
139 protected function feed(Request
$request, Response
$response, string $feedType): Response
141 $parameters = count($request->getQueryParams()) > 0 ? '?' . http_build_query($request->getQueryParams()) : '';
143 return $this->redirect($response, '/feed/' . $feedType . $parameters);
146 /** Legacy route: ?do=configure */
147 protected function configure(Request
$request, Response
$response): Response
149 $route = '/admin/configure';
151 if (!$this->container
->loginManager
->isLoggedIn()) {
152 return $this->redirect($response, '/login?returnurl=' . $this->getBasePath() . $route);
155 return $this->redirect($response, $route);
158 protected function getBasePath(): string
160 return $this->container
->basePath
?: '';