Skip to content

Commit

Permalink
be_table-Problem adaptiert (#160)
Browse files Browse the repository at this point in the history
* be_table ab 4.2.1 adaptiert

* be_table-Verifizierung angepasst
  • Loading branch information
christophboecker authored Jul 1, 2024
1 parent e050e80 commit 03f4a3e
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 23 deletions.
18 changes: 11 additions & 7 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
52 changes: 36 additions & 16 deletions lib/Layer.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -58,14 +58,22 @@
use rex_yform_manager_dataset;
use rex_yform_manager_query;
use rex_yform_validate_customfunction;

use rex_yform_value_abstract;

use function count;
use function is_bool;
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.
*
Expand Down Expand Up @@ -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])) {
Expand Down Expand Up @@ -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.
Expand All @@ -179,9 +187,9 @@ public function delete(): bool
/** @var string $v */
foreach ($data as $k => &$v) {
$params['data_id'] = $k;
$v = '<li><a href="'.rex_url::backendController($params).'" target="_blank">'.$v.'</li>';
$v = '<li><a href="' . rex_url::backendController($params) . '" target="_blank">' . $v . '</li>';
}
$result = rex_i18n::msg('geolocation_layer_in_use', $this->name) .'<ul>'.implode('', $data).'</ul>';
$result = rex_i18n::msg('geolocation_layer_in_use', $this->name) . '<ul>' . implode('', $data) . '</ul>';

rex_extension::register('YFORM_DATA_LIST', function ($ep) {
// nur abarbeiten wenn es um diese Instanz geht
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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<array<string,string>> $value
* @param string $return
* @param rex_yform_validate_customfunction $self
* @param array<string,rex_yform_value_abstract> $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
Expand Down Expand Up @@ -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'] = '<a onclick="return confirm(\''.$confirm.'\')" href="'.$href.'">'.$label.'</a>';
$buttons['geolocationClearCache'] = '<a onclick="return confirm(\'' . $confirm . '\')" href="' . $href . '">' . $label . '</a>';
}
$ep->setSubject($buttons);
}
Expand Down Expand Up @@ -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;
Expand All @@ -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) {
Expand Down Expand Up @@ -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();
}

Expand Down

0 comments on commit 03f4a3e

Please sign in to comment.