Add survey template list module
This commit is contained in:
@@ -20,6 +20,7 @@ use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
#[AsFrontendModule(type: 'member_survey_list', category: 'survey', template: 'member_survey_list')]
|
||||
#[AsFrontendModule(type: 'member_survey_template_list', category: 'survey', template: 'member_survey_list')]
|
||||
final class MemberSurveyListController extends AbstractFrontendModuleController
|
||||
{
|
||||
public function __construct(
|
||||
@@ -31,12 +32,14 @@ final class MemberSurveyListController extends AbstractFrontendModuleController
|
||||
|
||||
protected function getResponse(FragmentTemplate $template, ModuleModel $model, Request $request): Response
|
||||
{
|
||||
$templatesOnly = 'member_survey_template_list' === (string) ($model->type ?? '');
|
||||
$user = $this->getUser();
|
||||
|
||||
if (!$user instanceof FrontendUser) {
|
||||
$template->set('loginRequired', true);
|
||||
$template->set('surveys', []);
|
||||
$template->set('createUrl', null);
|
||||
$template->set('templatesOnly', $templatesOnly);
|
||||
|
||||
return $template->getResponse();
|
||||
}
|
||||
@@ -45,12 +48,12 @@ final class MemberSurveyListController extends AbstractFrontendModuleController
|
||||
return $this->handleAction($request, (int) $user->id);
|
||||
}
|
||||
|
||||
$editPage = $this->resolvePage((int) ($model->surveyEditPage ?? 0));
|
||||
$editPage = $templatesOnly ? null : $this->resolvePage((int) ($model->surveyEditPage ?? 0));
|
||||
$readerPage = $this->resolvePage((int) $this->getContaoAdapter(Config::class)->get('surveyReaderPage'));
|
||||
$resultsPage = $this->resolvePage((int) $this->getContaoAdapter(Config::class)->get('surveyResultsPage'));
|
||||
$items = [];
|
||||
|
||||
foreach ($this->surveyRepository->findEditableByMember((int) $user->id) as $survey) {
|
||||
foreach ($this->surveyRepository->findEditableByMember((int) $user->id, $templatesOnly) as $survey) {
|
||||
$surveyId = (int) $survey['id'];
|
||||
$alias = (string) $survey['alias'];
|
||||
|
||||
@@ -58,6 +61,7 @@ final class MemberSurveyListController extends AbstractFrontendModuleController
|
||||
'id' => $surveyId,
|
||||
'title' => (string) $survey['title'],
|
||||
'description' => (string) ($survey['description'] ?? ''),
|
||||
'isTemplate' => !empty($survey['isTemplate']),
|
||||
'isActive' => !empty($survey['isActive']),
|
||||
'isLocked' => !empty($survey['isLocked']),
|
||||
'published' => !empty($survey['published']),
|
||||
@@ -72,7 +76,8 @@ final class MemberSurveyListController extends AbstractFrontendModuleController
|
||||
|
||||
$template->set('loginRequired', false);
|
||||
$template->set('surveys', $items);
|
||||
$template->set('createUrl', $editPage instanceof PageModel ? $this->generateContentUrl($editPage, ['create' => '1']) : null);
|
||||
$template->set('createUrl', !$templatesOnly && $editPage instanceof PageModel ? $this->generateContentUrl($editPage, ['create' => '1']) : null);
|
||||
$template->set('templatesOnly', $templatesOnly);
|
||||
|
||||
return $template->getResponse();
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ final class SurveyRepository
|
||||
/**
|
||||
* @return list<array<string, mixed>>
|
||||
*/
|
||||
public function findEditableByMember(int $memberId): array
|
||||
public function findEditableByMember(int $memberId, bool $templatesOnly = false): array
|
||||
{
|
||||
return $this->connection->fetchAllAssociative(
|
||||
<<<'SQL'
|
||||
@@ -65,6 +65,7 @@ final class SurveyRepository
|
||||
s.title,
|
||||
s.alias,
|
||||
s.description,
|
||||
s.isTemplate,
|
||||
s.published,
|
||||
s.isActive,
|
||||
s.isLocked,
|
||||
@@ -75,10 +76,11 @@ final class SurveyRepository
|
||||
INNER JOIN tl_survey_editor e ON COALESCE(NULLIF(e.survey, 0), e.pid) = s.id AND e.member = :member
|
||||
LEFT JOIN tl_survey_content q ON q.pid = s.id
|
||||
LEFT JOIN tl_survey_submission sub ON sub.survey = s.id
|
||||
WHERE s.isTemplate = :isTemplate
|
||||
GROUP BY s.id
|
||||
ORDER BY s.title ASC, s.id ASC
|
||||
SQL,
|
||||
['member' => $memberId],
|
||||
['member' => $memberId, 'isTemplate' => $templatesOnly ? '1' : ''],
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -111,7 +111,7 @@ final class SurveyEditorService
|
||||
'title' => $this->buildDuplicateTitle((string) $survey->title),
|
||||
'description' => (string) ($survey->description ?? ''),
|
||||
'category' => $survey->category,
|
||||
'isTemplate' => '1' === (string) ($survey->isTemplate ?? ''),
|
||||
'isTemplate' => false,
|
||||
]);
|
||||
|
||||
$duplicateSurveyId = (int) $duplicate->id;
|
||||
|
||||
Reference in New Issue
Block a user