diff --git a/contao/dca/tl_survey_condition.php b/contao/dca/tl_survey_condition.php index 2f74c1f..eba57b1 100644 --- a/contao/dca/tl_survey_condition.php +++ b/contao/dca/tl_survey_condition.php @@ -5,8 +5,6 @@ declare(strict_types=1); use Contao\DC_Table; use Mummert\SurveyBundle\EventListener\SurveyDcaListener; -$guardCallback = [SurveyDcaListener::class, 'guardConditionSave']; - $GLOBALS['TL_DCA']['tl_survey_condition'] = [ 'config' => [ 'dataContainer' => DC_Table::class, @@ -16,7 +14,6 @@ $GLOBALS['TL_DCA']['tl_survey_condition'] = [ [SurveyDcaListener::class, 'touchSurveyConditionParent'], ], 'ondelete_callback' => [ - [SurveyDcaListener::class, 'guardConditionDelete'], [SurveyDcaListener::class, 'touchSurveyConditionParent'], ], 'sql' => [ @@ -32,7 +29,7 @@ $GLOBALS['TL_DCA']['tl_survey_condition'] = [ 'sorting' => [ 'mode' => 4, 'fields' => ['id'], - 'headerFields' => ['title', 'alias', 'published', 'isLocked'], + 'headerFields' => ['title', 'alias', 'published'], 'panelLayout' => 'sort,search,limit', ], 'label' => [ @@ -71,14 +68,12 @@ $GLOBALS['TL_DCA']['tl_survey_condition'] = [ 'inputType' => 'select', 'options_callback' => [SurveyDcaListener::class, 'getQuestionOptions'], 'eval' => ['mandatory' => true, 'includeBlankOption' => true, 'chosen' => true, 'tl_class' => 'w50'], - 'save_callback' => [$guardCallback], 'sql' => 'int(10) unsigned NOT NULL default 0', ], 'answerValue' => [ 'label' => &$GLOBALS['TL_LANG']['tl_survey_condition']['answerValue'], 'inputType' => 'text', 'eval' => ['mandatory' => true, 'maxlength' => 255, 'tl_class' => 'w50'], - 'save_callback' => [$guardCallback], 'sql' => "varchar(255) NOT NULL default ''", ], 'targetQuestion' => [ @@ -86,7 +81,6 @@ $GLOBALS['TL_DCA']['tl_survey_condition'] = [ 'inputType' => 'select', 'options_callback' => [SurveyDcaListener::class, 'getQuestionOptions'], 'eval' => ['mandatory' => true, 'includeBlankOption' => true, 'chosen' => true, 'tl_class' => 'clr'], - 'save_callback' => [$guardCallback], 'sql' => 'int(10) unsigned NOT NULL default 0', ], ], diff --git a/contao/dca/tl_survey_content.php b/contao/dca/tl_survey_content.php index 5356d4d..9cd7133 100644 --- a/contao/dca/tl_survey_content.php +++ b/contao/dca/tl_survey_content.php @@ -5,8 +5,6 @@ declare(strict_types=1); use Contao\DC_Table; use Mummert\SurveyBundle\EventListener\SurveyDcaListener; -$guardCallback = [SurveyDcaListener::class, 'guardContentSave']; - $GLOBALS['TL_DCA']['tl_survey_content'] = [ 'config' => [ 'dataContainer' => DC_Table::class, @@ -19,7 +17,6 @@ $GLOBALS['TL_DCA']['tl_survey_content'] = [ [SurveyDcaListener::class, 'resolveSurveyContentPalette'], ], 'ondelete_callback' => [ - [SurveyDcaListener::class, 'guardContentDelete'], [SurveyDcaListener::class, 'touchSurveyContentParent'], ], 'sql' => [ @@ -35,7 +32,7 @@ $GLOBALS['TL_DCA']['tl_survey_content'] = [ 'sorting' => [ 'mode' => 4, 'fields' => ['sorting'], - 'headerFields' => ['title', 'alias', 'published', 'isLocked'], + 'headerFields' => ['title', 'alias', 'published'], 'child_record_class' => 'survey-question-record', 'panelLayout' => 'sort,search,limit', ], @@ -83,21 +80,18 @@ $GLOBALS['TL_DCA']['tl_survey_content'] = [ 'options' => ['yes_no_maybe', 'text', 'range', 'choice'], 'reference' => &$GLOBALS['TL_LANG']['tl_survey_content']['types'], 'eval' => ['mandatory' => true, 'includeBlankOption' => true, 'submitOnChange' => true, 'chosen' => true, 'tl_class' => 'w50'], - 'save_callback' => [$guardCallback], 'sql' => "varchar(32) NOT NULL default ''", ], 'question' => [ 'label' => &$GLOBALS['TL_LANG']['tl_survey_content']['question'], 'inputType' => 'text', 'eval' => ['mandatory' => true, 'maxlength' => 255, 'tl_class' => 'clr'], - 'save_callback' => [$guardCallback], 'sql' => "varchar(255) NOT NULL default ''", ], 'description' => [ 'label' => &$GLOBALS['TL_LANG']['tl_survey_content']['description'], 'inputType' => 'textarea', 'eval' => ['tl_class' => 'clr'], - 'save_callback' => [$guardCallback], 'sql' => 'text NULL', ], 'mandatory' => [ @@ -105,7 +99,6 @@ $GLOBALS['TL_DCA']['tl_survey_content'] = [ 'inputType' => 'checkbox', 'default' => '1', 'eval' => ['tl_class' => 'w50 m12'], - 'save_callback' => [$guardCallback], 'sql' => "char(1) NOT NULL default ''", ], 'published' => [ @@ -113,14 +106,12 @@ $GLOBALS['TL_DCA']['tl_survey_content'] = [ 'inputType' => 'checkbox', 'default' => '1', 'eval' => ['tl_class' => 'w50 m12'], - 'save_callback' => [$guardCallback], 'sql' => "char(1) NOT NULL default ''", ], 'allowMaybe' => [ 'label' => &$GLOBALS['TL_LANG']['tl_survey_content']['allowMaybe'], 'inputType' => 'checkbox', 'eval' => ['tl_class' => 'w50 m12 clr'], - 'save_callback' => [$guardCallback], 'sql' => "char(1) NOT NULL default ''", ], 'jumpOnYes' => [ @@ -128,7 +119,6 @@ $GLOBALS['TL_DCA']['tl_survey_content'] = [ 'inputType' => 'select', 'options_callback' => [SurveyDcaListener::class, 'getQuestionOptionsForContent'], 'eval' => ['includeBlankOption' => true, 'chosen' => true, 'tl_class' => 'w50 clr'], - 'save_callback' => [$guardCallback], 'sql' => 'int(10) unsigned NOT NULL default 0', ], 'jumpOnNo' => [ @@ -136,105 +126,90 @@ $GLOBALS['TL_DCA']['tl_survey_content'] = [ 'inputType' => 'select', 'options_callback' => [SurveyDcaListener::class, 'getQuestionOptionsForContent'], 'eval' => ['includeBlankOption' => true, 'chosen' => true, 'tl_class' => 'w50'], - 'save_callback' => [$guardCallback], 'sql' => 'int(10) unsigned NOT NULL default 0', ], 'allowMultiple' => [ 'label' => &$GLOBALS['TL_LANG']['tl_survey_content']['allowMultiple'], 'inputType' => 'checkbox', 'eval' => ['tl_class' => 'w50 m12 clr'], - 'save_callback' => [$guardCallback], 'sql' => "char(1) NOT NULL default ''", ], 'answerOption1' => [ 'label' => &$GLOBALS['TL_LANG']['tl_survey_content']['answerOption1'], 'inputType' => 'text', 'eval' => ['maxlength' => 255, 'tl_class' => 'w50 clr'], - 'save_callback' => [$guardCallback], 'sql' => "varchar(255) NOT NULL default ''", ], 'answerOption2' => [ 'label' => &$GLOBALS['TL_LANG']['tl_survey_content']['answerOption2'], 'inputType' => 'text', 'eval' => ['maxlength' => 255, 'tl_class' => 'w50'], - 'save_callback' => [$guardCallback], 'sql' => "varchar(255) NOT NULL default ''", ], 'answerOption3' => [ 'label' => &$GLOBALS['TL_LANG']['tl_survey_content']['answerOption3'], 'inputType' => 'text', 'eval' => ['maxlength' => 255, 'tl_class' => 'w50 clr'], - 'save_callback' => [$guardCallback], 'sql' => "varchar(255) NOT NULL default ''", ], 'answerOption4' => [ 'label' => &$GLOBALS['TL_LANG']['tl_survey_content']['answerOption4'], 'inputType' => 'text', 'eval' => ['maxlength' => 255, 'tl_class' => 'w50'], - 'save_callback' => [$guardCallback], 'sql' => "varchar(255) NOT NULL default ''", ], 'answerOption5' => [ 'label' => &$GLOBALS['TL_LANG']['tl_survey_content']['answerOption5'], 'inputType' => 'text', 'eval' => ['maxlength' => 255, 'tl_class' => 'w50 clr'], - 'save_callback' => [$guardCallback], 'sql' => "varchar(255) NOT NULL default ''", ], 'answerOption6' => [ 'label' => &$GLOBALS['TL_LANG']['tl_survey_content']['answerOption6'], 'inputType' => 'text', 'eval' => ['maxlength' => 255, 'tl_class' => 'w50'], - 'save_callback' => [$guardCallback], 'sql' => "varchar(255) NOT NULL default ''", ], 'answerOption7' => [ 'label' => &$GLOBALS['TL_LANG']['tl_survey_content']['answerOption7'], 'inputType' => 'text', 'eval' => ['maxlength' => 255, 'tl_class' => 'w50 clr'], - 'save_callback' => [$guardCallback], 'sql' => "varchar(255) NOT NULL default ''", ], 'answerOption8' => [ 'label' => &$GLOBALS['TL_LANG']['tl_survey_content']['answerOption8'], 'inputType' => 'text', 'eval' => ['maxlength' => 255, 'tl_class' => 'w50'], - 'save_callback' => [$guardCallback], 'sql' => "varchar(255) NOT NULL default ''", ], 'answerOption9' => [ 'label' => &$GLOBALS['TL_LANG']['tl_survey_content']['answerOption9'], 'inputType' => 'text', 'eval' => ['maxlength' => 255, 'tl_class' => 'w50 clr'], - 'save_callback' => [$guardCallback], 'sql' => "varchar(255) NOT NULL default ''", ], 'answerOption10' => [ 'label' => &$GLOBALS['TL_LANG']['tl_survey_content']['answerOption10'], 'inputType' => 'text', 'eval' => ['maxlength' => 255, 'tl_class' => 'w50'], - 'save_callback' => [$guardCallback], 'sql' => "varchar(255) NOT NULL default ''", ], 'rangeMin' => [ 'label' => &$GLOBALS['TL_LANG']['tl_survey_content']['rangeMin'], 'inputType' => 'text', 'eval' => ['rgxp' => 'digit', 'tl_class' => 'w50'], - 'save_callback' => [$guardCallback], 'sql' => 'int(10) NOT NULL default 0', ], 'rangeMax' => [ 'label' => &$GLOBALS['TL_LANG']['tl_survey_content']['rangeMax'], 'inputType' => 'text', 'eval' => ['rgxp' => 'digit', 'tl_class' => 'w50'], - 'save_callback' => [$guardCallback], 'sql' => 'int(10) NOT NULL default 10', ], 'rangeStep' => [ 'label' => &$GLOBALS['TL_LANG']['tl_survey_content']['rangeStep'], 'inputType' => 'text', 'eval' => ['rgxp' => 'digit', 'tl_class' => 'w50'], - 'save_callback' => [$guardCallback], 'sql' => 'int(10) unsigned NOT NULL default 1', ], ], diff --git a/contao/dca/tl_survey_editor.php b/contao/dca/tl_survey_editor.php index 974b01c..22a3dfd 100644 --- a/contao/dca/tl_survey_editor.php +++ b/contao/dca/tl_survey_editor.php @@ -28,7 +28,7 @@ $GLOBALS['TL_DCA']['tl_survey_editor'] = [ 'sorting' => [ 'mode' => 4, 'fields' => ['member'], - 'headerFields' => ['title', 'alias', 'isLocked'], + 'headerFields' => ['title', 'alias'], 'panelLayout' => 'sort,search,limit', ], 'label' => [ diff --git a/contao/templates/frontend/member_survey_edit.html.twig b/contao/templates/frontend/member_survey_edit.html.twig index 4687abe..84c54e2 100644 --- a/contao/templates/frontend/member_survey_edit.html.twig +++ b/contao/templates/frontend/member_survey_edit.html.twig @@ -56,7 +56,6 @@
{{ form_start(surveyForm, {action: metadataFormActionUrl, attr: {class: 'survey-form-grid', id: surveyMetaFormId, 'data-survey-dirty-form': '1'}}) }} - {{ form_widget(surveyForm._token) }} {{ form_errors(surveyForm) }} diff --git a/src/Controller/FrontendModule/MemberSurveyEditController.php b/src/Controller/FrontendModule/MemberSurveyEditController.php index 09a0e64..cfcce48 100644 --- a/src/Controller/FrontendModule/MemberSurveyEditController.php +++ b/src/Controller/FrontendModule/MemberSurveyEditController.php @@ -76,7 +76,7 @@ final class MemberSurveyEditController extends AbstractFrontendModuleController $surveyForm = $this->formFactory->createNamed('survey_meta', SurveyEditorType::class, $survey instanceof SurveyModel ? SurveyEditorData::fromModel($survey) : new SurveyEditorData()); $surveyForm->handleRequest($request); - if ($surveyForm->isSubmitted() && $surveyForm->isValid()) { + if ($surveyForm->isSubmitted() && $surveyForm->isValid() && (!$survey instanceof SurveyModel || '1' !== (string) $survey->published)) { try { if ($survey instanceof SurveyModel) { $this->surveyEditorService->updateSurvey($survey, $memberId, $surveyForm->getData()); @@ -92,6 +92,8 @@ final class MemberSurveyEditController extends AbstractFrontendModuleController } catch (\Throwable $exception) { $this->addFlash('error', $exception->getMessage()); } + } elseif ($surveyForm->isSubmitted() && $survey instanceof SurveyModel && '1' === (string) $survey->published) { + $this->addFlash('error', 'Die Metadaten können nach der Veröffentlichung im Frontend nicht mehr geändert werden.'); } if (!$survey instanceof SurveyModel) { diff --git a/src/EventListener/SurveyDcaListener.php b/src/EventListener/SurveyDcaListener.php index dca3311..a2ad923 100644 --- a/src/EventListener/SurveyDcaListener.php +++ b/src/EventListener/SurveyDcaListener.php @@ -242,16 +242,6 @@ final class SurveyDcaListener return $surveyId > 0 ? $this->surveyEditorRepository->findMemberIdsBySurvey($surveyId) : []; } - public function guardContentSave(mixed $value, DataContainer $dataContainer): mixed - { - return $value; - } - - public function guardConditionSave(mixed $value, DataContainer $dataContainer): mixed - { - return $value; - } - public function guardEditorSave(mixed $value, DataContainer $dataContainer): mixed { $surveyId = $this->resolveSurveyId('tl_survey_editor', $dataContainer); @@ -389,10 +379,6 @@ final class SurveyDcaListener $this->surveyRepository->refreshListMetadata($surveyId); } - public function guardContentDelete(DataContainer $dataContainer): void - { - } - public function touchSurveyContentParent(DataContainer $dataContainer): void { $surveyId = $this->resolveSurveyId('tl_survey_content', $dataContainer); @@ -402,10 +388,6 @@ final class SurveyDcaListener } } - public function guardConditionDelete(DataContainer $dataContainer): void - { - } - public function touchSurveyConditionParent(DataContainer $dataContainer): void { $surveyId = $this->resolveSurveyId('tl_survey_condition', $dataContainer); @@ -424,11 +406,6 @@ final class SurveyDcaListener } } - public function guardSurveyStructureSave(mixed $value, DataContainer $dataContainer): mixed - { - return $value; - } - public function resolveSurveyContentPalette(string $palette, DataContainer $dataContainer): string { $type = (string) ($dataContainer->activeRecord->type ?? ''); diff --git a/src/Form/Model/SurveyEditorData.php b/src/Form/Model/SurveyEditorData.php index e2af18c..c8950c9 100644 --- a/src/Form/Model/SurveyEditorData.php +++ b/src/Form/Model/SurveyEditorData.php @@ -10,14 +10,12 @@ final class SurveyEditorData { public string $title = ''; public string $description = ''; - public bool $published = false; public static function fromModel(SurveyModel $survey): self { $data = new self(); $data->title = (string) $survey->title; $data->description = (string) $survey->description; - $data->published = '1' === (string) $survey->published; return $data; } @@ -30,7 +28,6 @@ final class SurveyEditorData return [ 'title' => $this->title, 'description' => $this->description, - 'published' => $this->published, ]; } } \ No newline at end of file diff --git a/src/Form/SurveyEditorType.php b/src/Form/SurveyEditorType.php index 6eb8160..7698bc0 100644 --- a/src/Form/SurveyEditorType.php +++ b/src/Form/SurveyEditorType.php @@ -6,7 +6,6 @@ namespace Mummert\SurveyBundle\Form; use Mummert\SurveyBundle\Form\Model\SurveyEditorData; use Symfony\Component\Form\AbstractType; -use Symfony\Component\Form\Extension\Core\Type\CheckboxType; use Symfony\Component\Form\Extension\Core\Type\TextareaType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormBuilderInterface; @@ -29,10 +28,6 @@ final class SurveyEditorType extends AbstractType 'empty_data' => '', 'attr' => ['rows' => 5], ]) - ->add('published', CheckboxType::class, [ - 'label' => 'Veröffentlicht', - 'required' => false, - ]) ; } diff --git a/translations/messages.de.yaml b/translations/messages.de.yaml index 5dda941..5c9f819 100644 --- a/translations/messages.de.yaml +++ b/translations/messages.de.yaml @@ -24,34 +24,20 @@ survey: login_required: "Dieses Frontendmodul ist für eingeloggte Mitglieder gedacht. Nutzen Sie den normalen Contao-Mitgliederlogin auf einer geschützten Seite." entry_not_allowed: "Diese Seite kann nicht direkt geöffnet werden. Bitte wechseln Sie über die Umfragen-Liste in den Bearbeitungsmodus." create_title: "Neue Umfrage erstellen" - create_text: "Die Umfrage wird nach dem Anlegen automatisch dem eingeloggten Mitglied zugewiesen." label_title: "Titel" label_survey_title: "Titel der Umfrage" label_description: "Beschreibung" - publish_directly: "Direkt veröffentlichen" create_submit: "Umfrage erstellen" back_to_list: "Zur Liste" - public_view_open: "Öffentliche Ansicht öffnen" - copy_public_link: "Öffentlichen Link kopieren" - copy_public_link_success: "Link kopiert" - public_link: "Öffentlicher Link" - no_public_page: "Noch keine öffentliche Seite hinterlegt." - status: "Status" editors: "Bearbeitende" editors_count: "%count% Mitglied(er)" published: "veröffentlicht" draft: "Entwurf" locked: "gesperrt" structure_locked: "Die Fragen dieser Umfrage sind gesperrt, weil die Umfrage veröffentlicht wurde oder bereits erste Teilnahmen vorliegen. Die Metadaten können weiter gepflegt werden." - published_readonly: "Diese Umfrage ist veröffentlicht. Die Bearbeitung im Frontend ist deshalb deaktiviert. Änderungen sind weiterhin im Backend möglich." - metadata: "Umfrage-Metadaten" - publish_survey: "Umfrage veröffentlichen" - publish_help: "Umfrage veröffentlichen. Danach sind keine Änderungen mehr möglich." publish_confirm: "Sind Sie wirklich sicher? Nachdem die Umfrage veröffentlicht wurde sind keine Änderungen mehr möglich!" deactivate_survey: "Umfrage vorübergehend deaktivieren" activate_survey: "Umfrage wieder aktivieren" - deactivate_help: "Die veröffentlichte Umfrage wird vorübergehend offline genommen. Fragen bleiben weiter gesperrt." - activate_help: "Die veröffentlichte Umfrage wird wieder öffentlich erreichbar gemacht. Fragen bleiben weiter gesperrt." save: "Speichern" save_metadata: "Metadaten speichern" save_this_question: "Diese Frage speichern" diff --git a/translations/messages.en.yaml b/translations/messages.en.yaml index d606ff6..fe7bc3c 100644 --- a/translations/messages.en.yaml +++ b/translations/messages.en.yaml @@ -24,34 +24,20 @@ survey: login_required: "This frontend module is intended for logged-in members. Please use the regular Contao member login on a protected page." entry_not_allowed: "This page cannot be opened directly. Please switch to edit mode via the survey list." create_title: "Create new survey" - create_text: "The survey will automatically be assigned to the logged-in member after creation." label_title: "Title" label_survey_title: "Survey title" label_description: "Description" - publish_directly: "Publish immediately" create_submit: "Create survey" back_to_list: "Back to list" - public_view_open: "Open public view" - copy_public_link: "Copy public link" - copy_public_link_success: "Link copied" - public_link: "Public link" - no_public_page: "No public page configured yet." - status: "Status" editors: "Editors" editors_count: "%count% member(s)" published: "published" draft: "draft" locked: "locked" structure_locked: "The questions of this survey are locked because the survey was published or first participations already exist. The metadata can still be maintained." - published_readonly: "This survey is published. Frontend editing is therefore disabled. Changes are still possible in the backend." - metadata: "Survey metadata" - publish_survey: "Publish survey" - publish_help: "Publish survey. No further changes will be possible afterwards." publish_confirm: "Are you really sure? After the survey has been published, no further changes will be possible!" deactivate_survey: "Temporarily deactivate survey" activate_survey: "Reactivate survey" - deactivate_help: "The published survey is temporarily taken offline. Questions remain locked." - activate_help: "The published survey is made publicly reachable again. Questions remain locked." save: "Save" save_metadata: "Save metadata" save_this_question: "Save this question"