Initial survey bundle import
This commit is contained in:
@@ -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',
|
||||
];
|
||||
@@ -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],
|
||||
];
|
||||
@@ -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'],
|
||||
];
|
||||
@@ -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'],
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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',
|
||||
],
|
||||
],
|
||||
];
|
||||
@@ -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',
|
||||
],
|
||||
],
|
||||
];
|
||||
@@ -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',
|
||||
],
|
||||
],
|
||||
];
|
||||
@@ -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',
|
||||
],
|
||||
],
|
||||
];
|
||||
@@ -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',
|
||||
],
|
||||
],
|
||||
];
|
||||
@@ -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 ''",
|
||||
],
|
||||
],
|
||||
];
|
||||
Reference in New Issue
Block a user