From ce66f3a598ded5806500c71ad7e26c31d9a24626 Mon Sep 17 00:00:00 2001 From: Sebastian Zoglowek <55794780+zoglo@users.noreply.github.com> Date: Thu, 11 Apr 2024 13:00:04 +0200 Subject: [PATCH] Alias generation --- contao/dca/tl_member.php | 10 ++++- contao/languages/de/tl_member.xlf | 10 ++++- contao/languages/en/tl_member.xlf | 8 +++- .../DataContainer/MemberFieldsListener.php | 43 +++++++++++++++++++ src/Member.php | 1 - 5 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 src/EventListener/DataContainer/MemberFieldsListener.php diff --git a/contao/dca/tl_member.php b/contao/dca/tl_member.php index ab2efe4..0c18967 100644 --- a/contao/dca/tl_member.php +++ b/contao/dca/tl_member.php @@ -18,7 +18,8 @@ // Extend the default palette PaletteManipulator::create() - ->addField(['avatar'], 'personal_legend', PaletteManipulator::POSITION_APPEND) + ->addField('avatar', 'personal_legend', PaletteManipulator::POSITION_APPEND) + ->addField('alias', 'avatar') ->applyToPalette('default', 'tl_member') ; @@ -45,3 +46,10 @@ ], 'sql' => "binary(16) NULL" ]; + +$GLOBALS['TL_DCA']['tl_member']['fields']['alias'] = [ + 'search' => true, + 'inputType' => 'text', + 'eval' => ['rgxp'=>'alias', 'doNotCopy'=>true, 'unique'=>true, 'maxlength'=>255, 'tl_class'=>'w50'], + 'sql' => "varchar(255) BINARY NOT NULL default ''" +]; diff --git a/contao/languages/de/tl_member.xlf b/contao/languages/de/tl_member.xlf index ac692e8..b2f71ae 100644 --- a/contao/languages/de/tl_member.xlf +++ b/contao/languages/de/tl_member.xlf @@ -9,6 +9,14 @@ Here you can choose a profile picture for the member. Hier können Sie ein Profilbild für das Mitglied auswählen. + + Member alias + Mitgliedsalias + + + The member alias is a unique reference to the news item which can be called instead of its numeric ID. + Der Mitgliedsalias ist eine eindeutige Referenz, die anstelle der numerischen Mitglieds-ID aufgerufen werden kann. + Settings Einstellungen @@ -19,4 +27,4 @@ - \ No newline at end of file + diff --git a/contao/languages/en/tl_member.xlf b/contao/languages/en/tl_member.xlf index fade756..ba70a93 100644 --- a/contao/languages/en/tl_member.xlf +++ b/contao/languages/en/tl_member.xlf @@ -7,6 +7,12 @@ Here you can choose an avatar for the member. + + Member alias + + + The member alias is a unique reference to the news item which can be called instead of its numeric ID. + Settings @@ -15,4 +21,4 @@ - \ No newline at end of file + diff --git a/src/EventListener/DataContainer/MemberFieldsListener.php b/src/EventListener/DataContainer/MemberFieldsListener.php new file mode 100644 index 0000000..a8f7bdb --- /dev/null +++ b/src/EventListener/DataContainer/MemberFieldsListener.php @@ -0,0 +1,43 @@ +prepare("SELECT id FROM tl_member WHERE alias=? AND id!=?") + ->execute($alias, $dc->id); + + return $result->numRows > 0; + }; + + if (!$varValue) + { + $varValue = $dc->activeRecord->firstname . '_' . $dc->activeRecord->lastname . ($aliasExists ? '_' . $dc->activeRecord->id : ''); + } + if (preg_match('/^[1-9]\d*$/', $varValue)) + { + throw new Exception(sprintf($GLOBALS['TL_LANG']['ERR']['aliasNumeric'], $varValue)); + } + elseif ($aliasExists($varValue)) + { + throw new Exception(sprintf($GLOBALS['TL_LANG']['ERR']['aliasExists'], $varValue)); + } + + return $varValue; + } +} diff --git a/src/Member.php b/src/Member.php index c8d1065..ebe775c 100644 --- a/src/Member.php +++ b/src/Member.php @@ -56,7 +56,6 @@ public static function processAvatar(?MemberModel $objMember, ?array $arrData): return; } - // ToDo: remove $_SESSION when contao 4.13 support ends (Contao ^5.* is not possible with Contao 4.* support) $maxlength_kb = FileUpload::getMaxUploadSize(); //$maxlength_kb_readable = System::getReadableSize($maxlength_kb);