Ich habe mir einen kleinen Workaround geschrieben:
tl_calendar_events.php:
Zeile 177:
Code:
$GLOBALS['TL_DCA']['tl_calendar_events']['subpalettes']['useRegistration'] = 'regconfirm,singleregemail,regperson,regform,regstartdate,regenddate';
Neue Checkbox:
Code:
$GLOBALS['TL_DCA']['tl_calendar_events']['fields']['singleregemail'] = array
(
'label' => &$GLOBALS['TL_LANG']['tl_calendar_events']['singleregemail'],
'exclude' => true,
'inputType' => 'checkbox',
'eval' => array('tl_class' => 'w50'),
'sql' => "char(1) NOT NULL default ''"
);
ModuleEventRegistration.php:
Zeile 122:
Code:
$result = CalendarLeadsModel::updateByPid($objResult->pid, $event_id, $email, $published, $objEvent->singleregemail);
CalendarLeadsModel.php:
Methode erweitert:
Code:
public static function updateByPid($pid, $eid, $email, $value, $singleEmail)
{
$emailResults = "";
if($singleEmail) {
$eventSql = 'select pid from ' . static::$strTableDetail . ' where name=? and value=?';
$eventResults = \Database::getInstance()->prepare($eventSql)->execute('eventid', $eid)->fetchAllAssoc();
if($eventResults) {
foreach ($eventResults as $eventResult) {
if(empty($emailResults)) {
$emailSql = 'select pid from ' . static::$strTableDetail . ' where pid=? and name=? and value=?';
$emailResults = \Database::getInstance()->prepare($emailSql)->execute($eventResult["pid"], 'email', $email)->fetchAllAssoc();
}
}
} else {
// ToDo: show errors to the fe user if event does not exist
return false;
}
}
if($emailResults) {
foreach ($emailResults as $emailResult) {
$sql = 'select pid from ' . static::$strTableDetail . ' where pid=? and name=? and value=?';
$checkResult = \Database::getInstance()->prepare($sql)->execute($emailResult["pid"], 'published', 1)->fetchAllAssoc();
if($checkResult) {
// show no errors to the fe user if email already is published for this event
return true;
}
}
} else {
// ToDo: show errors to the fe user if email does not exist
return false;
}
// SQL bauen
$sql = 'update ' . static::$strTableDetail . ' set value = ?, label = ? where pid = ? and name = "published"';
// und ausführen
$objResult = \Database::getInstance()->prepare($sql)->execute((int)$value, (int)$value, (int)$pid);
return (bool)$objResult;
}
Zur Erklärung:
Fügt im Event-Element bei aktivierter Anmeldung eine neue Checkbox (singleregemail) hinzu. Bei aktivierter Checkbox wird in der Methode (updateByPid) folgendes gemacht:
Finden aller pids: Ob es ein Event mit der eventid gibt, wenn ja dann wird die pid gespeichert und wenn nein: return false
Erste foreach-Schleife: Ob es zu allen gefundenen pids auch eine passende E-Mail Adresse gibt, wenn ja dann wird die pid gespeichert und wenn nein: return false
Zweite foreach-Schleife: Ob zu den gefundenen pids schon eine E-Mail auf published=1 steht, wenn ja dann: return true (User bekommt normale Erfolgsmeldung angezeigt) und wenn nein: geht es weiter mit der Eintragung in die Datenbank.
Nicht beigefügt sind die Übersetzungen für die neue Checkbox.
Auch wurden bisher keine umfassenden Tests durchgeführt.
Über Anregungen oder Verbesserungen freue ich mich immer.
EDIT:
Umbau von updateByPid(), damit auch alle Events nach passender E-Mail durchsucht werden
Lesezeichen