From a399004988a6e9a70488cc4fe61c32dc6a2d7a52 Mon Sep 17 00:00:00 2001 From: David Molineus Date: Tue, 27 Jan 2015 00:14:27 +0100 Subject: [PATCH] Add load callback. --- module/dca/tl_leaflet_marker.php | 8 +++-- runonce/migrate.php | 13 +++++--- src/Netzmacht/Contao/Leaflet/Dca/Marker.php | 35 ++++++++++++++++++++- 3 files changed, 48 insertions(+), 8 deletions(-) diff --git a/module/dca/tl_leaflet_marker.php b/module/dca/tl_leaflet_marker.php index a46d585..27803a6 100644 --- a/module/dca/tl_leaflet_marker.php +++ b/module/dca/tl_leaflet_marker.php @@ -179,6 +179,9 @@ $GLOBALS['TL_DCA']['tl_leaflet_marker'] = array array('Netzmacht\Contao\Leaflet\Dca\Leaflet', 'validateCoordinate'), array('Netzmacht\Contao\Leaflet\Dca\Marker', 'saveCoordinates') ), + 'load_callback' => array( + array('Netzmacht\Contao\Leaflet\Dca\Marker', 'loadCoordinates') + ), 'wizard' => array( array('Netzmacht\Contao\Leaflet\Dca\Leaflet', 'getGeocoder') ), @@ -188,7 +191,6 @@ $GLOBALS['TL_DCA']['tl_leaflet_marker'] = array 'nullIfEmpty' => true, 'doNotSaveEmpty' => true, ), - 'sql' => "varchar(255) NULL" ), 'latitude' => array ( @@ -196,7 +198,7 @@ $GLOBALS['TL_DCA']['tl_leaflet_marker'] = array 'exclude' => true, 'inputType' => 'text', 'eval' => array('mandatory' => false, 'maxlength' => 255, 'tl_class' => 'w50'), - 'sql' => "float NULL" + 'sql' => "DECIMAL(10, 8)" ), 'longitude' => array ( @@ -204,7 +206,7 @@ $GLOBALS['TL_DCA']['tl_leaflet_marker'] = array 'exclude' => true, 'inputType' => 'text', 'eval' => array('mandatory' => false, 'maxlength' => 255, 'tl_class' => 'w50'), - 'sql' => "float NULL" + 'sql' => "DECIMAL(11, 8)" ), 'altitude' => array ( diff --git a/runonce/migrate.php b/runonce/migrate.php index 4a91026..8b376f4 100644 --- a/runonce/migrate.php +++ b/runonce/migrate.php @@ -33,12 +33,17 @@ class migrate */ protected function createFields(\Database $database) { - foreach (array('latitude', 'longitude', 'altitude') as $field) { - if (!$database->fieldExists('latitude', 'tl_leaflet_marker')) { - $database->execute(sprintf('ALTER TABLE tl_leaflet_marker ADD %s float NULL;', $field)); - } + if (!$database->fieldExists('latitude', 'tl_leaflet_marker')) { + $database->execute('ALTER TABLE tl_leaflet_marker ADD latitude DECIMAL (10, 8) NULL;'); } + if (!$database->fieldExists('longitude', 'tl_leaflet_marker')) { + $database->execute('ALTER TABLE tl_leaflet_marker ADD longitude DECIMAL (11, 8) NULL;'); + } + + if (!$database->fieldExists('altitude', 'tl_leaflet_marker')) { + $database->execute('ALTER TABLE tl_leaflet_marker ADD altitude float NULL;'); + } } /** diff --git a/src/Netzmacht/Contao/Leaflet/Dca/Marker.php b/src/Netzmacht/Contao/Leaflet/Dca/Marker.php index cb11961..b613454 100644 --- a/src/Netzmacht/Contao/Leaflet/Dca/Marker.php +++ b/src/Netzmacht/Contao/Leaflet/Dca/Marker.php @@ -82,6 +82,39 @@ class Marker ->set($combined) ->execute($dataContainer->id); - return $value; + return null; + } + + /** + * Load the coordinates. + * + * @param string $value The raw data. + * @param \DataContainer $dataContainer The data container driver. + * + * @return string + */ + public function loadCoordinates($value, $dataContainer) + { + $result = \Database::getInstance() + ->prepare('SELECT latitude, longitude, altitude FROM tl_leaflet_marker WHERE id=?') + ->execute($dataContainer->id); + + if ($result->numRows) { + $buffer = $result->latitude; + + if ($buffer && $result->longitude) { + $buffer .= ',' . $result->longitude; + } else { + return $buffer; + } + + if ($buffer && $result->altitude) { + $buffer .= ',' . $result->longitude; + } + + return $buffer; + } + + return ''; } }