diff --git a/CHANGELOG.md b/CHANGELOG.md index 0604ec5..2dc5870 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,15 +2,19 @@ ## 01-07-2024 2.3.0 -- Widget: Select durch eine List-group ersetzt. - - -## 01-07-2024 2.2.1 - +- Anpassungen für YForm ab 4.2.1 + - Im Kartensatz-Formular erfolgt die Layerauswahl mit einem modifizierten Widget + (Select durch eine List-group ersetzt) Da sich mit YForm 4.2 der Aufbau des + Original-Widgets geändert hat, muss die Modofikation anders erfolgen. (#159) + - Die Funktionsweise der Spracheingabe in einem feld vom Typ be_table wurde + angepasst, da be_table seit 4.2.1 intern Daten anders vearbeitet. (#160) + - Beide Änderungen sind weitgehed abwärtskompatibel zur YForm-Mindestversion 4.0 + (ausgenommen generiertes HTML). + - BugFix - - JS: Die Verlinkung der internen Geolocation -Strukturen im Karten-Container + - JS: Die Verlinkung der internen Geolocation-Strukturen im Karten-Container erfolgte zu spät. `map._conainer.__rmMap` ist nun bei der Tool-initialisierung - wie geplant verfügbar. + wie geplant früher verfügbar. (#158) ## 26-02-2024 2.2.0 diff --git a/lib/Layer.php b/lib/Layer.php index eb4d9c4..ad9afb2 100644 --- a/lib/Layer.php +++ b/lib/Layer.php @@ -45,8 +45,8 @@ use rex_extension; use rex_extension_point; use rex_file; -use rex_logger; use rex_i18n; +use rex_logger; use rex_path; use rex_request; use rex_response; @@ -58,7 +58,6 @@ use rex_yform_manager_dataset; use rex_yform_manager_query; use rex_yform_validate_customfunction; - use rex_yform_value_abstract; use function count; @@ -66,6 +65,15 @@ use function is_string; use function strlen; +use const CURLINFO_CONTENT_TYPE; +use const CURLINFO_RESPONSE_CODE; +use const CURLOPT_FOLLOWLOCATION; +use const CURLOPT_HEADER; +use const CURLOPT_PROXY; +use const CURLOPT_RETURNTRANSFER; +use const E_WARNING; +use const PATHINFO_EXTENSION; + /** * Mittels parent::__get bereitgestellte Daten. * @@ -125,7 +133,7 @@ public function getForm(): rex_yform if ('lang' === $fe[1]) { // Auswahlfähige Sprachcodes ermitteln - $fe[3] = 'choice|lang|Sprache|{'.implode(',', Tools::getLocales()).'}|,text|label|Bezeichnung|'; + $fe[3] = 'choice|lang|Sprache|{' . implode(',', Tools::getLocales()) . '}|,text|label|Bezeichnung|'; continue; } if ('ttl' === $fe[1] && '' === trim($fe[3])) { @@ -160,7 +168,7 @@ public function delete(): bool { $sql = rex_sql::factory(); $table = Mapset::table(); - $qry = 'SELECT `id`, `title` FROM `'.$table->getTableName().'` WHERE FIND_IN_SET(:id,`layer`)'; + $qry = 'SELECT `id`, `title` FROM `' . $table->getTableName() . '` WHERE FIND_IN_SET(:id,`layer`)'; /** * STAN: Possible SQL-injection in expression $table->getTableName(). * False positive: der TableName kommt aus rex_yform_manager_dataset und ist m.E. safe. @@ -179,9 +187,9 @@ public function delete(): bool /** @var string $v */ foreach ($data as $k => &$v) { $params['data_id'] = $k; - $v = '
  • '.$v.'
  • '; + $v = '
  • ' . $v . '
  • '; } - $result = rex_i18n::msg('geolocation_layer_in_use', $this->name) .''; + $result = rex_i18n::msg('geolocation_layer_in_use', $this->name) . ''; rex_extension::register('YFORM_DATA_LIST', function ($ep) { // nur abarbeiten wenn es um diese Instanz geht @@ -224,7 +232,7 @@ public function save(): bool * Da das Formular sichert per db_action, nicht via dataset::save()! * Daher hier den Cache per EP löschen */ - public function executeForm(rex_yform $yform, callable $afterFieldsExecuted = null): string + public function executeForm(rex_yform $yform, ?callable $afterFieldsExecuted = null): string { rex_extension::register('YFORM_DATA_UPDATED', function (rex_extension_point $ep) { // nur abarbeiten wenn es um diese Instanz geht @@ -310,18 +318,30 @@ public static function verifyUrl($field, $value, $return, $self, $elements): boo * - Array mit einem Element: Instanz des Feldes 'lang' * * @param string $field - * @param string $value + * @param string|array> $value * @param string $return * @param rex_yform_validate_customfunction $self * @param array $elements */ public static function verifyLang($field, $value, $return, $self, $elements): bool { - if ('' !== trim($value)) { + /** + * Kompatibilität zu YForm < 4.2.0 + * 4.2.0 lieber nicht benutzen! + * TODO: rauswerfen wenn irgendwann mal die Mindestversion YFORM > 4.2. ist. + */ + if (is_string($value)) { + $value = trim($value); + if ('' === $value) { + return true; + } $value = json_decode($value, true); - return 0 === count($value) || count(array_unique(array_column($value, '0'))) !== count($value); } - return true; + + /** + * ab YForm 4.2.1 sollte das hier funktionieren. + */ + return 0 === count($value) || count(array_unique(array_column($value, '0'))) !== count($value); } // Listenbezogen @@ -372,11 +392,11 @@ public static function YFORM_DATA_LIST_ACTION_BUTTONS(rex_extension_point $ep) 'url' => $href, 'content' => $label, 'attributes' => [ - 'onclick' => 'return confirm(\''.$confirm.'\')', + 'onclick' => 'return confirm(\'' . $confirm . '\')', ], ]; } else { - $buttons['geolocationClearCache'] = ''.$label.''; + $buttons['geolocationClearCache'] = '' . $label . ''; } $ep->setSubject($buttons); } @@ -461,7 +481,7 @@ public static function sendTile(int $layerId): void } // prepare targetCacheDir-Name - $cacheDir = rex_path::addonCache(ADDON, $layer->getId().'/'); + $cacheDir = rex_path::addonCache(ADDON, $layer->getId() . '/'); $cacheFileName = null; $contentType = null; $ttl = $layer->ttl * 60; @@ -470,7 +490,7 @@ public static function sendTile(int $layerId): void if (0 < $ttl) { $fileNameElements['{suffix}'] = '*'; $fileName = str_replace(array_keys($fileNameElements), $fileNameElements, self::FILE_PATTERN); - $cacheFileName = $cache->findCachedFile($cacheDir.$fileName, $ttl); + $cacheFileName = $cache->findCachedFile($cacheDir . $fileName, $ttl); // Tile-File exists; send to the requestor if (null !== $cacheFileName) { @@ -506,7 +526,7 @@ public static function sendTile(int $layerId): void // no reply at all, abort completely if ('0' === $returnCode) { $msg = sprintf('Geolocation: Tile-Request failed (cUrl Error %d / %s)', curl_errno($ch), curl_error($ch)); - rex_logger::logError(E_WARNING, $msg, __FILE__, __LINE__ - 8, rex_context::fromGet()->getUrl([], false).' ➜ '.$url); + rex_logger::logError(E_WARNING, $msg, __FILE__, __LINE__ - 8, rex_context::fromGet()->getUrl([], false) . ' ➜ ' . $url); Tools::sendInternalError(); }