Initial survey bundle import

This commit is contained in:
Jürgen Mummert
2026-05-17 17:31:28 +02:00
commit b8475e3a57
84 changed files with 7157 additions and 0 deletions
+55
View File
@@ -0,0 +1,55 @@
<?php
declare(strict_types=1);
use Contao\CoreBundle\DataContainer\PaletteManipulator;
use Mummert\SurveyBundle\EventListener\SurveyDcaListener;
if (isset($GLOBALS['TL_DCA']['tl_member']['palettes']) && is_array($GLOBALS['TL_DCA']['tl_member']['palettes'])) {
foreach (array_keys($GLOBALS['TL_DCA']['tl_member']['palettes']) as $paletteName) {
if ('__selector__' === $paletteName) {
continue;
}
PaletteManipulator::create()
->addLegend('survey_legend', 'contact_legend', PaletteManipulator::POSITION_AFTER)
->addField('surveyCategories', 'survey_legend', PaletteManipulator::POSITION_APPEND)
->addField('assignedSurveys', 'survey_legend', PaletteManipulator::POSITION_APPEND)
->applyToPalette((string) $paletteName, 'tl_member');
}
}
$GLOBALS['TL_DCA']['tl_member']['config']['onsubmit_callback'][] = [SurveyDcaListener::class, 'refreshMemberSurveyListMetadata'];
$GLOBALS['TL_DCA']['tl_member']['fields']['surveyCategories'] = [
'label' => &$GLOBALS['TL_LANG']['tl_member']['surveyCategories'],
'exclude' => true,
'inputType' => 'select',
'foreignKey' => 'tl_survey_category.title',
'eval' => ['multiple' => true, 'chosen' => true, 'tl_class' => 'clr'],
'relation' => [
'type' => 'hasMany',
'load' => 'lazy',
'table' => 'tl_survey_category',
'field' => 'id',
],
'save_callback' => [
[SurveyDcaListener::class, 'saveMemberSurveyCategories'],
],
'sql' => 'blob NULL',
];
$GLOBALS['TL_DCA']['tl_member']['fields']['assignedSurveys'] = [
'label' => &$GLOBALS['TL_LANG']['tl_member']['assignedSurveys'],
'exclude' => true,
'inputType' => 'select',
'options_callback' => [SurveyDcaListener::class, 'getSurveyOptions'],
'eval' => ['multiple' => true, 'chosen' => true, 'tl_class' => 'clr'],
'load_callback' => [
[SurveyDcaListener::class, 'loadMemberAssignedSurveys'],
],
'save_callback' => [
[SurveyDcaListener::class, 'saveMemberAssignedSurveys'],
],
'sql' => 'blob NULL',
];
+32
View File
@@ -0,0 +1,32 @@
<?php
declare(strict_types=1);
$GLOBALS['TL_DCA']['tl_module']['palettes']['member_survey_list'] = '{title_legend},name,headline,type;{survey_navigation_legend},surveyEditPage;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID';
$GLOBALS['TL_DCA']['tl_module']['palettes']['member_survey_edit'] = '{title_legend},name,headline,type;{survey_navigation_legend},surveyListPage;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID';
$GLOBALS['TL_DCA']['tl_module']['palettes']['show_survey'] = '{title_legend},name,headline,type;{expert_legend:hide},guests,cssID';
$GLOBALS['TL_DCA']['tl_module']['palettes']['survey_results'] = '{title_legend},name,headline,type;{expert_legend:hide},guests,cssID';
$GLOBALS['TL_DCA']['tl_module']['fields']['surveyEditPage'] = [
'label' => &$GLOBALS['TL_LANG']['tl_module']['surveyEditPage'],
'exclude' => true,
'inputType' => 'pageTree',
'eval' => ['fieldType' => 'radio', 'mandatory' => true, 'tl_class' => 'w50'],
'sql' => ['type' => 'integer', 'unsigned' => true, 'default' => 0],
];
$GLOBALS['TL_DCA']['tl_module']['fields']['surveyListPage'] = [
'label' => &$GLOBALS['TL_LANG']['tl_module']['surveyListPage'],
'exclude' => true,
'inputType' => 'pageTree',
'eval' => ['fieldType' => 'radio', 'mandatory' => false, 'tl_class' => 'w50'],
'sql' => ['type' => 'integer', 'unsigned' => true, 'default' => 0],
];
$GLOBALS['TL_DCA']['tl_module']['fields']['surveyReaderPage'] = [
'label' => &$GLOBALS['TL_LANG']['tl_module']['surveyReaderPage'],
'exclude' => true,
'inputType' => 'pageTree',
'eval' => ['fieldType' => 'radio', 'mandatory' => false, 'tl_class' => 'w50'],
'sql' => ['type' => 'integer', 'unsigned' => true, 'default' => 0],
];
+30
View File
@@ -0,0 +1,30 @@
<?php
declare(strict_types=1);
use Contao\CoreBundle\DataContainer\PaletteManipulator;
PaletteManipulator::create()
->addLegend('survey_settings_legend', null, PaletteManipulator::POSITION_AFTER, true)
->addField('surveyReaderPage', 'survey_settings_legend')
->addField('surveyResultsPage', 'survey_settings_legend')
->addField('surveyGotenbergUrl', 'survey_settings_legend')
->applyToPalette('default', 'tl_settings');
$GLOBALS['TL_DCA']['tl_settings']['fields']['surveyReaderPage'] = [
'label' => &$GLOBALS['TL_LANG']['tl_settings']['surveyReaderPage'],
'inputType' => 'pageTree',
'eval' => ['fieldType' => 'radio', 'tl_class' => 'w50'],
];
$GLOBALS['TL_DCA']['tl_settings']['fields']['surveyResultsPage'] = [
'label' => &$GLOBALS['TL_LANG']['tl_settings']['surveyResultsPage'],
'inputType' => 'pageTree',
'eval' => ['fieldType' => 'radio', 'tl_class' => 'w50'],
];
$GLOBALS['TL_DCA']['tl_settings']['fields']['surveyGotenbergUrl'] = [
'label' => &$GLOBALS['TL_LANG']['tl_settings']['surveyGotenbergUrl'],
'inputType' => 'text',
'eval' => ['rgxp' => 'url', 'decodeEntities' => true, 'maxlength' => 255, 'tl_class' => 'w50 clr'],
];
+212
View File
@@ -0,0 +1,212 @@
<?php
declare(strict_types=1);
use Contao\DC_Table;
use Contao\System;
use Mummert\SurveyBundle\EventListener\SurveyDcaListener;
$GLOBALS['TL_DCA']['tl_survey'] = [
'config' => [
'dataContainer' => DC_Table::class,
'ctable' => ['tl_survey_content', 'tl_survey_condition', 'tl_survey_editor', 'tl_survey_submission'],
'enableVersioning' => true,
'onload_callback' => [
[SurveyDcaListener::class, 'refreshSurveyBackendStateIndex'],
],
'onsubmit_callback' => [
[SurveyDcaListener::class, 'persistSurveyBackendState'],
],
'sql' => [
'keys' => [
'id' => 'primary',
'alias' => 'unique',
'published' => 'index',
],
],
],
'list' => [
'sorting' => [
'mode' => 1,
'fields' => ['title'],
'flag' => 1,
'panelLayout' => 'filter;sort,search,limit',
],
'label' => [
'fields' => ['title', 'categorySummary', 'assignedMembersSummary'],
'showColumns' => true,
],
'global_operations' => [
'all' => [
'href' => 'act=select',
'class' => 'header_edit_all',
'attributes' => 'onclick="Backend.getScrollOffset()" accesskey="e"',
],
],
'operations' => [
'edit' => [
'href' => 'table=tl_survey_content',
'icon' => 'children.svg',
],
'editheader' => [
'href' => 'act=edit',
'icon' => 'header.svg',
],
'delete' => [
'href' => 'act=delete',
'icon' => 'delete.svg',
'attributes' => 'onclick="if(!confirm(\'Eintrag wirklich loeschen?\'))return false;Backend.getScrollOffset()"',
],
'show' => [
'href' => 'act=show',
'icon' => 'show.svg',
],
'copyPublicLink' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey']['copyPublicLink'],
'icon' => 'copy.svg',
'button_callback' => [SurveyDcaListener::class, 'generateCopyPublicLinkButton'],
],
'showResults' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey']['showResults'],
'icon' => 'show.svg',
'button_callback' => [SurveyDcaListener::class, 'generateShowResultsButton'],
],
],
],
'palettes' => [
'default' => '{title_legend},title,alias,category,description;{assignment_legend},assignedMembers;{publishing_legend},published,isLocked;{meta_legend},createdAt,updatedAt',
],
'fields' => [
'id' => [
'sql' => 'int(10) unsigned NOT NULL auto_increment',
],
'tstamp' => [
'sql' => 'int(10) unsigned NOT NULL default 0',
],
'title' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey']['title'],
'inputType' => 'text',
'search' => true,
'eval' => ['mandatory' => true, 'maxlength' => 255, 'tl_class' => 'w50'],
'sql' => "varchar(255) NOT NULL default ''",
],
'alias' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey']['alias'],
'inputType' => 'text',
'eval' => ['maxlength' => 20, 'readonly' => true, 'alwaysSave' => true, 'tl_class' => 'w50'],
'save_callback' => [[SurveyDcaListener::class, 'generateSurveyAlias']],
'sql' => "varchar(20) NOT NULL default ''",
],
'description' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey']['description'],
'inputType' => 'textarea',
'eval' => ['rte' => 'tinyMCE', 'tl_class' => 'clr'],
'sql' => 'text NULL',
],
'category' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey']['category'],
'inputType' => 'select',
'foreignKey' => 'tl_survey_category.title',
'eval' => ['multiple' => true, 'chosen' => true, 'tl_class' => 'clr'],
'relation' => ['type' => 'hasMany', 'load' => 'lazy', 'table' => 'tl_survey_category', 'field' => 'id'],
'sql' => 'blob NULL',
],
'categoryFilter' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey']['categoryFilter'],
'filter' => true,
'inputType' => 'select',
'options_callback' => [SurveyDcaListener::class, 'getCategoryOptions'],
'eval' => ['includeBlankOption' => true, 'chosen' => true, 'findInSet' => true],
'sql' => "varchar(255) NOT NULL default ''",
],
'categorySummary' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey']['categorySummary'],
'sql' => 'text NULL',
],
'published' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey']['published'],
'inputType' => 'checkbox',
'eval' => ['tl_class' => 'w50 m12'],
'sql' => "char(1) NOT NULL default ''",
],
'isLocked' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey']['isLocked'],
'inputType' => 'checkbox',
'eval' => ['tl_class' => 'w50 m12'],
'sql' => "char(1) NOT NULL default ''",
],
'assignedMembers' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey']['assignedMembers'],
'inputType' => 'select',
'options_callback' => [Mummert\SurveyBundle\EventListener\SurveyDcaListener::class, 'getMemberOptions'],
'eval' => ['multiple' => true, 'chosen' => true, 'tl_class' => 'clr'],
'load_callback' => [[Mummert\SurveyBundle\EventListener\SurveyDcaListener::class, 'loadSurveyAssignedMembers']],
'save_callback' => [[Mummert\SurveyBundle\EventListener\SurveyDcaListener::class, 'saveSurveyAssignedMembers']],
'sql' => 'blob NULL',
],
'assignedMembersFilter' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey']['assignedMembersFilter'],
'filter' => true,
'inputType' => 'select',
'options_callback' => [SurveyDcaListener::class, 'getMemberOptions'],
'eval' => ['includeBlankOption' => true, 'chosen' => true, 'findInSet' => true],
'sql' => 'text NULL',
],
'assignedMembersSummary' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey']['assignedMembersSummary'],
'sql' => 'text NULL',
],
'createdBy' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey']['createdBy'],
'inputType' => 'text',
'eval' => ['readonly' => true, 'tl_class' => 'w50'],
'sql' => 'int(10) unsigned NOT NULL default 0',
],
'updatedBy' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey']['updatedBy'],
'inputType' => 'text',
'eval' => ['readonly' => true, 'tl_class' => 'w50'],
'sql' => 'int(10) unsigned NOT NULL default 0',
],
'createdAt' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey']['createdAt'],
'inputType' => 'text',
'eval' => ['rgxp' => 'datim', 'readonly' => true, 'tl_class' => 'w50'],
'sql' => 'int(10) unsigned NOT NULL default 0',
],
'updatedAt' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey']['updatedAt'],
'inputType' => 'text',
'eval' => ['rgxp' => 'datim', 'readonly' => true, 'tl_class' => 'w50'],
'sql' => 'int(10) unsigned NOT NULL default 0',
],
],
];
if ('cli' !== PHP_SAPI) {
$hasListMetadataColumns = false;
try {
$columnNames = array_map(
static fn (string $columnName): string => strtolower($columnName),
System::getContainer()->get('database_connection')->fetchFirstColumn('SHOW COLUMNS FROM tl_survey'),
);
$hasListMetadataColumns = !array_diff(
['categoryfilter', 'categorysummary', 'assignedmembersfilter', 'assignedmemberssummary'],
$columnNames,
);
} catch (\Throwable) {
$hasListMetadataColumns = false;
}
if (!$hasListMetadataColumns) {
$GLOBALS['TL_DCA']['tl_survey']['list']['label']['fields'] = ['title', 'alias'];
unset(
$GLOBALS['TL_DCA']['tl_survey']['fields']['categoryFilter'],
$GLOBALS['TL_DCA']['tl_survey']['fields']['categorySummary'],
$GLOBALS['TL_DCA']['tl_survey']['fields']['assignedMembersFilter'],
$GLOBALS['TL_DCA']['tl_survey']['fields']['assignedMembersSummary'],
);
}
}
+60
View File
@@ -0,0 +1,60 @@
<?php
declare(strict_types=1);
use Contao\DC_Table;
$GLOBALS['TL_DCA']['tl_survey_answer'] = [
'config' => [
'dataContainer' => DC_Table::class,
'ptable' => 'tl_survey_submission',
'closed' => true,
'notCreatable' => true,
'notEditable' => true,
'notCopyable' => true,
'sql' => [
'keys' => [
'id' => 'primary',
'pid' => 'index',
'submission' => 'index',
'question' => 'index',
],
],
],
'list' => [
'sorting' => [
'mode' => 4,
'fields' => ['id'],
'headerFields' => ['token', 'startedAt', 'completedAt'],
'panelLayout' => 'sort,search,limit',
],
'label' => [
'fields' => ['question', 'questionType', 'value'],
'showColumns' => true,
],
'operations' => [
'show' => [
'href' => 'act=show',
'icon' => 'show.svg',
],
],
],
'fields' => [
'id' => ['sql' => 'int(10) unsigned NOT NULL auto_increment'],
'tstamp' => ['sql' => 'int(10) unsigned NOT NULL default 0'],
'pid' => ['sql' => 'int(10) unsigned NOT NULL default 0'],
'submission' => ['sql' => 'int(10) unsigned NOT NULL default 0'],
'question' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey_answer']['question'],
'sql' => 'int(10) unsigned NOT NULL default 0',
],
'questionType' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey_answer']['questionType'],
'sql' => "varchar(32) NOT NULL default ''",
],
'value' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey_answer']['value'],
'sql' => 'text NULL',
],
],
];
+70
View File
@@ -0,0 +1,70 @@
<?php
declare(strict_types=1);
use Contao\DC_Table;
$GLOBALS['TL_DCA']['tl_survey_category'] = [
'config' => [
'dataContainer' => DC_Table::class,
'enableVersioning' => true,
'sql' => [
'keys' => [
'id' => 'primary',
'alias' => 'index',
'sorting' => 'index',
],
],
],
'list' => [
'sorting' => [
'mode' => 1,
'fields' => ['sorting'],
'panelLayout' => 'sort,search,limit',
],
'label' => [
'fields' => ['title', 'alias'],
'showColumns' => true,
],
'operations' => [
'edit' => [
'href' => 'act=edit',
'icon' => 'edit.svg',
],
'delete' => [
'href' => 'act=delete',
'icon' => 'delete.svg',
'attributes' => 'onclick="if(!confirm(\'Eintrag wirklich loeschen?\'))return false;Backend.getScrollOffset()"',
],
'show' => [
'href' => 'act=show',
'icon' => 'show.svg',
],
],
],
'palettes' => [
'default' => '{title_legend},title,alias,sorting',
],
'fields' => [
'id' => ['sql' => 'int(10) unsigned NOT NULL auto_increment'],
'tstamp' => ['sql' => 'int(10) unsigned NOT NULL default 0'],
'title' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey_category']['title'],
'inputType' => 'text',
'eval' => ['mandatory' => true, 'maxlength' => 255, 'tl_class' => 'w50'],
'sql' => "varchar(255) NOT NULL default ''",
],
'alias' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey_category']['alias'],
'inputType' => 'text',
'eval' => ['maxlength' => 128, 'tl_class' => 'w50'],
'sql' => "varchar(128) NOT NULL default ''",
],
'sorting' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey_category']['sorting'],
'inputType' => 'text',
'eval' => ['rgxp' => 'natural', 'tl_class' => 'w50'],
'sql' => 'int(10) unsigned NOT NULL default 0',
],
],
];
+93
View File
@@ -0,0 +1,93 @@
<?php
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,
'ptable' => 'tl_survey',
'enableVersioning' => true,
'onsubmit_callback' => [
[SurveyDcaListener::class, 'touchSurveyConditionParent'],
],
'ondelete_callback' => [
[SurveyDcaListener::class, 'guardConditionDelete'],
[SurveyDcaListener::class, 'touchSurveyConditionParent'],
],
'sql' => [
'keys' => [
'id' => 'primary',
'pid' => 'index',
'sourceQuestion' => 'index',
'targetQuestion' => 'index',
],
],
],
'list' => [
'sorting' => [
'mode' => 4,
'fields' => ['id'],
'headerFields' => ['title', 'alias', 'published', 'isLocked'],
'panelLayout' => 'sort,search,limit',
],
'label' => [
'fields' => ['sourceQuestion', 'answerValue', 'targetQuestion'],
'showColumns' => true,
],
'operations' => [
'edit' => [
'href' => 'act=edit',
'icon' => 'edit.svg',
],
'copy' => [
'href' => 'act=copy',
'icon' => 'copy.svg',
],
'delete' => [
'href' => 'act=delete',
'icon' => 'delete.svg',
'attributes' => 'onclick="if(!confirm(\'Eintrag wirklich loeschen?\'))return false;Backend.getScrollOffset()"',
],
'show' => [
'href' => 'act=show',
'icon' => 'show.svg',
],
],
],
'palettes' => [
'default' => '{logic_legend},sourceQuestion,answerValue,targetQuestion',
],
'fields' => [
'id' => ['sql' => 'int(10) unsigned NOT NULL auto_increment'],
'tstamp' => ['sql' => 'int(10) unsigned NOT NULL default 0'],
'pid' => ['sql' => 'int(10) unsigned NOT NULL default 0'],
'sourceQuestion' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey_condition']['sourceQuestion'],
'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' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey_condition']['targetQuestion'],
'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',
],
],
];
+241
View File
@@ -0,0 +1,241 @@
<?php
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,
'ptable' => 'tl_survey',
'enableVersioning' => true,
'onsubmit_callback' => [
[SurveyDcaListener::class, 'touchSurveyContentParent'],
],
'onpalette_callback' => [
[SurveyDcaListener::class, 'resolveSurveyContentPalette'],
],
'ondelete_callback' => [
[SurveyDcaListener::class, 'guardContentDelete'],
[SurveyDcaListener::class, 'touchSurveyContentParent'],
],
'sql' => [
'keys' => [
'id' => 'primary',
'pid' => 'index',
'sorting' => 'index',
'published' => 'index',
],
],
],
'list' => [
'sorting' => [
'mode' => 4,
'fields' => ['sorting'],
'headerFields' => ['title', 'alias', 'published', 'isLocked'],
'child_record_class' => 'survey-question-record',
'panelLayout' => 'sort,search,limit',
],
'label' => [
'fields' => ['question', 'type'],
'showColumns' => true,
],
'operations' => [
'edit' => [
'href' => 'act=edit',
'icon' => 'edit.svg',
],
'copy' => [
'href' => 'act=copy',
'icon' => 'copy.svg',
],
'delete' => [
'href' => 'act=delete',
'icon' => 'delete.svg',
'attributes' => 'onclick="if(!confirm(\'Eintrag wirklich loeschen?\'))return false;Backend.getScrollOffset()"',
],
'show' => [
'href' => 'act=show',
'icon' => 'show.svg',
],
],
],
'palettes' => [
'default' => '{question_legend},type,question,description;{settings_legend},mandatory,published',
'yes_no_maybe' => '{question_legend},type,question,description;{settings_legend},mandatory,published,allowMaybe,jumpOnYes,jumpOnNo',
'text' => '{question_legend},type,question,description;{settings_legend},mandatory,published',
'range' => '{question_legend},type,question,description;{settings_legend},mandatory,published,rangeMin,rangeMax,rangeStep',
'choice' => '{question_legend},type,question,description;{settings_legend},mandatory,published,allowMultiple,answerOption1,answerOption2,answerOption3,answerOption4,answerOption5,answerOption6,answerOption7,answerOption8,answerOption9,answerOption10',
],
'fields' => [
'id' => ['sql' => 'int(10) unsigned NOT NULL auto_increment'],
'tstamp' => ['sql' => 'int(10) unsigned NOT NULL default 0'],
'pid' => ['sql' => 'int(10) unsigned NOT NULL default 0'],
'sorting' => [
'sql' => 'int(10) unsigned NOT NULL default 0',
],
'type' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey_content']['type'],
'inputType' => 'select',
'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' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey_content']['mandatory'],
'inputType' => 'checkbox',
'default' => '1',
'eval' => ['tl_class' => 'w50 m12'],
'save_callback' => [$guardCallback],
'sql' => "char(1) NOT NULL default ''",
],
'published' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey_content']['published'],
'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' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey_content']['jumpOnYes'],
'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' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey_content']['jumpOnNo'],
'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',
],
],
];
+75
View File
@@ -0,0 +1,75 @@
<?php
declare(strict_types=1);
use Contao\DC_Table;
use Mummert\SurveyBundle\EventListener\SurveyDcaListener;
$guardCallback = [SurveyDcaListener::class, 'guardEditorSave'];
$GLOBALS['TL_DCA']['tl_survey_editor'] = [
'config' => [
'dataContainer' => DC_Table::class,
'ptable' => 'tl_survey',
'enableVersioning' => true,
'ondelete_callback' => [
[SurveyDcaListener::class, 'guardEditorDelete'],
],
'sql' => [
'keys' => [
'id' => 'primary',
'pid' => 'index',
'survey' => 'index',
'member' => 'index',
],
],
],
'list' => [
'sorting' => [
'mode' => 4,
'fields' => ['member'],
'headerFields' => ['title', 'alias', 'isLocked'],
'panelLayout' => 'sort,search,limit',
],
'label' => [
'fields' => ['member'],
'showColumns' => true,
],
'operations' => [
'edit' => [
'href' => 'act=edit',
'icon' => 'edit.svg',
],
'copy' => [
'href' => 'act=copy',
'icon' => 'copy.svg',
],
'delete' => [
'href' => 'act=delete',
'icon' => 'delete.svg',
'attributes' => 'onclick="if(!confirm(\'Eintrag wirklich loeschen?\'))return false;Backend.getScrollOffset()"',
],
'show' => [
'href' => 'act=show',
'icon' => 'show.svg',
],
],
],
'palettes' => [
'default' => '{editor_legend},member',
],
'fields' => [
'id' => ['sql' => 'int(10) unsigned NOT NULL auto_increment'],
'tstamp' => ['sql' => 'int(10) unsigned NOT NULL default 0'],
'pid' => ['sql' => 'int(10) unsigned NOT NULL default 0'],
'survey' => ['sql' => 'int(10) unsigned NOT NULL default 0'],
'member' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey_editor']['member'],
'inputType' => 'select',
'options_callback' => [SurveyDcaListener::class, 'getMemberOptions'],
'eval' => ['mandatory' => true, 'includeBlankOption' => true, 'chosen' => true],
'save_callback' => [$guardCallback],
'sql' => 'int(10) unsigned NOT NULL default 0',
],
],
];
+74
View File
@@ -0,0 +1,74 @@
<?php
declare(strict_types=1);
use Contao\DC_Table;
$GLOBALS['TL_DCA']['tl_survey_submission'] = [
'config' => [
'dataContainer' => DC_Table::class,
'ptable' => 'tl_survey',
'ctable' => ['tl_survey_answer'],
'closed' => true,
'notCreatable' => true,
'notEditable' => true,
'notCopyable' => true,
'sql' => [
'keys' => [
'id' => 'primary',
'pid' => 'index',
'survey' => 'index',
'token' => 'index',
'isFinished' => 'index',
],
],
],
'list' => [
'sorting' => [
'mode' => 4,
'fields' => ['startedAt'],
'headerFields' => ['title', 'alias'],
'panelLayout' => 'sort,search,limit',
],
'label' => [
'fields' => ['token', 'startedAt', 'completedAt', 'isFinished'],
'showColumns' => true,
],
'operations' => [
'edit' => [
'href' => 'table=tl_survey_answer',
'icon' => 'children.svg',
],
'show' => [
'href' => 'act=show',
'icon' => 'show.svg',
],
],
],
'fields' => [
'id' => ['sql' => 'int(10) unsigned NOT NULL auto_increment'],
'tstamp' => ['sql' => 'int(10) unsigned NOT NULL default 0'],
'pid' => ['sql' => 'int(10) unsigned NOT NULL default 0'],
'survey' => ['sql' => 'int(10) unsigned NOT NULL default 0'],
'token' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey_submission']['token'],
'sql' => "varchar(26) NOT NULL default ''",
],
'startedAt' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey_submission']['startedAt'],
'sql' => 'int(10) unsigned NOT NULL default 0',
],
'completedAt' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey_submission']['completedAt'],
'sql' => 'int(10) unsigned NOT NULL default 0',
],
'currentQuestion' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey_submission']['currentQuestion'],
'sql' => 'int(10) unsigned NOT NULL default 0',
],
'isFinished' => [
'label' => &$GLOBALS['TL_LANG']['tl_survey_submission']['isFinished'],
'sql' => "char(1) NOT NULL default ''",
],
],
];