1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- <?php
-
- namespace Tqdev\PhpCrudApi\Controller;
-
- use Psr\Http\Message\ResponseInterface;
- use Psr\Http\Message\ServerRequestInterface;
- use Tqdev\PhpCrudApi\GeoJson\GeoJsonService;
- use Tqdev\PhpCrudApi\Middleware\Router\Router;
- use Tqdev\PhpCrudApi\Record\ErrorCode;
- use Tqdev\PhpCrudApi\RequestUtils;
-
- class GeoJsonController
- {
- private $service;
- private $responder;
- private $geoJsonConverter;
-
- public function __construct(Router $router, Responder $responder, GeoJsonService $service)
- {
- $router->register('GET', '/geojson/*', array($this, '_list'));
- $router->register('GET', '/geojson/*/*', array($this, 'read'));
- $this->service = $service;
- $this->responder = $responder;
- }
-
- public function _list(ServerRequestInterface $request): ResponseInterface
- {
- $table = RequestUtils::getPathSegment($request, 2);
- $params = RequestUtils::getParams($request);
- if (!$this->service->hasTable($table)) {
- return $this->responder->error(ErrorCode::TABLE_NOT_FOUND, $table);
- }
- return $this->responder->success($this->service->_list($table, $params));
- }
-
- public function read(ServerRequestInterface $request): ResponseInterface
- {
- $table = RequestUtils::getPathSegment($request, 2);
- if (!$this->service->hasTable($table)) {
- return $this->responder->error(ErrorCode::TABLE_NOT_FOUND, $table);
- }
- if ($this->service->getType($table) != 'table') {
- return $this->responder->error(ErrorCode::OPERATION_NOT_SUPPORTED, __FUNCTION__);
- }
- $id = RequestUtils::getPathSegment($request, 3);
- $params = RequestUtils::getParams($request);
- if (strpos($id, ',') !== false) {
- $ids = explode(',', $id);
- $result = (object) array('type' => 'FeatureCollection', 'features' => array());
- for ($i = 0; $i < count($ids); $i++) {
- array_push($result->features, $this->service->read($table, $ids[$i], $params));
- }
- return $this->responder->success($result);
- } else {
- $response = $this->service->read($table, $id, $params);
- if ($response === null) {
- return $this->responder->error(ErrorCode::RECORD_NOT_FOUND, $id);
- }
- return $this->responder->success($response);
- }
- }
- }
|