Source of file AbstractGISWebServiceController.php
Size: 2,417 Bytes - Last Modified: 2021-12-23T10:37:40+00:00
/var/www/docs.ssmods.com/process/src/src/Control/AbstractGISWebServiceController.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 | <?php namespace Smindel\GIS\Control; use SilverStripe\Control\Controller; use SilverStripe\Core\Config\Config; use SilverStripe\ORM\DataObject; use SilverStripe\Security\Permission; use Smindel\GIS\GIS; use Exception; use SilverStripe\Control\Director; class AbstractGISWebServiceController extends Controller { public function getModel($request) { $request = $request ?: $this->getRequest(); $class = str_replace('-', '\\', $request->param('Model')); return $class; } public function getConfig($model) { $defaults = Config::inst()->get(static::class); $modelConfig = Config::inst()->get($model, strtolower(array_reverse(explode('\\', static::class))[0])); if (!$modelConfig) { return false; } $defaults['record_provider'] = null; $defaults['access_control_allow_origin'] = Director::absoluteURL('/'); $defaults['geometry_field'] = GIS::of($model); $defaults['searchable_fields'] = singleton($model)->searchableFields(); return is_array($modelConfig) ? array_merge($defaults, $modelConfig) : $defaults; } public function getRecords($request) { $model = $this->getModel($request); $config = $this->getConfig($model); if (!is_a($model, DataObject::class, true)) { throw new Exception(sprintf('%s not found', $model), 404); } if (!$config) { throw new Exception(sprintf('%s not configured for %s', static::class, $model), 404); } if (isset($config['code']) && !Permission::check($config['code'])) { throw new Exception(sprintf('You are not allowed to access %s through %s', $model, static::class), 403); } $skip_filter = false; $list = is_callable($config['record_provider']) ? \Closure::fromCallable($config['record_provider'])($request, $skip_filter) : $model::get(); if (!$skip_filter) { $queryParams = array_intersect_ukey( $request->requestVars(), $config['searchable_fields'], function ($a, $b) { $a = explode(':', $a)[0]; $b = explode(':', $b)[0]; return strcmp($a, $b); } ); $list = $list->filter($queryParams); } return $list; } } |