250 lines
10 KiB
PHP
250 lines
10 KiB
PHP
<?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',
|
|
'isActive' => 'index',
|
|
'isTemplate' => 'index',
|
|
],
|
|
],
|
|
],
|
|
'list' => [
|
|
'sorting' => [
|
|
'mode' => 1,
|
|
'fields' => ['title'],
|
|
'flag' => 1,
|
|
'panelLayout' => 'filter;sort,search,limit',
|
|
],
|
|
'label' => [
|
|
'fields' => ['title', 'categorySummary', 'assignedMembersSummary', 'templateSummary'],
|
|
'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',
|
|
],
|
|
'publishedWarning' => [
|
|
'label' => &$GLOBALS['TL_LANG']['tl_survey']['publishedWarning'],
|
|
'icon' => 'important.svg',
|
|
'button_callback' => [SurveyDcaListener::class, 'generatePublishedWarningButton'],
|
|
],
|
|
'toggle' => [
|
|
'label' => &$GLOBALS['TL_LANG']['tl_survey']['toggleActive'],
|
|
'href' => 'act=toggle&field=isActive',
|
|
'icon' => 'visible.svg',
|
|
'primary' => true,
|
|
],
|
|
'delete' => [
|
|
'href' => 'act=delete',
|
|
'icon' => 'delete.svg',
|
|
'attributes' => 'onclick="if(!confirm(\'Eintrag wirklich löschen?\'))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,category,description;{assignment_legend},assignedMembers;{publishing_legend},isTemplate;{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'],
|
|
'filter' => 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'],
|
|
'sql' => 'blob NULL',
|
|
],
|
|
'categoryFilter' => [
|
|
'label' => &$GLOBALS['TL_LANG']['tl_survey']['categoryFilter'],
|
|
'inputType' => 'select',
|
|
'options_callback' => [SurveyDcaListener::class, 'getUsedCategoryFilterOptions'],
|
|
'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 ''",
|
|
],
|
|
'isActive' => [
|
|
'label' => &$GLOBALS['TL_LANG']['tl_survey']['isActive'],
|
|
'inputType' => 'checkbox',
|
|
'sql' => "char(1) NOT NULL default ''",
|
|
],
|
|
'isTemplate' => [
|
|
'label' => &$GLOBALS['TL_LANG']['tl_survey']['isTemplate'],
|
|
'inputType' => 'checkbox',
|
|
'eval' => ['tl_class' => 'w50 m12'],
|
|
'sql' => "char(1) NOT NULL default ''",
|
|
],
|
|
'templateFilter' => [
|
|
'label' => &$GLOBALS['TL_LANG']['tl_survey']['templateFilter'],
|
|
'filter' => true,
|
|
'inputType' => 'select',
|
|
'options_callback' => [SurveyDcaListener::class, 'getTemplateFilterOptions'],
|
|
'eval' => ['includeBlankOption' => true, 'chosen' => true],
|
|
'sql' => "char(1) NOT NULL default ''",
|
|
],
|
|
'templateSummary' => [
|
|
'label' => &$GLOBALS['TL_LANG']['tl_survey']['templateSummary'],
|
|
'sql' => "varchar(16) 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', 'templatefilter', 'templatesummary', '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']['templateFilter'],
|
|
$GLOBALS['TL_DCA']['tl_survey']['fields']['templateSummary'],
|
|
$GLOBALS['TL_DCA']['tl_survey']['fields']['assignedMembersFilter'],
|
|
$GLOBALS['TL_DCA']['tl_survey']['fields']['assignedMembersSummary'],
|
|
);
|
|
}
|
|
} |