Initial release

This commit is contained in:
Jürgen Mummert
2026-03-02 21:28:17 +01:00
commit 0ea1a9a8ac
57 changed files with 2497 additions and 0 deletions
+115
View File
@@ -0,0 +1,115 @@
<?php
declare(strict_types=1);
use Contao\CoreBundle\DataContainer\PaletteManipulator;
use Contao\DataContainer;
use Contao\Database;
PaletteManipulator::create()
->addLegend('submission_legend', 'publish_legend', 'before')
->addField('submittedByMember', 'submission_legend', 'append')
->addField('submittedByName', 'submission_legend', 'append')
->addField('submittedByEmail', 'submission_legend', 'append')
->applyToPalette('default', 'tl_news')
->applyToPalette('internal', 'tl_news')
->applyToPalette('article', 'tl_news')
->applyToPalette('external', 'tl_news');
$GLOBALS['TL_DCA']['tl_news']['config']['onsubmit_callback'][] = static function (DataContainer $dc): void {
$newsId = (int) ($dc->id ?? 0);
if ($newsId <= 0) {
return;
}
$database = Database::getInstance();
$memberId = (int) $database
->prepare('SELECT submittedByMember FROM tl_news WHERE id=?')
->limit(1)
->execute($newsId)
->submittedByMember;
if ($memberId <= 0) {
$database
->prepare('UPDATE tl_news SET submittedByName=?, submittedByEmail=? WHERE id=?')
->execute('', '', $newsId);
return;
}
$member = $database
->prepare('SELECT firstname, lastname, email FROM tl_member WHERE id=?')
->limit(1)
->execute($memberId)
->fetchAssoc();
if (false === $member || null === $member) {
$database
->prepare('UPDATE tl_news SET submittedByName=?, submittedByEmail=? WHERE id=?')
->execute('', '', $newsId);
return;
}
$name = trim((string) (($member['firstname'] ?? '').' '.($member['lastname'] ?? '')));
$email = trim((string) ($member['email'] ?? ''));
$database
->prepare('UPDATE tl_news SET submittedByName=?, submittedByEmail=? WHERE id=?')
->execute($name, $email, $newsId);
};
$GLOBALS['TL_DCA']['tl_news']['fields']['submittedByMember'] = [
'label' => &$GLOBALS['TL_LANG']['tl_news']['submittedByMember'],
'exclude' => true,
'inputType' => 'select',
'options_callback' => static function (): array {
$rows = Database::getInstance()
->prepare('SELECT id, firstname, lastname FROM tl_member ORDER BY lastname ASC, firstname ASC')
->execute()
->fetchAllAssoc();
$options = [];
foreach ($rows as $row) {
$id = (int) ($row['id'] ?? 0);
if ($id <= 0) {
continue;
}
$lastName = trim((string) ($row['lastname'] ?? ''));
$firstName = trim((string) ($row['firstname'] ?? ''));
$label = trim($lastName.', '.$firstName, ' ,');
$options[$id] = '' !== $label ? $label : 'Mitglied #'.$id;
}
return $options;
},
'save_callback' => [
static function ($value): int {
return max(0, (int) $value);
},
],
'eval' => ['chosen' => true, 'includeBlankOption' => true, 'tl_class' => 'clr w50'],
'sql' => ['type' => 'integer', 'unsigned' => true, 'notnull' => false],
];
$GLOBALS['TL_DCA']['tl_news']['fields']['submittedByName'] = [
'label' => &$GLOBALS['TL_LANG']['tl_news']['submittedByName'],
'exclude' => true,
'inputType' => 'text',
'eval' => ['readonly' => true, 'disabled' => true, 'tl_class' => 'w50'],
'sql' => "varchar(255) NOT NULL default ''",
];
$GLOBALS['TL_DCA']['tl_news']['fields']['submittedByEmail'] = [
'label' => &$GLOBALS['TL_LANG']['tl_news']['submittedByEmail'],
'exclude' => true,
'inputType' => 'text',
'eval' => ['readonly' => true, 'disabled' => true, 'rgxp' => 'email', 'tl_class' => 'w50'],
'sql' => "varchar(255) NOT NULL default ''",
];