Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | n/a |
0 / 0 |
n/a |
0 / 0 |
CRAP | n/a |
0 / 0 |
|||
BackendController | n/a |
0 / 0 |
n/a |
0 / 0 |
29 | n/a |
0 / 0 |
|||
viewApplicationList | n/a |
0 / 0 |
n/a |
0 / 0 |
3 | |||||
viewApplicationCreate | n/a |
0 / 0 |
n/a |
0 / 0 |
1 | |||||
viewPageList | n/a |
0 / 0 |
n/a |
0 / 0 |
1 | |||||
viewPage | n/a |
0 / 0 |
n/a |
0 / 0 |
1 | |||||
viewApplicationPosts | n/a |
0 / 0 |
n/a |
0 / 0 |
1 | |||||
viewApplicationFile | n/a |
0 / 0 |
n/a |
0 / 0 |
22 |
1 | <?php |
2 | /** |
3 | * Jingga |
4 | * |
5 | * PHP Version 8.1 |
6 | * |
7 | * @package Modules\CMS |
8 | * @copyright Dennis Eichhorn |
9 | * @license OMS License 2.0 |
10 | * @version 1.0.0 |
11 | * @link https://jingga.app |
12 | */ |
13 | declare(strict_types=1); |
14 | |
15 | namespace Modules\CMS\Controller; |
16 | |
17 | use Modules\Admin\Models\AppMapper; |
18 | use Modules\CMS\Models\PageMapper; |
19 | use phpOMS\Application\ApplicationType; |
20 | use phpOMS\Contract\RenderableInterface; |
21 | use phpOMS\Message\Http\RequestStatusCode; |
22 | use phpOMS\Message\RequestAbstract; |
23 | use phpOMS\Message\ResponseAbstract; |
24 | use phpOMS\Security\Guard; |
25 | use phpOMS\Views\View; |
26 | |
27 | /** |
28 | * CMS class. |
29 | * |
30 | * @package Modules\CMS |
31 | * @license OMS License 2.0 |
32 | * @link https://jingga.app |
33 | * @since 1.0.0 |
34 | * @codeCoverageIgnore |
35 | */ |
36 | final class BackendController extends Controller |
37 | { |
38 | /** |
39 | * Routing end-point for application behaviour. |
40 | * |
41 | * @param RequestAbstract $request Request |
42 | * @param ResponseAbstract $response Response |
43 | * @param array $data Generic data |
44 | * |
45 | * @return RenderableInterface |
46 | * |
47 | * @since 1.0.0 |
48 | */ |
49 | public function viewApplicationList(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface |
50 | { |
51 | $view = new View($this->app->l11nManager, $request, $response); |
52 | |
53 | $view->setTemplate('/Modules/CMS/Theme/Backend/application-list'); |
54 | $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1007802001, $request, $response); |
55 | |
56 | if ($request->getData('ptype') === 'p') { |
57 | $view->data['applications'] = AppMapper::getAll()->where('type', ApplicationType::WEB)->where('id', $request->getDataInt('id') ?? 0, '<')->limit(25)->execute(); |
58 | } elseif ($request->getData('ptype') === 'n') { |
59 | $view->data['applications'] = AppMapper::getAll()->where('type', ApplicationType::WEB)->where('id', $request->getDataInt('id') ?? 0, '>')->limit(25)->execute(); |
60 | } else { |
61 | $view->data['applications'] = AppMapper::getAll()->where('type', ApplicationType::WEB)->where('id', 0, '>')->limit(25)->execute(); |
62 | } |
63 | |
64 | return $view; |
65 | } |
66 | |
67 | /** |
68 | * Routing end-point for application behaviour. |
69 | * |
70 | * @param RequestAbstract $request Request |
71 | * @param ResponseAbstract $response Response |
72 | * @param array $data Generic data |
73 | * |
74 | * @return RenderableInterface |
75 | * |
76 | * @since 1.0.0 |
77 | */ |
78 | public function viewApplicationCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface |
79 | { |
80 | $view = new View($this->app->l11nManager, $request, $response); |
81 | |
82 | $view->setTemplate('/Modules/CMS/Theme/Backend/application-create'); |
83 | $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1007802001, $request, $response); |
84 | |
85 | $editor = new \Modules\Editor\Theme\Backend\Components\Editor\BaseView($this->app->l11nManager, $request, $response); |
86 | $view->data['editor'] = $editor; |
87 | |
88 | return $view; |
89 | } |
90 | |
91 | /** |
92 | * Routing end-point for application behaviour. |
93 | * |
94 | * @param RequestAbstract $request Request |
95 | * @param ResponseAbstract $response Response |
96 | * @param array $data Generic data |
97 | * |
98 | * @return RenderableInterface |
99 | * |
100 | * @since 1.0.0 |
101 | */ |
102 | public function viewPageList(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface |
103 | { |
104 | $view = new View($this->app->l11nManager, $request, $response); |
105 | |
106 | $view->setTemplate('/Modules/CMS/Theme/Backend/application-page-list'); |
107 | $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1007802101, $request, $response); |
108 | |
109 | $pages = PageMapper::getAll() |
110 | ->where('app', $request->getData('app')) |
111 | ->execute(); |
112 | |
113 | $view->data['list'] = $pages; |
114 | |
115 | return $view; |
116 | } |
117 | |
118 | /** |
119 | * Routing end-point for application behaviour. |
120 | * |
121 | * @param RequestAbstract $request Request |
122 | * @param ResponseAbstract $response Response |
123 | * @param array $data Generic data |
124 | * |
125 | * @return RenderableInterface |
126 | * |
127 | * @since 1.0.0 |
128 | * @codeCoverageIgnore |
129 | */ |
130 | public function viewPage(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface |
131 | { |
132 | $view = new View($this->app->l11nManager, $request, $response); |
133 | |
134 | $view->setTemplate('/Modules/CMS/Theme/Backend/application-page'); |
135 | $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1007802101, $request, $response); |
136 | |
137 | $editor = new \Modules\Editor\Theme\Backend\Components\Editor\BaseView($this->app->l11nManager, $request, $response); |
138 | $view->data['editor'] = $editor; |
139 | |
140 | $page = PageMapper::get() |
141 | ->with('l11n') |
142 | ->where('id', (int) $request->getData('id')) |
143 | ->execute(); |
144 | |
145 | $view->data['page'] = $page; |
146 | |
147 | return $view; |
148 | } |
149 | |
150 | /** |
151 | * Routing end-point for application behaviour. |
152 | * |
153 | * @param RequestAbstract $request Request |
154 | * @param ResponseAbstract $response Response |
155 | * @param array $data Generic data |
156 | * |
157 | * @return RenderableInterface |
158 | * |
159 | * @since 1.0.0 |
160 | */ |
161 | public function viewApplicationPosts(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface |
162 | { |
163 | $view = new View($this->app->l11nManager, $request, $response); |
164 | |
165 | $view->setTemplate('/Modules/CMS/Theme/Backend/application-posts'); |
166 | $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1007802101, $request, $response); |
167 | |
168 | return $view; |
169 | } |
170 | |
171 | /** |
172 | * Routing end-point for application behaviour. |
173 | * |
174 | * @param RequestAbstract $request Request |
175 | * @param ResponseAbstract $response Response |
176 | * @param array $data Generic data |
177 | * |
178 | * @return RenderableInterface |
179 | * |
180 | * @since 1.0.0 |
181 | */ |
182 | public function viewApplicationFile(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface |
183 | { |
184 | $view = new View($this->app->l11nManager, $request, $response); |
185 | |
186 | $view->setTemplate('/Modules/CMS/Theme/Backend/application-file'); |
187 | $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1007802101, $request, $response); |
188 | |
189 | /** @var \Modules\Admin\Models\App $app */ |
190 | $app = AppMapper::get()->where('type', ApplicationType::WEB)->where('id', $request->getData('id'))->execute(); |
191 | $view->data['app'] = $app; |
192 | |
193 | $basePath = \realpath(__DIR__ . '/../../../Web/'); |
194 | $path = \realpath($basePath . '/' . \ucfirst(\strtolower($app->name)) . '/' . ($request->getDataString('file') ?? '')); |
195 | |
196 | if ($path === false || \stripos($path, $basePath . '/') !== 0 || $basePath === false) { |
197 | $path = \realpath($basePath . '/' . \ucfirst(\strtolower($app->name))); |
198 | } |
199 | |
200 | if ($path === false || $basePath === false || !Guard::isSafePath($path)) { |
201 | $view->setTemplate('/Web/Backend/Error/404'); |
202 | $response->header->status = RequestStatusCode::R_404; |
203 | |
204 | return $view; |
205 | } |
206 | |
207 | if (!\is_dir($path)) { |
208 | $path = \dirname($path); |
209 | } |
210 | |
211 | $tempList = ($dirs = \scandir($path)) === false ? [] : $dirs; |
212 | |
213 | $temp1 = []; |
214 | $temp2 = []; |
215 | $fileList = []; |
216 | |
217 | foreach ($tempList as $element) { |
218 | if ($element === '.' || $element === '..') { |
219 | continue; |
220 | } elseif (\is_file($path . '/' . $element)) { |
221 | $temp2[] = ['name' => $element, 'type' => 0]; |
222 | } else { |
223 | $temp1[] = ['name' => $element, 'type' => 1]; |
224 | } |
225 | } |
226 | |
227 | $file = \realpath($basePath . '/' . \ucfirst(\strtolower($app->name)) . '/' . ($request->getDataString('file') ?? '')); |
228 | $parent = $file === false || \is_dir($file) ? $request->getDataString('file') ?? '' : \dirname($request->getDataString('file') ?? ''); |
229 | |
230 | if ($file === false || !\is_file($file) || \stripos($file, $basePath) !== 0) { |
231 | $file = empty($temp2) ? false : \realpath(\rtrim($path, '/') . '/' . $temp2[0]['name']); |
232 | } |
233 | |
234 | $fileList = \array_merge($temp1, $temp2); |
235 | |
236 | if ($file === false || !Guard::isSafePath($file)) { |
237 | $view->setTemplate('/Web/Backend/Error/404'); |
238 | $response->header->status = RequestStatusCode::R_404; |
239 | |
240 | return $view; |
241 | } |
242 | |
243 | $view->data['content'] = $file === false ? '' : \file_get_contents($file); |
244 | $view->data['parent'] = $parent; |
245 | $view->data['list'] = $fileList; |
246 | |
247 | return $view; |
248 | } |
249 | } |