forked from Snck3rs/contao-leaflet-maps
Detect if empty values are supported.
This commit is contained in:
@@ -12,6 +12,8 @@
|
|||||||
|
|
||||||
namespace Netzmacht\Contao\Leaflet\Listener\Dca;
|
namespace Netzmacht\Contao\Leaflet\Listener\Dca;
|
||||||
|
|
||||||
|
use Contao\DataContainer;
|
||||||
|
use Netzmacht\Contao\Toolkit\Dca\Manager;
|
||||||
use Netzmacht\LeafletPHP\Value\LatLng;
|
use Netzmacht\LeafletPHP\Value\LatLng;
|
||||||
use Symfony\Component\Translation\TranslatorInterface as Translator;
|
use Symfony\Component\Translation\TranslatorInterface as Translator;
|
||||||
|
|
||||||
@@ -29,26 +31,41 @@ class Validator
|
|||||||
*/
|
*/
|
||||||
private $translator;
|
private $translator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data container manager.
|
||||||
|
*
|
||||||
|
* @var Manager
|
||||||
|
*/
|
||||||
|
private $dcaManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validator constructor.
|
* Validator constructor.
|
||||||
*
|
*
|
||||||
|
* @param Manager $dcaManager Data container manager.
|
||||||
* @param Translator $translator Translator.
|
* @param Translator $translator Translator.
|
||||||
*/
|
*/
|
||||||
public function __construct(Translator $translator)
|
public function __construct(Manager $dcaManager, Translator $translator)
|
||||||
{
|
{
|
||||||
$this->translator = $translator;
|
$this->translator = $translator;
|
||||||
|
$this->dcaManager = $dcaManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validate coordinates.
|
* Validate coordinates.
|
||||||
*
|
*
|
||||||
* @param mixed $value Given value.
|
* @param mixed $value Given value.
|
||||||
|
* @param DataContainer $dataContainer Data container driver.
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return mixed
|
||||||
* @throws \InvalidArgumentException When invalid coordinates give.
|
*
|
||||||
|
* @throws \InvalidArgumentException When invalid coordinates given.
|
||||||
*/
|
*/
|
||||||
public function validateCoordinates($value)
|
public function validateCoordinates($value, $dataContainer)
|
||||||
{
|
{
|
||||||
|
if (!$value && !$this->isRequired($dataContainer)) {
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
LatLng::fromString($value);
|
LatLng::fromString($value);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
@@ -66,10 +83,13 @@ class Validator
|
|||||||
* Validate multiple coordinates.
|
* Validate multiple coordinates.
|
||||||
*
|
*
|
||||||
* @param mixed $values Given value.
|
* @param mixed $values Given value.
|
||||||
|
* @param DataContainer $dataContainer Data container driver.
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return mixed
|
||||||
|
*
|
||||||
|
* @throws \InvalidArgumentException When invalid coordinates given.
|
||||||
*/
|
*/
|
||||||
public function validateMultipleCoordinates($values)
|
public function validateMultipleCoordinates($values, $dataContainer)
|
||||||
{
|
{
|
||||||
if (!is_array($values)) {
|
if (!is_array($values)) {
|
||||||
$lines = explode("\n", $values);
|
$lines = explode("\n", $values);
|
||||||
@@ -78,7 +98,7 @@ class Validator
|
|||||||
}
|
}
|
||||||
|
|
||||||
foreach ($lines as $coordinate) {
|
foreach ($lines as $coordinate) {
|
||||||
$this->validateCoordinates($coordinate);
|
$this->validateCoordinates($coordinate, $dataContainer);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $values;
|
return $values;
|
||||||
@@ -88,14 +108,17 @@ class Validator
|
|||||||
* Validate multiple coordinate sets.
|
* Validate multiple coordinate sets.
|
||||||
*
|
*
|
||||||
* @param mixed $values Given value.
|
* @param mixed $values Given value.
|
||||||
|
* @param DataContainer $dataContainer Data container driver.
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return mixed
|
||||||
|
*
|
||||||
|
* @throws \InvalidArgumentException When invalid coordinates given.
|
||||||
*/
|
*/
|
||||||
public function validateMultipleCoordinateSets($values)
|
public function validateMultipleCoordinateSets($values, $dataContainer)
|
||||||
{
|
{
|
||||||
$sets = deserialize($values, true);
|
$sets = deserialize($values, true);
|
||||||
foreach ($sets as $lines) {
|
foreach ($sets as $lines) {
|
||||||
$this->validateMultipleCoordinates($lines);
|
$this->validateMultipleCoordinates($lines, $dataContainer);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $values;
|
return $values;
|
||||||
@@ -119,4 +142,22 @@ class Validator
|
|||||||
|
|
||||||
return $value;
|
return $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if value is required.
|
||||||
|
*
|
||||||
|
* @param DataContainer $dataContainer Data container driver.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
private function isRequired($dataContainer): bool
|
||||||
|
{
|
||||||
|
$definition = $this->dcaManager->getDefinition($dataContainer->table);
|
||||||
|
|
||||||
|
if ($definition->get(['fields', $dataContainer->field, 'eval', 'mandatory'])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ services:
|
|||||||
netzmacht.contao_leaflet_maps.listeners.dca.validator:
|
netzmacht.contao_leaflet_maps.listeners.dca.validator:
|
||||||
class: Netzmacht\Contao\Leaflet\Listener\Dca\Validator
|
class: Netzmacht\Contao\Leaflet\Listener\Dca\Validator
|
||||||
arguments:
|
arguments:
|
||||||
|
- '@netzmacht.contao_toolkit.dca.manager'
|
||||||
- '@translator'
|
- '@translator'
|
||||||
|
|
||||||
netzmacht.contao_leaflet_maps.listeners.dca.frontend_integration:
|
netzmacht.contao_leaflet_maps.listeners.dca.frontend_integration:
|
||||||
|
|||||||
Reference in New Issue
Block a user