Refine survey editor workflow and publication handling

This commit is contained in:
Jürgen Mummert
2026-05-29 10:19:19 +02:00
parent 6bbded4181
commit 1174410c1b
40 changed files with 1121 additions and 335 deletions
+38 -2
View File
@@ -41,6 +41,7 @@ final class SurveyRepository
if ($publishedOnly) {
$qb->andWhere('published = 1');
$qb->andWhere('isActive = 1');
}
$id = $qb->executeQuery()->fetchOne();
@@ -65,6 +66,7 @@ final class SurveyRepository
s.alias,
s.description,
s.published,
s.isActive,
s.isLocked,
s.updatedAt,
COUNT(DISTINCT q.id) AS questionCount,
@@ -92,6 +94,7 @@ final class SurveyRepository
'category' => serialize($this->normalizeCategoryIds($data['category'] ?? [])),
'description' => (string) ($data['description'] ?? ''),
'published' => '',
'isActive' => '',
'isLocked' => '',
'createdBy' => $memberId,
'updatedBy' => $memberId,
@@ -115,7 +118,8 @@ final class SurveyRepository
'alias' => $this->ensurePublicAlias((string) $survey->alias, (int) $survey->id),
'category' => serialize($this->normalizeCategoryIds($data['category'] ?? StringUtil::deserialize($survey->category, true))),
'description' => (string) ($data['description'] ?? $survey->description),
'published' => !empty($data['published']) ? '1' : '',
'published' => array_key_exists('published', $data) ? (!empty($data['published']) ? '1' : '') : (string) $survey->published,
'isActive' => array_key_exists('isActive', $data) ? (!empty($data['isActive']) ? '1' : '') : (string) ($survey->isActive ?? ''),
'updatedBy' => $memberId,
'updatedAt' => time(),
], [
@@ -182,6 +186,8 @@ final class SurveyRepository
$this->connection->update('tl_survey', [
'categoryFilter' => implode(',', $categoryIds),
'categorySummary' => implode(', ', $categoryTitles),
'templateFilter' => '1' === (string) $survey->isTemplate ? '1' : '0',
'templateSummary' => '1' === (string) $survey->isTemplate ? 'Ja' : 'Nein',
'assignedMembersFilter' => implode(',', $memberIds),
'assignedMembersSummary' => implode(', ', $memberNames),
], [
@@ -212,6 +218,36 @@ final class SurveyRepository
]);
}
public function publish(int $surveyId, int $memberId): void
{
$now = time();
$this->connection->update('tl_survey', [
'published' => '1',
'isActive' => '1',
'isLocked' => '1',
'tstamp' => $now,
'updatedBy' => $memberId,
'updatedAt' => $now,
], [
'id' => $surveyId,
]);
}
public function setActive(int $surveyId, int $memberId, bool $isActive): void
{
$now = time();
$this->connection->update('tl_survey', [
'isActive' => $isActive ? '1' : '',
'tstamp' => $now,
'updatedBy' => $memberId,
'updatedAt' => $now,
], [
'id' => $surveyId,
]);
}
public function deleteCascade(int $surveyId): void
{
$this->connection->transactional(function () use ($surveyId): void {
@@ -347,7 +383,7 @@ final class SurveyRepository
);
return $this->hasListMetadataColumns = !array_diff(
['categoryfilter', 'categorysummary', 'assignedmembersfilter', 'assignedmemberssummary'],
['categoryfilter', 'categorysummary', 'templatefilter', 'templatesummary', 'assignedmembersfilter', 'assignedmemberssummary'],
$columnNames,
);
}