diff options
author | ArthurHoaro <arthur@hoa.ro> | 2020-10-13 12:05:08 +0200 |
---|---|---|
committer | ArthurHoaro <arthur@hoa.ro> | 2020-10-13 12:05:08 +0200 |
commit | b6f678a5a1d15acf284ebcec16c905e976671ce1 (patch) | |
tree | 33c7da831482ed79c44896ef19c73c72ada84f2e /application/legacy/LegacyController.php | |
parent | b14687036b9b800681197f51fdc47e62f0c88e2e (diff) | |
parent | 1c1520b6b98ab20201bfe15577782a52320339df (diff) | |
download | Shaarli-b6f678a5a1d15acf284ebcec16c905e976671ce1.tar.gz Shaarli-b6f678a5a1d15acf284ebcec16c905e976671ce1.tar.zst Shaarli-b6f678a5a1d15acf284ebcec16c905e976671ce1.zip |
Merge branch 'v0.12' into latest
Diffstat (limited to 'application/legacy/LegacyController.php')
-rw-r--r-- | application/legacy/LegacyController.php | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/application/legacy/LegacyController.php b/application/legacy/LegacyController.php new file mode 100644 index 00000000..826604e7 --- /dev/null +++ b/application/legacy/LegacyController.php | |||
@@ -0,0 +1,162 @@ | |||
1 | <?php | ||
2 | |||
3 | declare(strict_types=1); | ||
4 | |||
5 | namespace Shaarli\Legacy; | ||
6 | |||
7 | use Shaarli\Feed\FeedBuilder; | ||
8 | use Shaarli\Front\Controller\Visitor\ShaarliVisitorController; | ||
9 | use Slim\Http\Request; | ||
10 | use Slim\Http\Response; | ||
11 | |||
12 | /** | ||
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. | ||
16 | * | ||
17 | * @deprecated | ||
18 | */ | ||
19 | class LegacyController extends ShaarliVisitorController | ||
20 | { | ||
21 | /** @var string[] Both `?post` and `?addlink` do not use `?do=` format. */ | ||
22 | public const LEGACY_GET_ROUTES = [ | ||
23 | 'post', | ||
24 | 'addlink', | ||
25 | ]; | ||
26 | |||
27 | /** | ||
28 | * This method will call `$action` method, which will redirect to corresponding Slim route. | ||
29 | */ | ||
30 | public function process(Request $request, Response $response, string $action): Response | ||
31 | { | ||
32 | if (!method_exists($this, $action)) { | ||
33 | throw new UnknowLegacyRouteException(); | ||
34 | } | ||
35 | |||
36 | return $this->{$action}($request, $response); | ||
37 | } | ||
38 | |||
39 | /** Legacy route: ?post= */ | ||
40 | public function post(Request $request, Response $response): Response | ||
41 | { | ||
42 | $route = '/admin/shaare'; | ||
43 | $buildParameters = function (?array $parameters, bool $encode) { | ||
44 | if ($encode) { | ||
45 | $parameters = array_map('urlencode', $parameters); | ||
46 | } | ||
47 | |||
48 | return count($parameters) > 0 ? '?' . http_build_query($parameters) : ''; | ||
49 | }; | ||
50 | |||
51 | |||
52 | if (!$this->container->loginManager->isLoggedIn()) { | ||
53 | $parameters = $buildParameters($request->getQueryParams(), true); | ||
54 | return $this->redirect($response, '/login?returnurl='. $this->getBasePath() . $route . $parameters); | ||
55 | } | ||
56 | |||
57 | $parameters = $buildParameters($request->getQueryParams(), false); | ||
58 | |||
59 | return $this->redirect($response, $route . $parameters); | ||
60 | } | ||
61 | |||
62 | /** Legacy route: ?addlink= */ | ||
63 | protected function addlink(Request $request, Response $response): Response | ||
64 | { | ||
65 | $route = '/admin/add-shaare'; | ||
66 | |||
67 | if (!$this->container->loginManager->isLoggedIn()) { | ||
68 | return $this->redirect($response, '/login?returnurl=' . $this->getBasePath() . $route); | ||
69 | } | ||
70 | |||
71 | return $this->redirect($response, $route); | ||
72 | } | ||
73 | |||
74 | /** Legacy route: ?do=login */ | ||
75 | protected function login(Request $request, Response $response): Response | ||
76 | { | ||
77 | $returnUrl = $request->getQueryParam('returnurl'); | ||
78 | |||
79 | return $this->redirect($response, '/login' . ($returnUrl ? '?returnurl=' . $returnUrl : '')); | ||
80 | } | ||
81 | |||
82 | /** Legacy route: ?do=logout */ | ||
83 | protected function logout(Request $request, Response $response): Response | ||
84 | { | ||
85 | return $this->redirect($response, '/admin/logout'); | ||
86 | } | ||
87 | |||
88 | /** Legacy route: ?do=picwall */ | ||
89 | protected function picwall(Request $request, Response $response): Response | ||
90 | { | ||
91 | return $this->redirect($response, '/picture-wall'); | ||
92 | } | ||
93 | |||
94 | /** Legacy route: ?do=tagcloud */ | ||
95 | protected function tagcloud(Request $request, Response $response): Response | ||
96 | { | ||
97 | return $this->redirect($response, '/tags/cloud'); | ||
98 | } | ||
99 | |||
100 | /** Legacy route: ?do=taglist */ | ||
101 | protected function taglist(Request $request, Response $response): Response | ||
102 | { | ||
103 | return $this->redirect($response, '/tags/list'); | ||
104 | } | ||
105 | |||
106 | /** Legacy route: ?do=daily */ | ||
107 | protected function daily(Request $request, Response $response): Response | ||
108 | { | ||
109 | $dayParam = !empty($request->getParam('day')) ? '?day=' . escape($request->getParam('day')) : ''; | ||
110 | |||
111 | return $this->redirect($response, '/daily' . $dayParam); | ||
112 | } | ||
113 | |||
114 | /** Legacy route: ?do=rss */ | ||
115 | protected function rss(Request $request, Response $response): Response | ||
116 | { | ||
117 | return $this->feed($request, $response, FeedBuilder::$FEED_RSS); | ||
118 | } | ||
119 | |||
120 | /** Legacy route: ?do=atom */ | ||
121 | protected function atom(Request $request, Response $response): Response | ||
122 | { | ||
123 | return $this->feed($request, $response, FeedBuilder::$FEED_ATOM); | ||
124 | } | ||
125 | |||
126 | /** Legacy route: ?do=opensearch */ | ||
127 | protected function opensearch(Request $request, Response $response): Response | ||
128 | { | ||
129 | return $this->redirect($response, '/open-search'); | ||
130 | } | ||
131 | |||
132 | /** Legacy route: ?do=dailyrss */ | ||
133 | protected function dailyrss(Request $request, Response $response): Response | ||
134 | { | ||
135 | return $this->redirect($response, '/daily-rss'); | ||
136 | } | ||
137 | |||
138 | /** Legacy route: ?do=feed */ | ||
139 | protected function feed(Request $request, Response $response, string $feedType): Response | ||
140 | { | ||
141 | $parameters = count($request->getQueryParams()) > 0 ? '?' . http_build_query($request->getQueryParams()) : ''; | ||
142 | |||
143 | return $this->redirect($response, '/feed/' . $feedType . $parameters); | ||
144 | } | ||
145 | |||
146 | /** Legacy route: ?do=configure */ | ||
147 | protected function configure(Request $request, Response $response): Response | ||
148 | { | ||
149 | $route = '/admin/configure'; | ||
150 | |||
151 | if (!$this->container->loginManager->isLoggedIn()) { | ||
152 | return $this->redirect($response, '/login?returnurl=' . $this->getBasePath() . $route); | ||
153 | } | ||
154 | |||
155 | return $this->redirect($response, $route); | ||
156 | } | ||
157 | |||
158 | protected function getBasePath(): string | ||
159 | { | ||
160 | return $this->container->basePath ?: ''; | ||
161 | } | ||
162 | } | ||