Ergaenze Website-URL am Marktstamm

This commit is contained in:
gitea_admin committed 2026-09-19 10:08:49 +02:00
1 parent d259c35000
commit f9ffa5a6b6
7 files changed
+45 -12

No files matched your search

+27 -8
View File
@@ -86,6 +86,20 @@ function market_management_optional_integer(array $input, string $field): ?int
return (int) $value;
}
function market_management_optional_url(array $input, string $field): ?string
{
$value = market_management_optional_string($input, $field);
if ($value === null) {
return null;
}
if (filter_var($value, FILTER_VALIDATE_URL) === false || !preg_match('/^https?:\/\//i', $value)) {
throw new InvalidArgumentException($field . ' muss eine gültige HTTP(S)-URL sein.');
}
return $value;
}
function market_management_category_exists(PDO $pdo, int $categoryId): bool
{
$stmt = $pdo->prepare('SELECT 1 FROM market_category WHERE id = :id AND is_active = TRUE');
@@ -97,6 +111,7 @@ function market_management_create_market(PDO $pdo, array $input): array
{
$name = trim((string) ($input['name'] ?? ''));
$categoryId = market_management_require_positive_id($input['category_id'] ?? null, 'category_id');
$websiteUrl = market_management_optional_url($input, 'website_url');
if ($name === '') {
throw new InvalidArgumentException('name ist erforderlich.');
@@ -106,11 +121,11 @@ function market_management_create_market(PDO $pdo, array $input): array
}
$stmt = $pdo->prepare(
'INSERT INTO market_definition (name, category_id)
VALUES (:name, :category_id)
RETURNING id, name, category_id, archived_at, created_at, updated_at'
'INSERT INTO market_definition (name, category_id, website_url)
VALUES (:name, :category_id, :website_url)
RETURNING id, name, category_id, website_url, archived_at, created_at, updated_at'
);
$stmt->execute([':name' => $name, ':category_id' => $categoryId]);
$stmt->execute([':name' => $name, ':category_id' => $categoryId, ':website_url' => $websiteUrl]);
return (array) $stmt->fetch();
}
@@ -178,7 +193,7 @@ function market_management_search_markets(PDO $pdo, array $input): array
}
$stmt = $pdo->prepare(
'SELECT m.id, m.name, m.category_id, c.code AS category_code, c.name AS category_name,
'SELECT m.id, m.name, m.category_id, m.website_url, c.code AS category_code, c.name AS category_name,
m.archived_at, m.created_at, m.updated_at,
MIN(d.date) AS earliest_date, MAX(d.date) AS latest_date,
COUNT(DISTINCT o.id) AS occurrence_count
@@ -202,7 +217,7 @@ function market_management_get_market(PDO $pdo, int $marketId, bool $includeArch
{
$marketArchivePredicate = $includeArchived ? 'TRUE' : 'm.archived_at IS NULL';
$stmt = $pdo->prepare(
'SELECT m.id, m.name, m.category_id, c.code AS category_code, c.name AS category_name,
'SELECT m.id, m.name, m.category_id, m.website_url, c.code AS category_code, c.name AS category_name,
m.archived_at, m.created_at, m.updated_at
FROM market_definition m
INNER JOIN market_category c ON c.id = m.category_id
@@ -331,6 +346,10 @@ function market_management_update_market(PDO $pdo, int $marketId, array $input):
$sets[] = 'category_id = :category_id';
$params[':category_id'] = $categoryId;
}
if (array_key_exists('website_url', $input)) {
$sets[] = 'website_url = :website_url';
$params[':website_url'] = market_management_optional_url($input, 'website_url');
}
if ($sets === []) {
throw new InvalidArgumentException('Mindestens ein änderbares Feld ist erforderlich.');
}
@@ -338,7 +357,7 @@ function market_management_update_market(PDO $pdo, int $marketId, array $input):
$sets[] = 'updated_at = NOW()';
$stmt = $pdo->prepare(
'UPDATE market_definition SET ' . implode(', ', $sets) . ' WHERE id = :id
RETURNING id, name, category_id, archived_at, created_at, updated_at'
RETURNING id, name, category_id, website_url, archived_at, created_at, updated_at'
);
$stmt->execute($params);
$market = $stmt->fetch();
@@ -354,7 +373,7 @@ function market_management_set_market_archive(PDO $pdo, int $marketId, bool $arc
'UPDATE market_definition
SET archived_at = ' . ($archive ? 'COALESCE(archived_at, NOW())' : 'NULL') . ', updated_at = NOW()
WHERE id = :id
RETURNING id, name, category_id, archived_at, created_at, updated_at'
RETURNING id, name, category_id, website_url, archived_at, created_at, updated_at'
);
$stmt->execute([':id' => $marketId]);
$market = $stmt->fetch();