Contao-Camp 2024
Ergebnis 1 bis 6 von 6

Thema: Derselbe User kann sich beliebig oft anmelden

  1. #1
    Contao-Fan
    Registriert seit
    26.09.2012.
    Beiträge
    271

    Standard Derselbe User kann sich beliebig oft anmelden

    Hallo.

    Die Anmeldung klappt soweit wunderbar. Allerdings ist mir aufgefallen, das sich ein ein und der derselbe User immer wieder zum selebn Event anmelden kann.

    Gibt es eine Funktion, die da stehen lässt: "Du bist bereits angemeldet"?

    Eventuell eine Liste mit allen Events, zu denen man sich angemeldet hat?

  2. #2
    Alter Contao-Hase Avatar von kmielke
    Registriert seit
    21.06.2009.
    Beiträge
    1.172

    Standard

    Hi damac,

    aktuell gibt es da nichts.

    Gruß Kester
    Gruß Kester

    Kein Support via PN ohne vorherige Absprache.

  3. #3
    Contao-Nutzer
    Registriert seit
    23.09.2013.
    Beiträge
    7

    Standard

    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
    Geändert von mh_solutions (27.08.2018 um 20:07 Uhr)

  4. #4
    Contao-Nutzer
    Registriert seit
    14.04.2013.
    Beiträge
    8

    Standard Contao 4.7

    Hello,

    gäbe es die Lösung oben auch für Contao 4.7.4 und calendar-extended-bundle?
    Habe zwar versucht die Lösung anzupassen ... komme hier aber leider nicht weit ...

    Vielen Dank für Eure Infos!

    LG

  5. #5
    Alter Contao-Hase Avatar von kmielke
    Registriert seit
    21.06.2009.
    Beiträge
    1.172

    Standard

    Hi,

    mit https://github.com/kmielke/calendar-...ndle/issues/10 gibt es eine Feature Request, bei dem die E-Mail Adresse alleine nicht eindeutig sein darf. Den UseCase finde ich valide. Es gibt aber auch den Wunsch, dass die E-Mail eindeutig sein soll, was ich auch valide finde. Ich muss mir also was schlaues überlegen, wie ich beides abdecken kann.

    Dafür muss ich schauen, wie ich mit Contao Bordmitteln (Hook?) eingreifen kann, bevor contao-leads die Daten speichert. Dort habe ich (glaube ich) keine Möglichkeit ein Feld als "unique" zu markieren.

    Wer immer eine gute Idee hat, kann sich hier äußern.

    Danke
    Gruß Kester
    Gruß Kester

    Kein Support via PN ohne vorherige Absprache.

  6. #6
    Contao-Nutzer
    Registriert seit
    24.06.2012.
    Beiträge
    205

    Standard

    Hallo,
    eine Möglichkeit dass bei der Anmeldung geprüft wird ob sich ein User schon angemeldet hat,
    wird immer wieder mal benötigt. Bei vielen Anmeldungen die manuell zu überprüfen ist recht aufwendig.

    Gibt es hierzu schon eine Lösung?

    besten Dank
    Gruß Thomas
    __________________________________________________ ________________________________
    ich habe keine Zeit, darüber nachzudenken, warum ich keine Zeit habe.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •